1. typeAliases标签配置别名
(1) typeAliases标签有什么作用? 如何使用?
给类型起别名
(2) 如何在MyBatis中为类型定义别名?
2. 配置parameterType属性进行参数的传递
配置parameterType属性进行参数的传递
3. MyBatis事务管理_工具类提取_实现新增操作
(1) MyBatis中如何管理事务?
①事务是数据库操作的最小单元, 有 ACID 的特性. 应该证一个事务的的 SQL 语句要么同时成功, 要么都不成功.
②MyBatis 中配置了事务管理器, type 属性设置为 JDBC. 表示 MyBatis 采用和原生 JDBC 相同的事务管理机制.
③在 MyBatis 执行的开始时,将自动提交功能关闭了.所以, 在执行 DML 操作时, 需要手动提交事务.
(2) 为什么增删改标签没有resultType属性?
由于DML 操作的返回值都是 int 类型, 所以, 不需要定义resultType 属性.
4. MyBatis接口绑定方案
(1) 什么是接口绑定?
MyBatis 中, 提供了一套接口绑定方案. 程序员可以提供一个 接 口 , 然 后 提 供 对 应 接 口 的 一 个 mapper.xml 文 件 .MyBatis 会自动将接口和 xml 文件进行绑定. 实际上就是MyBatis 会根据接口和对应的 xml 文件创建接口的实现类.换言之, 就是可以得到接口类型的对象, 方便方法的调用.
(2) 接口绑定的实现需要满足那些条件?
①xml 文件名要和接口名一致
②namespace 属性必须为接口的全限定路径
③id 属性必须和接口对应的方法名一致
定义接口
编写对应接口的映射文件
在核心配置文件中扫描接口
a) 扫描单个接口, 可以使用 mapper 标签的 class 属
b) 当扫描多个接口时,为简化配置,可以使用 package 标签表示扫描对应包下的所有接口.
在使用时, 可以通过 SqlSession 对象的 getMapper 方法, 得到接口的代理对象, 从而可以调用定义好的方法
5. 接口绑定解决多参数传递问题_@Param注解的使用
(1) MyBatis中#{}和${}的区别是什么?
#{} 和 ${} 在预编译中的处理是不一样的。#{} 在预处理时,会把参数部分用一个占位符 ? 代替,而${}直接已字符串代替;${}方式会引发SQL注入的问题、同时也会影响SQL语句的预编译
(2) @Param注解有什么作用?
给参数命名
6. MyBatis的动态SQL概述
(1) 什么是动态SQL? 有什么作用?
条件不同,生成的SQL语句也会不同。可以简化代码
(2) 动态SQL常用的标签有哪些?
7. 动态SQL_if_where
(1) if标签的作用是什么? 怎么使用?
用于进行条件判断, test 属性用于指定判断条件. 为了拼接条件, 在 SQL 语句后强行添加 1=1 的恒成立条件.
(2) where标签的作用是什么? 怎么使用?
用于管理 where 子句. 有如下功能:
①如果没有条件, 不会生成 where 关键字
②如果有条件, 会自动添加 where 关键字
③如果第一个条件中有 and, 去除之
8. 动态SQL_choose_when_otherwise_set
(1) choose/when/otherwise什么时候使用?
这是一套标签, 功能类似于 switch...case..
(2) set标签有什么作用?
用于维护 update 语句中的 set 子句. 功能如下:
①满足条件时, 会自动添加 set 关键字
②会去除 set 子句中多余的逗号
③不满足条件时, 不会生成 set 关键字
9. 动态SQL_trim_bind
(1) trim标签的作用是什么? 如何使用?
用于在前后添加或删除一些内容
①prefix, 在前面添加内容
②prefixOverrides, 从前面去除内c)suffix, 向后面添加内容
③suffixOverrides, 从后面去除内容
(2) bind标签怎么使用? 有什么作用?
用于对数据进行再加工, 用于模糊查询
10. 动态SQL_foreach_sql_include
(1) foreach标签的作用是什么? 如何使用?
用于在 SQL 语句中遍历集合参数, 在 in 查询中使用
①collection: 待遍历的集合
②open: 设置开始符号
③item: 迭代变量
④separator: 项目分隔符
⑤close: 设置结束符号
(2) sql/include标签的作用是什么?
11. MyBatis的缓存机制
(1) 什么是缓存? 有什么好处?
①缓存用于提高查询的效率.
②MyBatis的缓存是使用SQL标签的ID作为缓存的唯一标的. 执行相同的标签可以使用缓存. 不同的标签不能使用缓存.
③MyBatis 中有两种缓存机制.
(2) MyBatis的缓存有哪些分类? 分别怎么实现?
①一级缓存
a)默认开启. 线程级别的缓存, SqlSession 的缓存
b)在一个 SqlSession 生命周期中有效. SqlSession 关闭,缓存清空.
②二级缓存
a)进程级别的缓存, SqlSessionFactory 的缓存
b)在一个 SqlSessionFactory 生命周期中有效.可以在多个SqlSession 生命中期中共享.
c)默认关闭, 需要使用的时候, 要为某个命名空间开启二级缓存(在 mapper.xml 中配置