Skip to content
章节导航

SpringBoot 集成 MyBatis

添加依赖

pom.xml 添加版本

xml
<properties>
    
        ......
    
        <com.alibaba.druid>1.2.15</com.alibaba.druid>
        <mybatis.spring.boot>2.3.0</mybatis.spring.boot> 
    
    </properties>

pom.xml 添加依赖

xml
<dependencies>

       ......

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>${com.alibaba.druid}</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>${mybatis.spring.boot}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

</dependencies>

添加配置文件

  • url: 数据库地址
  • username: 数据库账号
  • password: 数据库密码
spring:

  ......

  datasource:
    name: mysql
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
    url: jdbc:mysql://127.0.0.1:3306/fly-next?useUnicode=true&characterEncoding=UTF8&createDatabaseIfNotExist=true&useUnicode=true&useSSL=false&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&allowMultiQueries=true
    username: root
    password: root
    druid:
      initial-size: 5
      min-idle: 5
      max-active: 20
      max-wait: 60000
      test-while-idle: true
      time-between-eviction-runs-millis: 60000
      min-evictable-idle-time-millis: 30000
      validation-query: SELECT 1 FROM DUAL
      test-on-borrow: false
      test-on-return: false
      pool-prepared-statements: false
      filters: stat,wall,slf4j


# mybatis
mybatis:
  type-aliases-package: com.github.itdachen.**.vo
  mapperLocations: classpath*:mapper/**/*.xml
  configuration:
    map-underscore-to-camel-case: true
    call-setters-on-nulls: true
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

完整的 yml 配置文件

server:
  port: 8080

fly:
  version: 1.0

spring:
  application:
    name: spring-boot-demo
  thymeleaf:
    mode: HTML5
    cache: false
    encoding: utf-8

  datasource:
    name: mysql
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
    url: jdbc:mysql://127.0.0.1:3306/fly-next?useUnicode=true&characterEncoding=UTF8&createDatabaseIfNotExist=true&useUnicode=true&useSSL=false&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&allowMultiQueries=true
    username: root
    password: root
    druid:
      # 初始化时建立物理连接的个数
      initial-size: 5
      # 连接池的最小空闲数量
      min-idle: 5
      # 连接池最大连接数量
      max-active: 20
      # 获取连接时最大等待时间,单位毫秒
      max-wait: 60000
      # 申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
      test-while-idle: true
      # 既作为检测的间隔时间又作为testWhileIdel执行的依据
      time-between-eviction-runs-millis: 60000
      # 销毁线程时检测当前连接的最后活动时间和当前时间差大于该值时,关闭当前连接(配置连接在池中的最小生存时间)
      min-evictable-idle-time-millis: 30000
      # 用来检测数据库连接是否有效的sql 必须是一个查询语句(oracle中为 select 1 from dual)
      validation-query: SELECT 1 FROM DUAL
      # 申请连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
      test-on-borrow: false
      # 归还连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
      test-on-return: false
      # 是否缓存preparedStatement, 也就是PSCache,PSCache对支持游标的数据库性能提升巨大,比如说oracle,在mysql下建议关闭。
      pool-prepared-statements: false
      # 置监控统计拦截的filters,去掉后监控界面sql无法统计,stat: 监控统计、Slf4j:日志记录、waLL: 防御sqL注入
      filters: stat,wall,slf4j


# mybatis
mybatis:
  type-aliases-package: com.github.itdachen.**.vo
  mapperLocations: classpath*:mapper/**/*.xml
  configuration:
    map-underscore-to-camel-case: true
    call-setters-on-nulls: true
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

启动类添加 MyBatis 扫描路径

@MapperScan(basePackages = "com.github.itdachen.**.mapper")

测试

创建数据库 Sql

CREATE TABLE `fly_student_info`  (
  `id` varchar(36) CHARACTER SET utf8mb4  NOT NULL COMMENT '主键唯一标识',
  `name` varchar(50) CHARACTER SET utf8mb4  NULL DEFAULT NULL COMMENT '姓名',
  `school_id` varchar(36) CHARACTER SET utf8mb4  NULL DEFAULT NULL COMMENT '所属学校',
  `academy_id` varchar(36) CHARACTER SET utf8mb4  NULL DEFAULT NULL COMMENT '所属学院',
  `birthday` varchar(50) CHARACTER SET utf8mb4  NULL DEFAULT NULL COMMENT '出生日期',
  `stu_no` varchar(50) CHARACTER SET utf8mb4  NULL DEFAULT NULL COMMENT '学号',
  `sex` varchar(1) CHARACTER SET utf8mb4  NULL DEFAULT NULL COMMENT '性别',
  `remarks` varchar(255) CHARACTER SET utf8mb4  NULL DEFAULT NULL COMMENT '描述',
  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
  `create_user_id` varchar(36) CHARACTER SET utf8mb4  NULL DEFAULT NULL COMMENT '创建人ID',
  `create_user` varchar(50) CHARACTER SET utf8mb4  NULL DEFAULT NULL COMMENT '创建人',
  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
  `update_user_id` varchar(36) CHARACTER SET utf8mb4  NULL DEFAULT NULL COMMENT '更新人ID',
  `update_user` varchar(50) CHARACTER SET utf8mb4  NULL DEFAULT NULL COMMENT '更新人',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4  ROW_FORMAT = Dynamic;

添加 mapper 接口

创建 mapper 包, 创建 IStudentInfoMapper 接口

public interface IStudentInfoMapper {

    /***
     * 测试查询学生数量
     *
     * @author 王大宸
     * @date 2023/8/12 18:23
     * @return java.lang.Integer
     */
    Integer findCount();

}

添加 mapper.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.github.itdachen.mapper.IStudentInfoMapper">
    
    <select id="findCount" resultType="java.lang.Integer">
        SELECT COUNT(id)
        FROM fly_student_info
    </select>
    
</mapper>

注意: mapper.xml 文件中的 namespace 属性, 要与 IStudentInfoMapper 类的路径对应

添加测试类

在 test 文件夹下创建 com.github.itdachen 包, 并创建 SpringBootDemoBootstrapTests

@SpringBootTest
public class SpringBootDemoBootstrapTests {

    @Test
    public void content() {
    }

    @Autowired
    private IStudentInfoMapper studentInfoMapper;

    @Test
    public void contentStudentInfo() {
        Integer count = studentInfoMapper.findCount();
        System.out.println("当前学生数量为: " + count);
    }

}

执行 contentStudentInfo() 方法, 控制台打印: 当前学生数量为: 0

本章节项目目录