MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC
代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的
POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。
架构图
以下是源码包的图:
MyBatis的主要执行流程如下:
下面来在spring boot项目中使用原生的mybatis API操作数据库
- 搭建项目环境
|组件|版本|
|:–|--|
|Spring Boot |2.2.2.RELEASE |
| Mybatis | 3.5.1 |
| mysql-connector-java | 5.1.48 |
| druid | 1.1.21|
| JDK | 1.8.231|
使用注解的方式配置数据源和mybatis核心对象SqlSession的工厂类SqlSessionFactory
/**
* @author zhaodongchao
*/
@org.springframework.context.annotation.Configuration
public class MyBatisConfig {
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource){
TransactionFactory transactionFactory = new JdbcTransactionFactory();
Environment environment = new Environment("dev", transactionFactory, dataSource);
Configuration configuration = new Configuration(environment);
//添加Mapper接口
configuration.addMapper(UserMapper.class);
return new SqlSessionFactoryBuilder().build(configuration);
}
@Bean
public DataSource dataSource(){
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/mybatis?characterEncoding=utf8");
dataSource.setUsername("root");
dataSource.setPassword("123456");
return dataSource ;
}
}
自定义的Mapper接口代码如下:
/**
* @author zhaodongchao
*/
public interface UserMapper {
@Select("select * from t_user where id = #{id}")
SysUser findById(BigInteger id);
}
- 操作数据库
从SqlSessionFactory 中获取一个SqlSession ,然后从SqlSession中获取自己定义的Mapper接口,然后调用接口里的方法。
可以看到,我们虽然定义的Mapper是接口,mybatis会自动创建接口的代理类,来实现具体的业务逻辑。一个大致的流程就如上所述;
实际项目中:
mybatis-spring-boot-starter 封装了mybatis的基础配置逻辑。
druid-spring-boot-starter封装了DataSource的配置工作
可以与spring boot直接集成