ms
2022-6-20
mybatis动态SQL常用的标签
1. 标签。
也叫片段,在使用sql片段时使用include标签通过sql片段的id进行引用
id, name, age, hobby, del_flag, create_time, update_time
2.标签、标签
- where;根据where其后是否有sql,判断拼接 where,满足条件就拼接,否则不拼接
- if:当参数满足条件才会执行某个条件
3.choose、when、otherwise 标签.
choose、when、otherwise : choose标签是按顺序判断其内部when标签中的test条件是否成立,如果有一个成立,则choose结束;如果所有的when条件都不满足时,则执行otherwise中的SQL。类似于java的switch语句。
4.标签
set标签用于解决动态更新语句存在的符号问题
与where有相似,其后如果存在条件,则拼接set。
update animal
age = #{age}
name = #{name},
hobby = #{hobby}
where id = #{id}
update animal
`name` = #{name,jdbcType=VARCHAR},
`age` = #{age,jdbcType=VARCHAR},
hobby = #{hobby,jdbcType=VARCHAR},
create_time = #{create_time,jdbcType=TIMESTAMP},
update_time = #{update_time,jdbcType=TIMESTAMP},
where id = #{id,jdbcType=INTEGER}
5.标签
用于遍历List、Map、Array , 属性如下:
collection:指定需要遍历的元素
item:遍历之后的每一项
separator:定义foreach里面语句的分隔符
index:map中代表key,数组中代表数组下标
6。标签,用来定义变量,
示例:
mapper层:
List getByName(@Param("animalName") String name);
xml映射层:
bind:bind标签可以从OGNL(对象图导航语言)表达式中创建一个变量并将其绑定到上下文
Mybatis中使用Mysql的模糊查询字符串拼接(like) 中也涉及到bind的使用
7.trim
trim:trim标签可实现where/set标签的功能
Trim标签有4个属性,分别为prefix、suffix、prefixOverrides、suffixOverrides
prefix:表示在trim标签包裹的SQL前添加指定内容
suffix:表示在trim标签包裹的SQL末尾添加指定内容
prefixOverrides:表示去掉(覆盖)trim标签包裹的SQL指定首部内容,去掉多个内容写法为and |or(中间空格不能省略)(一般用于if判断时去掉多余的AND |OR)
suffixOverrides:表示去掉(覆盖)trim标签包裹的SQL指定尾部内容(一般用于update语句if判断时去掉多余的逗号)
Update tab_stu
name=#{name},
age=#{age},
class=#{class},
subject=#{subject}
mybatis批量插入后获取自增主键
批量插入返回自增ID列表和普通插入返回自增ID是一样的,通常只需要在 mapper.xml 的 上添加属性 useGeneratedKeys=“true” keyProperty=“id” 就能实现插入成功后,mybatis 会把获得的自增ID set 到对象里,如自动 set 到 user 对象的 id 属性里,而非通过返回值获得ID或ID列表。
Dao
void insertBatch(List users); // 批量插入
Mapper.xml
insert into user
(user_name, age)
values
(
#{item.userName, item.age}
)
需要注意
关于这个批量导入返回id列表需要注意以下几点
1、确保 mybatis 版本在 3.3.1 以上
2、batchInsert 方法上不能加 @param()
3、batchInsert 方法只能一个参数
4、batchInsert 返回值为 Integer 或 void,不能写 List
5、如果你的自增id数据库字段和实体类属性不一致,如 user_id 和 userId, 需要写成useGeneratedKeys=“true” keyColumn=“user_id” keyProperty=“userId”