Spring 集成MyBatis和Spring Boot集成MyBatis

本文详细介绍了MyBatis的基本概念与作用域,包括SqlSessionFactoryBuilder、SqlSessionFactory和SqlSession的使用。同时,深入讲解了MyBatis与SpringBoot的集成过程,包括依赖引入、数据源配置、映射器定义及测试方法。适合初学者快速掌握MyBatis与SpringBoot的结合使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值