5基于MyBatis实现数据访问

Mybatis整体架构和核心组件

ORM执行流程


外观层:不需要关注复杂的事务实现原理,只是拿来用
映射层:生成sql语句(sql语句转换成statement,参数赋值到sql语句)

MyBatis整体架构

MyBatis核心对象

核心对象的生命周期

MyBatis和Spring整合方式

原生MyBatis过于底层,一般和Spring结合起来使用,类似SrpingJDBC封装JDBC。Mybatis-Spring封装了SqlSessionFactory、SqlSession、mapper底层处理过程。

Mybatis和Spring(MyBatis-Spring框架)

启动

SqlSession

SqlSession Template、SqlSession DaoSupport

Mapper

Mybatis和SpringBoot(Spring Boot MyBatis框架)

进一步封装,完整的Spring自动配置体系,简单的定义注解+Mapper接口+方法+sql语句即可实现。
从重配置的代码实现转换成重代码实现(重:重量级)

代码

引入依赖

1
2
3
4
5
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>

定义mapper接口

1
2
3
4
5
6
7
8
9
10
11
12
@Mapper
public interface MybatisCustomerStaffMapper {

@Select("select * from customer_staff where id=#{starffId}")
public CustomerStaff findCustomerById(Long staffId);

@Insert("insert into customer_staff()(group_id,nickname,account_id)" +
"values(#{groupId},#{nickname},#{accountId})")
@Options(useGeneratedKeys = true,keyProperty = "id")
void createCustomerStaff(CustomerStaff customerStaff);
}

配置扫描mapper

1
2
@MapperScan("org.geekbang.projects.cs.mapper")
public class Application {}

注意Mybatis配置扫描类没有*号(spring配置常用*)

Spring Boot配置体系

约定优于配置的思想贯彻者

配置文件

Profile

问题

相比原生MyBatis ,MyBatis-Spring和Spring Boot MyBatis分别作了哪些封装?
原生MyBatis 提供DataSource、SqlSessionFactory、SqlSession、Mapper等基础组件

  • MyBatis-Spring 封装了重复使用MyBatis基础组件操作数据的过程,通过配置简化编码。

  • Spring Boot MyBatis 基于Spring Boot自动化配置将配置文件简化,从重配置过渡到重编码实现