Spring 集成MyBatis和Spring Boot集成MyBatis

一、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);
    }

}
原创文章 161 获赞 19 访问量 6万+

猜你喜欢

转载自blog.csdn.net/hefrankeleyn/article/details/90257231