每日总结
一、ResultMap
1、<resultMap>用于自定义映射关系, 可以由程序员自主制定列名和属性名的映射关系. 一旦使用 resultMap, 表示不再采用自动映射机制.
a、 <association>标签:用于关联一个对象,其中包含属性:
property:指定要关联的属性名
select:指定要继续引用的查询,namespace+id
column:查询时需要传递的列

b、<collection>标签:用于关联一个集合,其中包含属性:
property:指定要关联的属性名
select:设定要继续引用的查询,namespace+id
culumn:查询时需要传递的列

2、resultType和resultMap的区别:
如果查询时使用 resultType 属性, 表示采用 MyBatis 的Auto-Mapping(自动映射)机制, 即相同的列名和属性名会自动匹配.
二、多表查询
MyBaits实现多表关联查询有两种情况
1、一对多 2、多对一

具体使用的实现方式

三、业务装填
业务装填就是将DML与绑定分开,mapper层只做单表查询操作,在service层进行手动装配,实现关联查询的结果

四、MyBatis框架优点与运行原理
优点:(MyBatis做了原来Java中JDBC技术做的事情,属于半成品)
1.mybatis是一种持久层框架,也属于ORM映射。前身是ibatis。
2.相比于hibernatehibernate为全自动化,配置文件书写之后不需要书写sql语句,但是欠缺灵活,很多时候需要优化;
3.mybatis为半自动化,需要自己书写sql语句,需要自己定义映射。增加了程序员的一些操作,但是带来了设计上的灵活,并且也是支持hibernate的一些特性,如延迟加载,缓存和映射等;对数据库的兼容性比hibernate差。移植性不好,但是可编写灵活和高性能的sql语句。
运行原理
MyBatis运行过程中涉及的类和和接口
1、Resourcers(C):用于加载MyBatis核心配置文件
2、XMLConfigBuider(C):用于解析xml文件(核心配置文件)
3、Configuration(C):用于存放xml文件解析后的结果
4、DefaultSqlSessionFactory(C):是SqlSessionFactory(I)的实现类,创建时需要使用Configuration对象
5、SqlSession(I):是MyBatis的核心
6、DefaultSqlSession(C):是SqlSession接口的实现类
7、TransactionFactory(I):用于生产Transction对象
8、Transaction(I):用于表示操作数据库的事务对象
9、Executor(I):是MyBatis的核心执行器,类似于jdbc中的Statement,常用的实现类是SimpleExecutor
SqlSession对象创建经历的过程
1.当MyBaits运行开始时,先通过Resources加载核心配置文件
2.之后使用XMLConfigBuilder对配置文件进行解析,将解析结果封装为Configuration对象
3.使用Configuration对象构建一个DefaultSqlSessionFactory对象
4.调用工厂对象中的openSession方法创建SqlSession对象
运行原理
1、当MyBatis开始运行时,首先要通过Resources加载核心配置文件,然后使用XMLCongigBuilder对配置文件进行解析,将解析结果封装成对象,接着,使用Configurtion对象构建一个DefaultSqlSessionFactory对象,至此,SqlSession工厂构建完成
2、工厂构建完成后,通过工厂对象调用openSession方法创建SqlSession对象,在这个过程中,需要通过TransactionFactory生成对象,并且还需要创建核心执行器Executor对象,然后通过这些对象来创建DefaultSession对象,至此,SqlSession对象创建成功
3、SqlSession对象创建成功后,调用对象执行相应的操作,如果执行成功,执行commit方法提交事务,如果执行失败,调用rollback回滚事务,最后通过close方法关闭Session资源
