大多数mybatis基本都用xml 配置。而今天再用注解版mybatis就遇到了个问题,我比如要查询一句有多条件的数据,但是该数据具体不知道是否为空,这时候我考虑到了要用动态sql语句来写。像xml有if可以来判断值是否为空,注解版该怎么处理呢?
image.png
@Select("<script>select id,create_time as createTime," +
"update_time as updateTime,is_del as isDel ," +
"phone_number as phoneNumber,password,sex,status,username" +
" from com_admin where is_del = 0 " +
"<if test=\"keyword !=null and keyword != ''\">and username like #{keyword}</if> " +
"<if test=\"startTime!=null and startTime!=''\">and create_time > #{startTime}</if>" +
"<if test=\"endTime!=null and endTime!=''\">and create_time < #{endTime}</if></script> ")
List<AdminAllMessage> search(String keyword, String startTime, String endTime);
思考
注解版是让我们输入一串字符串,肯定不能直接使用xml的写法
所以我们需要<script></script>这一串标记来解决这个问题
将自己sql语句代码输入进@select注解中就好了,你以为结束了嘛?这时候就会遇到了bug了
由于在这个script中不能在使用< ,>, <>符号,所以用这些符号的都会报错。那该怎么办?
@Select("<script>select id,create_time as createTime," +
"update_time as updateTime,is_del as isDel ," +
"phone_number as phoneNumber,password,sex,status,username" +
" from com_admin where is_del = 0 " +
"<if test=\"keyword !=null and keyword != ''\">and username like #{keyword}</if> " +
"<if test=\"startTime!=null and startTime!=''\">and create_time > #{startTime}</if>" +
"<if test=\"endTime!=null and endTime!=''\">and create_time < #{endTime}</if></script> ")
List<AdminAllMessage> search(String keyword, String startTime, String endTime);
通过& lt; & gt;符号来解决 <,>无法使用的问题。这时候你就可以快乐的写注解了
网友评论