public interface OrderMapper extends SqlMapper{
@Select("select * from tbl_order where room like #{room} and mydate like #{mydate}")
public List<Order> getbyroom(OrderPara op);
}
这样整个语句是写死的,必须有2个参数,在这种模式下,如何能实现根据room和mydate是否为空来动态的拼写sql语句
比如当mydate=""
Select("select * from tbl_order where room like #{room} ")
public List<Order> getbyroom(OrderPara op);
如果用xml来配置语句的话,可以用<when test="title != null">
and mydate= #{mydate}
</when>
如果是用@Select 这种 改如何做呢?
个人所知有2种解决方法:
1、用
script
标签包围,然后像xml语法一样书写2、用
Provider
去实现SQL拼接,例如:注意:方式1有个隐患就是当传入参数为空的时候,可能会造成全表查询。
复杂SQL用方式2会比较灵活(当然,并不建议写复杂SQL),而且可以抽象成通用的基类,使每个DAO都可以通过这个基类实现基本的通用查询,原理类似
Spring JDBC Template
。