Mybatis

JDBC操作数据库步骤

注册驱动
创建连接
创建statement
执行SQL
关闭连接

几种较为原始的jdbc封装工具

apache DbUtils
springJdbc => jdbcTemplate
————
简陋,功能少,还不足以称为框架。
解决了:数据源、方法封装、结果集映射;
没解决:SQL硬编码,映射不灵活,不支持缓存

ORM框架

object <=> Relation 对象和关系型数据库的映射,操作对象来实现操作数据库。

hibernate

优点:
自动生成SQL
2级缓存
缺点:
1. 不能操作部分字段
2. 无法自定义SQL,SQL优化困难
3. 不支持动态SQL

mybatis(前身ibatis)

SQL和代码分离
动态SQL
重复SQL提取
2级缓存

参考

业务简单:可以选择hibernate或jpa
SQL灵活或复杂:mybatis
性能要求高:jdbc

mybatis详解

4个核心对象:

SqlSessionFactoryBuilder => 方法局部(一旦创建了 SqlSessionFactory,就不再需要它了)
SqlSessionFactory => 单例,应用级别
SqlSession => 每一次request
Mapper => 方法级别

java类型和jdbc类型的映射:TypeHandlerRegistry

自定义TypeHandler:继承BaseTypeHandler抽象类
使用:
insert/update:javaType => jdbcType

select:jdbcType => javaType

eg:JsonTypeHandler原理


主要就是BaseTypeHandler里的两个方法set/get实现javaType和jdbcType的转换。

ObjectFactory

把数据库记录映射成java对象,需要创建java对象,使用ObjectFactory的create方法(反射),默认是DefaultObjectFactory

8个核心标签




则会针对该statement关闭二级缓存。