ResultMap:
<resultMap>用于自定义映射关系, 可以由程序员自主制定
列名和属性名的映射关系. 一旦使用 resultMap, 表示不再
采用自动映射机制.
resultType和resultMap有什么区别?
resultType:表示采用 MyBatis 的Auto-Mapping(自动映射)机制,
即相同的列名和属性名会自动匹配. 当数据库表的列名和类的属
性名不一致时,会导致查不到数据
resultMap:可以自定义映射关系, 由程序员自主制定
列名和属性名的映射关系. 一旦使用 resultMap, 表示不再
采用自动映射机制.
业务装配:(多对一)
mapper 层只做单表查询操作, 在 service 层进行手动装配,
实现关联查询的结果
1 实体类
创建班级类(Clazz)和学生类(Student), 并在 Student 中添
加一个 Clazz 类型的属性, 用于表示学生的班级信息
.2 mapper 层
提供StudentMapper和ClazzMapper, StudentMapper查询所
有学生信息, ClazzMapper 根据编号查询班级信息
3 service 层
调用 mapper 层, 先查询所有学生, 再根据每个学生的班级
编号查询班级信息, 手动进行组装, 称之为业务装配.
MyBatis优点:
1. 与JDBC相比,减少了代码量。
2. MyBatis是最简单的持久化框架,小巧并且简单易学。
3. MyBatis相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL写在XML里,从程序代码中彻底分离,降低耦合度,便于统一管理和优化,并可重用。
4. 提供XML标签,支持编写动态SQL语句。
5. 提供映射标签,支持对象与数据库的ORM字段关系映射
多表关联查询_resultMap_单个对象_N+1方式实现
标签<association>有什么作用
用于关联一个对象
<association>标签中有哪些属性? 分别有什么含义?
property: 指定要关联的属性名
select: 设定要继续引用的查询, namespace+id
column: 查询时需要传递的列
多表关联查询_resultMap_集合对象_N+1方式实现
标签<collection>有什么作用?
用于关联一个集合
<collection>标签中有哪些属性? 分别有什么含义?
property: 指定要关联的属性名
Ø select: 设定要继续引用的查询, namespace+id
Ø column: 查询时需要传递的列
注解:
(1) 什么是注解? 有什么作用?
注解是用于描述代码的代码
1.使用注解一般用于简化配置文件. 但是, 注解有时候也不
是很友好(有时候反而更麻烦), 例如动态 SQL
2.注解和配置文件可以配合使用
MyBatis中常用的注解:
@Test(用于描述方法进行 junit 测试),
@Override(用于描述方法的重写),
@Param(用于描述属性的名称)
MyBatis注解_CRUD:
@Select: 类似于<select>
@Insert: 类似于<insert>
@Update: 类似于<update>
@Delete: 类似于<delete>
MyBatis注解_关联查询:
(1) @Results和@Result注解有什么作用?
当数据库字段名和实体类对应的属性名不一致时,可以使用@Results使其对 应起来@Result是@Results的子标签,Result中的column为数据库字段名,property为实体类属性名,id为是否为主键
MyBatis的运行原理
MyBatis运行过程中涉及到哪些类或接口
1.1.1 Resources(C)
用于加载 MyBatis 核心配置文件
1.1.2 XMLConfigBuilder(C)
用于解析 xml 文件(核心配置文件)
1.1.3 Configuration(C)
用于存放 xml 文件解析后的结果
1.1.4 DefaultSqlSessionFactory(C)
是 SqlSessionFactory(I)的 实 现 类 , 创 建 时 需 要 使 用
Configuration 对象
1.1.5 SqlSession(I)
是 MyBatis 操作的核心
1.1.6 DefaultSqlSession(C)
是 SqlSession 接口的实现类
1.1.7 TransactionFactory(I)
用于生产 Transaction 对象
1.1.8 Transaction(I)
用于表示操作数据库的事务对象
1.1.9 Executor(I)
是 MyBatis 的核心执行器, 类似于 jdbc 中的 Statement, 常
用的实现类是 SimpleExecutor
总结MyBatis的运行原理
当 MyBatis 运行开始时, 先要通过 Resources 加载核心
配置文件, 之后使用 XMLConfigBuilder 对配置文件进行解
析, 将解析结果封装为 Configuration 对象, 接着, 使用
Configuration对象构建一个DefaultSqlSessionFactory对
象, 至此, SqlSession 工厂构建完成.
接下来, 通过工厂对象调用 openSession 方法创建
SqlSession 对 象 . 在 这 个 过 程 中 , 需 要 通 过
TransactionFactory 生成 Transaction 对象, 并且, 还需要
创建核心执行器 Executor 对象, 之后, 通过这些对象来创
建DefaultSqlSession对象, 至此, SqlSession对象创建成
功.
之后, 通过 SqlSession 对象执行相应的操作, 如果执
行成功, 调用 commit 方法提交事务; 如果失败, 调用
rollback 方法事务回滚. 最后, 调用 close 方法关闭
session 资源. 以上, 就是 MyBatis 的运行原理.