一.MyBatis简介
1.认识MyBatis
MyBatis是一款优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。MyBatis免除了几乎所有的JDBC
代码以及设置参数和获取结果集的工作。MyBatis可以通过简单的XML或注解来配置和映射原始类型、接口和Java
POJO(Plain Old Java Objects,普通老式Java对象)为数据库中的记录。
2.发展演变
apache开源项目: ibatis, ibatis是internet和abatis的组合,一个基于javach持久层的框架
2010年→apache software foundation >迁移> google code, 同年修改名称为MyBatis
2013年→google code →迁移→Gi tHub .
使用优势
- 简单易学,快速上手,学习成本低
- 数据库交互信息配置化
- 动态SQL处理
3.优缺点
优点
(1)SQL被统一提取出来, 便于统一管理和优化
(2)SQL和代码解耦,将业务逻辑和数据访问逻辑分离
(3)提供映射标签,支持对象和数据库的ORM字段关系映射
(4)提供对象关系映射标签,支持对象关系组件维护
(5)灵活书写动态SQL,支持各种条件的动态SQL生成
缺点
(1)编写SQL语句时工作量大,尤其是字段多、关联表多的时候更是如此
(2)SQL语句依赖数据库,导致数据库移植性差
4.概念
名词 | 解释 |
---|---|
Mapper配置 | 可以使用基于XML的Mapper配置文件来实现,也可以使用基于Java注解的MyBatis注解来实现,甚至可以直接用MyBatis提供的API来实现。 |
Mapper接口 | 自行定义的- -个数据操作接口,类似于通常所说的DAO接口,MyBatis会自动为Mapper接口创建动态代理对象。 |
Executor | MyBatis中所有的Mapper语句的执行都是通过Executor进行, Executor是MyBatis的一个核心接口。 |
SqlSession | 执行持久化操作的对象,类似于JDBC中的Connection对象。可以用SqlSess ion实例直接执行被映射的SQL语句。 |
SqlSessionFactory | 单个数据库映射关系经过编译后的内存镜像。SqlSessionFactory对象的实例可以通过SqlSessionFactoryBuilder对象获得。 |
5.工作流程
1.加载Mapper配置的SQL映射文件或SQL注解
2.通过读取配置文件,创建会话工厂SqlSessionFactory
3.根据会话工厂创建会话对象SqlSess ion,会话对象是一个接口,包含CRUD数据库操作的方法
4.创建Executor接口帮助会话对象执行操作
5.执行器将待处理的SQL信息封装到MappedStatement对象中
6.操作数据库,返回结果,结束流程
图解:
二.Spring使用MyBatis
1.MyBatis简单配置
名词 | 应用 |
---|---|
mybatis.config-location | 配置mybatis-config . xml路径,其中配置MyBatis基础属性 |
mybatis.mapper-locations | 配置Mapper对应的XML文件路径 |
mybatis.type-aliases-package | 配置项目中实体类的包路径 |
mybatis.configuration.map-underscore-to-camel-case | 下划线 与驼峰是否对应 |
spring.datasource.* | 数据源配置 |
2.具体步骤
(1)创建项目:
- MyBatis依赖配置
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.2</version>
</dependency>
- MyBatis的相关配置
#mysql配置
spring.datasource.url=jdbc:mysql://localhost:3306/test1?serverTimezone=UTC\
&useUnicode=true&characterEncoding=utf-8&useSSL=true
spring.datasource.username=root
spring.datasource.password=12345678
#mybatis配置
#公共属性文件的配置地址
#mybatis.config-location=classpath:mybatis/mybatis-config.xml
#映射文件通配符的配置地址
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
#扫描别名包,和注解@Alias联用,暂时没用到
#表的下划线与类的驼峰式对应
mybatis.configuration.map-underscore-to-camel-case=true
(2)公共属性配置
在resource的mybatis目录创建配置文件mybatis-config.xml
(3)表的映射XML文件配置
<mapper namespace="com.example.mybatisxmldemo.mapper.MessageMapper">
<resultMap id="BaseResultMap" type="com.spring.mybatis.xml.model.Message" >
<!–配置主键映射关系,配置主键可以增加查询效率–>
<id column="msg_id" property="msgId" jdbcType="BIGINT" />
<!–配置普通字段的映射关系–>
<result column="msg_text" property="msgText" jdbcType="VARCHAR" />
<result column="msg_summary" property="msgSummary" jdbcType="VARCHAR" />
</resultMap>
<sql id="Base_Column_List" >
msg_id, msg_text, msg_summary
</sql>
<select id="selectAll" resultType="com.example.mybatisxmldemo.model.Message">
SELECT
<include refid="Base_Column_List" />
FROM message
</select>
三.MyBatis架构解析
1.架构分解
API接口层:提供给外部使用的接口API。.
数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。
基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理。
2.应用构建
核心组件:
SqlSess ionFactoryBean和MapperScannerConfigurer
SqlSess ionFactoryBean依赖外部注入的数据源DataSource,包括以下属性:
- configlocation: mybatis配置文件的位置
- mapperLocations:多个mapper映射文件的位置
3.开发要素
dao接口类:定义数据库操作的接口方法,主要是增删改查
mapper映射文件:保存操作数据库表的增删改查的SQL语句,可以用注解替代
pojo类:数据库表对应的java类
四.MyBatis进阶
动态SQL
动态SQL是MyBatis的强大特性之一,MyBatis3采用了功能强大的基于OGNL的表达式完成动态SQL。
动态SQL主要元素:
元素 | 说明 |
---|---|
< if> | 判断语句,用于单条件分支判断。 |
< choose> (< when>、< otherwise> ) | 相当于Java中的switch… .case… .default 语句,用于多条件分支判断。 |
< where>、< trim>、 < set> | 辅助元素,用于处理一些SQL拼装、特殊字符问题。 |
< foreach> | 循环语句,常用于in语句等列举条件中。 |
< bind> | 从OGNL表达式中创建一-个变量, 并将其绑定到上下文,常用于模糊查询的sq1中。 |