Spring Boot集成MyBatis

1、说明

本教程采用Spring Boot 2.2.11.RELEASE自带的hikari高性能连接池,兼具分页查询数据功能。

2、集成步骤

2.1、pom.xml 引入依赖

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.11.RELEASE</version>
    <relativePath />
  </parent>

  <dependencies>
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
      </dependency>

      <dependency>
          <groupId>org.apache.commons</groupId>
          <artifactId>commons-lang3</artifactId>
      </dependency>

      <dependency>
          <groupId>com.github.pagehelper</groupId>
          <artifactId>pagehelper-spring-boot-starter</artifactId>
          <version>1.3.0</version>
      </dependency>
      <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <scope>runtime</scope>
      </dependency>
  </dependencies>

2.2、src/resources/application.yml 配置文件

spring:
  datasource:
    # 数据类型,默认com.zaxxer.hikari.HikariDataSource
    type: com.zaxxer.hikari.HikariDataSource
    # 数据库连接URL
    url: jdbc:mysql://127.0.0.1:3306/hikari?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
    # 驱动,MySQL的驱动包
    driver-class-name: com.mysql.cj.jdbc.Driver
    # 连接数据库用户名
    username: hikari
    # 连接数据库密码
    password: 4dGMZMPHt4k3ESzA
    # 指定Hikari数据源详细配置
    hikari:
      auto-commit: true
      # 测试查询SQL
      connection-test-query: SELECT 1
      # 连接建立超时时间(单位:ms),默认30秒
      connection-timeout: 30000
      # 连接超时释放时间,默认10分钟
      idle-timeout: 60000
      # 连接最大存活时间,默认30分钟
      max-lifetime: 540000
      # 最大连接池数量
      maximum-pool-size: 10
      # 最小闲置连接数
      minimum-idle: 5

# PageHelper分页插件
pagehelper:
  helperDialect: mysql
  reasonable: true
  supportMethodsArguments: true
  params: count=countSql

# MyBatis相关配置
mybatis:
  # 搜索指定包别名
  type-aliases-package: com.cnblogs.javalouvre.domain
  # 配置mapper的扫描,找到所有的mapper.xml映射文件
  mapper-locations: classpath*:mapper/*.xml
  # 加载全局的配置文件
  config-location: classpath:mybatis-config.xml

# 日志
logging:
  level:
    '[org.mybatis]': DEBUG
    '[org.springframework]': DEBUG
    '[com.cnblogs.javalouvre]': DEBUG

2.3、src/resources/mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <settings>
        <setting name="cacheEnabled" value="true" />  <!-- 全局映射器启用缓存 -->
        <setting name="useGeneratedKeys" value="true" />  <!-- 允许 JDBC 支持自动生成主键 -->
        <setting name="defaultExecutorType" value="REUSE" /> <!-- 配置默认的执行器 -->
        <setting name="logImpl" value="SLF4J" /> <!-- 指定 MyBatis 所用日志的具体实现 -->
    </settings>
</configuration>

2.4、src/resources/mapper/EmpMapper.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.cnblogs.javalouvre.mapper.EmpMapper">

    <resultMap type="Emp" id="EmpResult">
        <id     property="id" column="id" />
        <result property="name" column="name" />
        <result property="sex" column="sex" />
        <result property="salary" column="salary" />
        <result property="createTime" column="create_time" />
    </resultMap>

    <select id="listAll" parameterType="Emp" resultMap="EmpResult">
        SELECT `id`, `name`, `sex`, `salary`, `create_time` FROM `emp` ORDER BY `id` ASC
    </select>
</mapper>

2.5、src/main/com/cnblogs/javalouvre/domain/Emp.java

package com.cnblogs.javalouvre.domain;

import com.fasterxml.jackson.annotation.JsonFormat;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

import java.math.BigDecimal;
import java.util.Date;

public class Emp {

    private Integer id;
    private String name;
    private Integer sex;
    private BigDecimal salary;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;

    public Emp() {
    }

    public Emp(String name, Integer sex, BigDecimal salary) {
        this.name = name;
        this.sex = sex;
        this.salary = salary;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getSex() {
        return sex;
    }

    public void setSex(Integer sex) {
        this.sex = sex;
    }

    public BigDecimal getSalary() {
        return salary;
    }

    public void setSalary(BigDecimal salary) {
        this.salary = salary;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
                .append("id", getId())
                .append("name", getName())
                .append("sex", getSex())
                .append("salary", getSalary())
                .append("createTime", getCreateTime())
                .toString();
    }
}

2.6、src/main/com/cnblogs/javalouvre/mapper/EmpMapper.java

package com.cnblogs.javalouvre.mapper;

import com.cnblogs.javalouvre.domain.Emp;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

@Mapper
public interface EmpMapper {

    /**
     * 查询所有数据
     *
     * @return
     */
    List<Emp> listAll();

}

2.7、Service类

2.7.1、src/main/com/cnblogs/javalouvre/service/IEmpService.java
package com.cnblogs.javalouvre.service;

import com.cnblogs.javalouvre.domain.Emp;

import java.util.List;

public interface IEmpService {

    List<Emp> listAll();


}
2.7.2、src/main/com/cnblogs/javalouvre/service/impl/EmpServiceImpl.java
package com.cnblogs.javalouvre.service.impl;

import com.cnblogs.javalouvre.domain.Emp;
import com.cnblogs.javalouvre.mapper.EmpMapper;
import com.cnblogs.javalouvre.service.IEmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service("empService")
public class EmpServiceImpl implements IEmpService {

    @Override
    public List<Emp> listAll() {
        return empMapper.listAll();
    }

    @Autowired
    private EmpMapper empMapper;
}

2.8、src/main/com/cnblogs/javalouvre/web/IndexController.java

package com.cnblogs.javalouvre.web;

import com.cnblogs.javalouvre.domain.Emp;
import com.cnblogs.javalouvre.service.IEmpService;
import com.github.pagehelper.PageHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class IndexController {

    @GetMapping(path = "index", produces = MediaType.APPLICATION_JSON_VALUE)
    public List<Emp> list(int pageNum, int pageSize) {
        PageHelper.startPage(pageNum, pageSize);

        return empService.listAll();
    }

    @Autowired
    private IEmpService empService;
}

2.9、src/main/com/cnblogs/javalouvre/App.java

package com.cnblogs.javalouvre;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class App {

    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }

}

3、目录结构

.
├── pom.xml
└── src
    ├── main
    │   ├── java
    │   │   └── com
    │   │       └── cnblogs
    │   │           └── javalouvre
    │   │               ├── App.java
    │   │               ├── domain
    │   │               │   └── Emp.java
    │   │               ├── mapper
    │   │               │   └── EmpMapper.java
    │   │               ├── service
    │   │               │   ├── IEmpService.java
    │   │               │   └── impl
    │   │               │       └── EmpServiceImpl.java
    │   │               └── web
    │   │                   └── IndexController.java
    │   └── resources
    │       ├── application.yml
    │       ├── mapper
    │       │   └── EmpMapper.xml
    │       └── mybatis-config.xml
    └── test
        └── java
posted @ 2020-12-22 23:07  Bruce.Chang.Lee  阅读(78)  评论(0)    收藏  举报