在开发一个医疗管理系统,有一个综合查询的模块。在这里用户会填写若干个条件,然后系统连接一个SQL语句,执行查询。
现在主要出现两个问题:
第一个就是多个条件如何并列?要能够表示与和或关系(使用一条where语句,然后使用同AND和 OR连接多个条件吗?还是有其他更好的办法。)求思路,如果有SQL语句的实例就更好了。。。。
第二个就是优先级问题,比如我有三个条件A、B和C。现在这三个条件的并列关系是A and B or C那么我这里的优先级是 (A and B) or C 还是什么。。。这个问题有点扯淡了,我主要想知道大部分系统中是咋做的。。。
求大神各个解决的思路。。。。。
动态拼接sql条件,要有优先级,那么加上括号好了。
有离线查询@Test
//* 离线查询(重点)---DetachedCriteria
public void test9(){
//模拟web层
String pname = "小米";
double minPrice = 20D;
double maxPrice = 5000D;
//直接封装DetachedCriteria
DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Customer.class);
detachedCriteria.add(Restrictions.like("xxx", "%"+pname+"%"));
//...........
//模拟service
//将detachedCriteria传递给service
//模拟dao层
Session session = HibernateUtils.openSession();
Criteria criteria = detachedCriteria.getExecutableCriteria(session);
List<Customer> list = criteria.list();
}
通过 mybatis的 where if 标签 来判断
<select id="advanceQuery" resultType="com.ctjy.wxmis.manager.dto.ArtDto">
select a.id,a.art_type as artType,a.art_img as artImg,a.art_title as artTitle,a.art_content as artContent,
a.art_url as artUrl,a.clicks,a.art_column as artColumn,a.art_from as artFrom,
a.create_date as createDate,b.column_name as columnName,c.account,a.publish,a.summary
from
t_art a
left join t_art_column b on(a.art_column=b.id)
left join t_login_user c on(a.create_user=c.id)
where a. available=1 and b.available=1
<if test="art.artTitle !=null and art.artTitle!=''">
and a.art_title like CONCAT('%',#{art.artTitle},'%' )
</if>
<if test="art.artColumn !=null and art.artColumn!=''">
and a.art_column like CONCAT('%',#{art.artColumn},'%' )
</if>
limit #{start},#{pagesize}