? 动态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 where id=#{id} and userName=#{userName}, and userInfo=#{userInfo}, headImg=#{headImg, jdbcType=BLOB}, createTime=#{createTime, jdbcType=timestamp},
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
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