mysql注解查询动态sql_MyBatis在注解上使用动态SQL(@select使用if)

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

48304ba5e6f9fe08f3fa1abda7d326ab.png

@Select({"

"SELECT * FROM tbl_order",

"WHERE 1=1",

"",

"AND mydate = #{mydate}",

"",

""})

48304ba5e6f9fe08f3fa1abda7d326ab.png

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

48304ba5e6f9fe08f3fa1abda7d326ab.png

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 queryOrderByParam(OrderParam param);

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

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

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

3、说明:

如果XML元素嵌入在

@Select("")

但是使用元素会触发SQL Mapper配置解析异常,由以下原因引起:

org.apache.ibatis.builder.BuilderException: Unknown element in SQL statement. at org.apache.ibatis.scripting.xmltags.XMLScriptBuilder.parseDynamicTags

如果nodeHandlers在课堂中检查方法org.apache.ibatis.builder.BuilderException,将注意到支持的元素有:

trim

where

set

foreach

if

choose

when

otherwise

bind

然而,包括基于注释的查询中的片段是不可能的。

参考:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值