一、MyBatis介绍
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>x.x.x</version>
</dependency>
1.1 作用域(Scope)和声明周期
1) SqlSessionFactoryBuilder
用于创建 SqlSessionFactory。一旦创建了SqlSessionFactory 就不可以不再需要SqlSessionFactoryBuilder。
2) SqlSessionFactory
一个核心: SqlSessionFactory
每个Mybatis应用都是以 SqlSessionFactory实例为核心的。SqlSessionFactory是通过SqlSessionFactoryBuilder获取的。
SqlSessionFactory一旦被创建,就应该在应用程序中一直存在,最佳的作用域是应用作用域。最简单的方式是使用单例或者静态单例模式。
3)SqlSession
每个线程都应该有自己的SqlSession实例,SqlSession是线程不安全的,因此,不应该被共享。每次收到一个HTTP请求,都应该打开一个SqlSession,返回一个响应,就关闭它,应该把这个关闭操作放到finally块中,保证每次都执行关闭。
通过SqlSessionFactory 获取一个SqlSession。
4)映射器实例
映射器是一些在本地创建的、绑定了映射语句的接口。映射器接口实例是从SqlSession中获得的。映射器实例应该在调用它的方法中被请求,用过之后即被抛弃。因此映射器实例最佳的作用域是方法作用域
1.2 配置
二、MyBatis和Spring Boot集成
2.1 引入依赖,并在在`application.yml`中配置数据源连接信息
在application.yml 中配置数据源信息:
spring:
profiles: production
datasource:
url: jdbc:mysql://localhost:3306/db_demo?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=TRUE
username: auser
password: 123456
在pom文件引入依赖
<!-- MyBatis依赖: -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
MyBatis Spring Boot Starter将:
1)自动声明了一个 DataSource;
2)将DataSource作为输入,传到SqlSessionBeanFacotry 中,来创建SqlSessionFactory;
3)从SqlSessionFactory中创建并注册SqlSessionTemplate;
4)自动扫描映射,将映射连接到SqlSessionTemplate,并注册到Spring上下文中,以便将注入到你的bean中;
2.2 映射
MyBatis-Spring-Boot-Starter 默认会扫描 @Mapper 注解:
@Mapper
public interface QHUserDao {
@Select({"select u_id,login_username,login_password,nickname,user_des,create_date from qh_users"})
@Results(value = {@Result(column = "u_id", property = "uId", jdbcType = JdbcType.VARCHAR),
@Result(column = "login_username", property = "loginUserName", jdbcType = JdbcType.VARCHAR),
@Result(column = "login_password", property = "loginPassWorld", jdbcType = JdbcType.VARCHAR),
@Result(column = "nickname", property = "nickname", jdbcType = JdbcType.VARCHAR),
@Result(column = "user_des", property = "userDes", jdbcType = JdbcType.VARCHAR),
@Result(column = "create_date", property = "createDate", jdbcType = JdbcType.DATE)})
List<QHUser> findAllQHUser();
}
2.3 测试使用
@SpringBootTest
public class QHUserDaoTest {
@Autowired(required = false)
private QHUserDao qhUserDao;
@Test
public void findAllQHUsers(){
System.out.println(qhUserDao);
Assert.assertNotNull(qhUserDao);
List<QHUser> allQHUser = qhUserDao.findAllQHUser();
System.out.println(allQHUser);
}
}