mybatis-笔记
基本写法
insert
- 取回自增主键
// useGeneratedKeys取出由数据库自动生成的主键,仅对支持主键自动生成的数据库有效,默认为 false
// keyProperty主键的名称,必须与useGeneratedKeys 一起使用,默认未设置
INSERT INTO user(username,age,score) VALUES (#{username},#{age},#{score})
- 批量插入
// 需要在数据库配置文件中url中添加参数allowMultiQueries=true
insert into person(username,email,gender) VALUES
(#{vo.username},#{vo.email},#{vo.gender})
update
UPDATE user SET age = #{age} WHERE id = #{id}
// set 主要用于动态更新时,智能消除逗号
UPDATE user
title = #{title},
content = #{content},
where id = #{id}
delete
DELETE FROM user WHERE id = #{id}
query
- 模糊查询
mybatis中内置的参数_databaseId中保存了用户所指定的对应的数据库厂商标识
mybatis的另一个内置参数_parameter保存了对应传入的对象
CONCAT('%',#{username},'%')
'%' || #{username} || '%'
- IN 查询
- 日期查询
jdbcType =DATE 日期精确到年月日 剩余分秒 填0补齐
jdbcType= TIMESTAMP 日期精确到时分秒
jdbcType 重要性 传入null值时,可以防止null空指针异常报错
AND = #{startTime,jdbcType=DATE} ]]>
其他标签
- resultType 上指定的类的全路径名(或指定了别名),MyBatis 会自动创建 resultMap 对象进行数据的映射
- 使用resultMap标签直接定义映射关系,能避免 MyBatis类型 推断和映射带来的性能损耗
- resultMap 和 resultType 不能共存,只能二选一
- sql标签可以抽出一部分sql片段
- parameterType 语句的参数类型,默认可选,MyBatis 会自动推断
id,username,age,score
- trim 可以在自己包含的内容前加上某些前缀,也可以在其后加上某些后缀
prefix: 前缀属性,若标签内不为空则在 SQL 中添加上前缀;
prefixOverrides: 前缀覆盖属性,若标签中有多余的前缀,将会被覆盖(其实就是丢弃该前缀);
suffix: 后缀属性,若标签内不为空则在 SQL 中添加上后缀;
suffixOverrides: 后缀覆盖属性,若标签中有多余的后缀,将会被覆盖(其实就是丢弃该后缀)。
UPDATE imooc_user
username = #{username},
id = #{id}
WHERE id = #{id}
批处理
// ExecutorType设置
SIMPLE 就是普通的执行器(默认);
REUSE 执行器会重用预处理语句(prepared statements);
BATCH 执行器将重用语句并执行批量更新。
SqlSession session = MyBatisUtils.getSqlSessionFactory().openSession(ExecutorType.BATCH);
PersonMapper personMapper = session.getMapper(PersonMapper.class);
for (int i = 1100; i < 2000; i++) {
Person person = new Person("boss" + i, i + "aa@q.com", "x");
//应用批处理
personMapper.addPerson(person);
}
session.commit();
session.close();
Mybatis插件-拦截器
- ParameterHandler:处理SQL参数对象
- ResultSetHandler:处理SQL返回的结果集对象
- StatementHandler:数据库处理对象,用于执行sql语句
- Executor:Mybatis执行器