mybatis @select注解,mybatis注解方式写SQL语句
目录
MyBatis使用了动态SQL1,用脚本标签包围2,使用Provider实现SQL拼接3,讲解了MyBatis xml注释SQL的注意事项。
MyBatis在注解上使用动态SQL
00-1010,然后像xml语法一样编写。
@Select({script , SELECT * FROM tbl_order , WHERE 1=1 , when test=title!=null ,和mydate=#{mydate} ,/when ,/script})
例如00-1010:
public class ORDER provider { private final String TBL _顺序= tbl _顺序;公共字符串queryOrderByParam(order para param){ SQL SQL=new SQL()。选择( * )。出发地(TBL _订单);string room=param . getroom();if(string utils . hastext(room)){ SQL。WHERE(房如# { room } );} Date myDate=param . getmydate();如果(我的日期!=null) { sql。WHERE( mydate LIKE # { mydate } );}返回SQL . tostring();} }公共接口order Dao { @ select provider(type=order provider . class,method= queryOrderByParam )list order queryOrderByParam(order param param);}注意:方法1的一个隐患是,当传入的参数为空时,可能会造成全表查询。
使用方法2的复杂SQL会更加灵活(当然不建议写复杂SQL),可以抽象成一个通用基类,让每一个DAO都可以通过这个基类实现基本的通用查询。原理类似于弹簧JDBC模板。
1、用script标签包围
如果XML元素嵌入在scriptXML元素中,您可以在注释值中为动态SQL使用XML元素:
@ select (scriptselect./script ),但是使用include元素将触发SQL映射器配置解析异常,这是由以下原因引起的:
org . Apache . ibatis . builder . builder exception : SQL语句中的未知元素。位于org . Apache . ibatis . scripting . XML tags . XML script builder . parsedynamictags
如果nodeHandlers检查类中的方法org . Apache . ibatis . builder . builder exception,将会注意到支持的元素有:
trimresetforeachicfhoosewherewisebind然而,在基于注释的查询中不可能包含片段。
00-1010解释:不是说mybatis的sql不能写注释,而是注释不能有# {},mybatis还是把# {}算作带注入的参数。
如代码段2所示,当mysql数据库替换为oracle数据库时,#{date}需要指定jdbcType,在该代码段中只会进行适用于mysql的sql注释,仍然会报错。最好删除注释过的sql。
select id= slectslagsteelrationbydate resultType= Java . lang . double -select slag steel _ ratio FROM process _ history WHERE r furnace _ num=# { furnace num }-ORDER BY real _ time desc限制0,1 select slag steel _ ratio FROM(select slag steel _ ratio FROM process _ history WHERE real _ time lt;=#{date,JDBC type=TIMESTAMP } ORDER BY real _ time desc)其中ROWNUM=1/select
00-10101,where语句等。需要在使用大于或小于等符号时使用![CDATA[ ]]或者![CDATA[ ],用于识别。
2.如果sql文本中有一个动态的sql text标签,比如sql text,那么wwww就是被传递的参数,所以可以直接使用它,而不需要使用# { # { wwww }来获取值。
3.如果有多个参数,在定义接口方法的每个参数时,需要使用@Param注释。
4.order by语句可以使用动态sql
ORDER BY eeee ORDER BY rrrrrr5、SELECT
当条件1然后场1时的情况当条件2然后场2时的情况
否则字段3结束于.只要满足一个WHEN,后面的WHEN就不会执行,CASE WHEN语句会被跳过。
以上个人经验,希望能给大家一个参考,也希望大家能支持盛行的IT。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。