MyBatis【MyBatis Blog】,前身是iBatis,是一个ORM框架,半自动
mybatis-config.xml
1 |
|
1 |
|
properties
1 |
|
settings
1 |
|
typeAliases
MyBatis默认定义了一系列系统别名,也可以自定义别名,别名可以在MyBatis上下文中使用。不区分大小写。
1 |
|
typeHandlers
类型处理器,在设置参数或结果集映射时会进行类型转换,主要是Java类型和JDBC类型(org.apache.ibatis.type.JdbcType
)的互相转换,MyBatis默认定义了一系列系统类型处理器,也可以自定义类型处理器。
自定义类型处理器需要实现接口:org.apache.ibatis.type.TypeHandler
,MyBatis默认抽象实现:org.apache.ibatis.type.BaseTypeHandler
1 |
|
枚举类型TypeHandler
EnumOrdinalTypeHandler:基于枚举下标传递参数
EnumTypeHandler:基于枚举名称传递参数
objectFactory
当将结果集映射到POJO时,会基于ObjectFactory去构建。一般而言MyBatis默认定义的ObjectFactory可以满足需求。
自定义则需要实现接口:ObjectFactory
,MyBatis默认抽象实现:DefaultObjectFactory
1 |
|
reflectorFactory
objectWrapperFactory
plugins
environments
数据库事务
数据源
databaseIdProvider
mappers
1 |
|
SqlSessionFactoryBuilder
SqlSessionFactory
一般采用单例模式创建
SqlSession
类似JDBC中connection,非线程安全,随用随取,用完即毁。
1 |
|
Mapper
非线程安全,从SQLSession获取,随用随取,用完即毁。
1 |
|
基于反射生成Mapper实现
Mapper接口
1 |
|
备注:如果直接使用SQLSession方式操作,可以不需要Mapper接口。
需要XML Mapper定义sql statement
XML Mapper
id与Mapper接口的方法名一致
BlogMapper.xml
1 |
|
Annotation Mapper
直接在Mapper接口上定义sql statement,不需要XML Mapper
1 |
|
select
insert
update
delete
参数
1 |
|
1 |
|
简单参数
1 |
|
8种基本类型或包装类型的单个参数,可以不用指定parameterType
。
Map
多个有名参数
JavaBean
过多的有名参赛
@Param
少于6个参数有名参数
存储过程
mode=INT/OUT/INOUT
备注:parameterMap已经不推荐使用了
结果
resultType
resultMap
sql
核心功能
自动映射
autoMappingBehavior:自动映射行为,默认值:PARTIAL
NONE
PARTIAL
FULL
mapUnderscoreToCamelCase:是否开启数据库下划线到Java驼峰命名规则映射,默认值false。比如:created_by《-》createdBy
级联
lazyLoadingEnabled:是否开启延时加载,全局,默认值:false
aggressiveLazyLoading:是否层级延时加载,全局,默认值:true
fetchType:级联获取模式,可取值:eager和lazy,用于<association/>
和<collection/>
,默认值由aggressiveLazyLoading决定
缓存
分页
RowBounds
MyBatis自带,内存分页
1 |
|
动态SQL
Criterion
:一个筛选条件,比如>、<、=、between、in等
Criteria
:一组筛选条件,之间and关系
List<Criteria> oredCriteria
:一组Criteria
,之间or关系