博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mybatis动态SQL
阅读量:4363 次
发布时间:2019-06-07

本文共 2560 字,大约阅读时间需要 8 分钟。

? 动态SQL在xml中支持的标签

  • if
  • choose
  • where
  • trim
  • foreach
  • bind

if

if在where中使用

test属性值是一个符合OGNL要求的判断表达式,结果为true或false。在数值中,所有的非0都是true,只有0为false。

  • property!=null:适用于任何类型的字段,用于判断是否为空

  • property!='':判断字符串

  • and 和 or:and -> &&,可以使用小括号分组

    模糊查询:

name like concat('%',#{name},'%')name like '%${name}%'

在update中使用if

update sys_user
and userName=#{userName},
and userInfo=#{userInfo},
headImg=#{headImg, jdbcType=BLOB},
createTime=#{createTime, jdbcType=timestamp},
where id=#{id}

trim

使用trim实现where

foreach

foreach实现in

#{id}

findAll(List)

  • collection的值:list|array|collection|_parameter

list,array,collection,_parameter都是map参数的key

/ DefaultSqlSession.wrapCollection方法

private Object wrapCollection(final Object object) {    if (object instanceof Collection) {      StrictMap map = new StrictMap<>();      map.put("collection", object);      if (object instanceof List) {        map.put("list", object);      }      return map;    } else if (object != null && object.getClass().isArray()) {      StrictMap map = new StrictMap<>();      map.put("array", object);      return map;    }    return object;  }

foreach实现批量插入

insert into user( id,username,password ) values
( #{id},#{username},#{password} )

foreach实现动态更新

当参数为Map的时候,foreach的index不是索引,而是map的key,利用这个key实现动态更新

update sys_user set
#{key}=#{val}
where id=#{id}

updateByMap(new HashMap<String, Object>());

bind

bind标签中可以使用OGNL表达式

  • 模糊查询

使用了MySQL的函数(concat),不兼容

  • 替代方法,使用字符串拼接

bind中的OGNL表达式可以防止SQL注入

mybatis适配不同的数据库,生成不同的SQL

  • mybat-config.xml
  • mapper.xml

转载于:https://www.cnblogs.com/zhuxiang1633/p/11571234.html

你可能感兴趣的文章
JavaScript原生错误及检测
查看>>
最小权限的挑战
查看>>
jquery 视觉特效(水平滚动图片)
查看>>
SVG笔记
查看>>
linux下使用dd命令写入镜像文件到u盘
查看>>
物联网架构成长之路(8)-EMQ-Hook了解、连接Kafka发送消息
查看>>
2018-2019-1 20165234 20165236 实验二 固件程序设计
查看>>
IDEA的GUI连接数据库写入SQL语句的问题总结
查看>>
Xpath在选择器中正确,在代码中返回的是空列表问题
查看>>
leecode第一百九十八题(打家劫舍)
查看>>
【BZOJ 1233】 [Usaco2009Open]干草堆tower (单调队列优化DP)
查看>>
07-3. 数素数 (20)
查看>>
写一个欢迎页node统计接口Py脚本(邮件,附件)-py
查看>>
计算两个日期之间的天数
查看>>
Android关于buildToolVersion与CompileSdkVersion的区别
查看>>
袋鼠云日志,日志分析没那么容易
查看>>
缓存穿透 缓存雪崩 缓存并发
查看>>
了解你的Linux系统:必须掌握的20个命令
查看>>
js setInterval 启用&停止
查看>>
knockoutJS学习笔记04:监控属性
查看>>