1.什么是MyBatis?
MyBatis是一个支持普通SQL查询、存储过程以及高级映射的持久层框架,它消除了几乎所有的JDBC代码和参数的手动设置以及对结果集的检索,使用简单的XML或注解进行配置和原始映射,将接口和Java的POJO映射成数据库中的记录,使得Java开发人员可以使用面向对象的编程思想来操作数据库。
2.MyBatis的工作原理?
(1)读取MyBatis配置文件mybatis-config.xml。
(2)由MyBatis配置文件加载映射文件Mapper.xml。
(3)通过MyBatis的环境等配置信息构建会话工厂SqlSessionFactory。
(4)由会话工厂创建SqlSession对象。
(5)MyBatis底层定义了一个Executor接口来操作数据库,它会根据SqlSession传递的参数动态的生成需要执行的SQL语句。
(6)在Executor接口的执行方法中,包含一个MappedStatement类型的参数,该参数是对映射信息的封装。
(7)在执行方法时,MappedStatement对象会对用户执行SQL语句的输入参数进行定义封装。
(8)在数据库中执行完SQL语句后,MappedStatement对象会对SQL执行输出的结果进行定义封装。
3.<mappers>元素引入映射文件的4种方式。
(1)使用类路径引入。
(2)使用本地文件路径引入。
(3)使用接口类引入。
(4)使用包名引入。
4.MyBatis映射文件中的常用元素及其作用。
<mapper>:映射文件的根元素,该元素只有一个namespace属性(命名空间),namespace属性作用如下。
(1)用于区分不同的mapper,全局唯一。
(2)绑定DAO接口,即面向接口编程。当namespace绑定某一接口之后,可以不用写该接口的实现类,MyBatis会通过接口的全限定名查找到对应的mapper配置来执行SQL语句,因此namespace的命名必须跟接口同名。
<cache>: 配置给定命名空间的缓存。
<cache-ref>:从其他命名空间引用缓存配置。
<resultMap>:描述数据库结果集和对象的对应关系。
<sql>:可以重用的SQL块,也可以被其他语句使用。
<insert>:用于映射插入语句。
<delete>:用于映射删除语句。
<update>:用于映射更新语句。
<select>:用于映射查询语句。
5.MyBatis动态SQL中的常用元素及其作用。
<if>:判断语句,用于单条件判断。
<choose>(<when>、<otherwise>):相当于Java中的switch...case...default语句,用于多条件判断。
<where>:简化SQL语句中where的条件判断。
<trim>:可以灵活地去除多余的关键字。
<set>:用于SQL语句的动态更新。
<foreach>:循环语句,常用于in语句等列举条件中。
6.在使用<foreach>时,collection属性需要注意的几点。
(1)如果传入的是单参数且参数类型是一个数组或者List的时候,collection属性值分别为array和list(或collection);
(2)如果传入的参数是多个的时候,就需要把它们封装成一个Map了,当然单参数也可以封装成Map集合,这时候collection属性值就为Map的键。
(3)如果传入的参数是POJO包装类的时候,collection属性值就为该包装类中需要进行遍历的数组或集合的属性名。
7.<collection>子元素的常用属性及其作用。
property:指定映射到的实体类对象属性,与表字段一一对应;
column:指定表中对应的字段;
ofType:它用于指定实体对象中集合类属性所包含的元素类型;
select:指定引入嵌套查询的子SQL语句,该属性用于关联映射中的嵌套查询;
fetchType:指定在关联查询时是否启用延迟加载。fetchType属性有lazy和eager两个属性值,默认值为lazy(即默认关联映射延迟加载)。
8.MyBatis关联查询映射的两种处理方式。
MyBatis在映射文件中加载关联关系对象主要通过嵌套查询和嵌套结果两种方式。
嵌套查询是指通过执行另外一条SQL映射语句来返回预期的复杂类型;
嵌套结果是使用嵌套结果映射来处理重复的联合结果的子集。
9.MyBatis的常用注解及其作用。
@Select:用于映射查询语句,其作用等同于xml配置文件中的<select>元素。
@Insert:用于映射插入语句,其作用等同于xml配置文件中的<insert>元素。
@Update:用于映射更新语句,其作用等同于xml配置文件中的<update>元素。
@Delete:用于映射删除语句,其作用等同于xml配置文件中的<delete>元素。@Param:用于指定SQL语句中的参数,通常用于SQL语句中参数比较多的情况。
@One:用于实现数据表的一对一关联查询,其作用等同于xml配置文件中的<assocation>元素。
@Many:用于实现数据表的一对多关联查询,@Many注解的作用等同于xml配置文件中的<collection>元素。
@Results:用于映射查询结果。
@Result:用于完成实体类中属性和数据表中字段的映射。
10.@Result注解中的常用属性及其作用。
property:用于指定关联属性。
column:用于指定关联的数据库表中的字段。
one:用于一对一配置的关联查询。
many:用于一对多配置的关联查询。