码迷,mamicode.com
首页 > 数据库 > 详细

MyBatis在注解上使用动态SQL(@select使用if)

时间:2017-08-29 18:56:06      阅读:322      评论:0      收藏:0      [点我收藏+]

标签:XML   use   ast   color   where   blog   template   method   list   

1、用script标签包围,然后像xml语法一样书写

@Select({"<script>",
    "SELECT * FROM tbl_order",
    "WHERE 1=1",
    "<when test=‘title!=null‘>",
    "AND mydate = #{mydate}",
    "</when>",
    "</script>"})

2、用Provider去实现SQL拼接,例如:

public class OrderProvider {
    private final String TBL_ORDER = "tbl_order";

    public String queryOrderByParam(OrderPara param) {
        SQL sql = new SQL().SELECT("*").FROM(TBL_ORDER);
        String room = param.getRoom();
        if (StringUtils.hasText(room)) {
            sql.WHERE("room LIKE #{room}");
        }
        Date myDate = param.getMyDate();
        if (myDate != null) {
            sql.WHERE("mydate LIKE #{mydate}");
        }
        return sql.toString();
    }
}

public interface OrderDAO {
    
    @SelectProvider(type = OrderProvider.class, method = "queryOrderByParam")
    List<Order> queryOrderByParam(OrderParam param);

}

注意:方式1有个隐患就是当传入参数为空的时候,可能会造成全表查询。

复杂SQL用方式2会比较灵活(当然,并不建议写复杂SQL),而且可以抽象成通用的基类,使每个DAO都可以通过这个基类实现基本的通用查询,原理类似Spring JDBC Template

 

参考:

https://segmentfault.com/q/1010000006875476(以上内容转自此篇回答)

https://stackoverflow.com/questions/6685655/how-to-use-dynamic-sql-query-in-mybatis-with-annotationhow-to-use-selectprovide

MyBatis在注解上使用动态SQL(@select使用if)

标签:XML   use   ast   color   where   blog   template   method   list   

原文地址:http://www.cnblogs.com/EasonJim/p/7449699.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!