当前流行的框架之SpringBoot整合MyBatis

238 阅读3分钟

SpringBoot作为当前Java中最流行生态Spring家族中的一员,已经是当前的趋势。将开发人员从SSM中的配置地狱中解放出来,那么相对于SSM,SpringBoot如何整合进MyBatis呢?一起来看看吧~

环境搭建

SpringBoot整合MyBatis可以采用三种方式:

  1. 注解版
  2. 配置文件版
  3. 注解+配置文件

创建SpringBoot项目与整合JDBC一致,使用Druid数据源。pom.xml加入MyBatis依赖。

image-20200404152014577.png

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.2</version>
        </dependency>

配置数据库连接信息,使用Druid数据源,与其不变。

image-20200404152223659.png

spring:
  datasource:
    username: root
    password: kylin
    # 假如时区报错了,就增加一个时区的配置
    url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource


    #Spring Boot 默认是不注入这些属性值的,需要自己绑定
    #druid 数据源专有配置
    initialSize: 5
    minIdle: 5
    maxActive: 20
    maxWait: 60000
    timeBetweenEvictionRunsMillis: 60000
    minEvictableIdleTimeMillis: 300000
    validationQuery: SELECT 1 FROM DUAL
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    poolPreparedStatements: true

    #配置监控统计拦截的filters,stat:监控统计、log4j:日志记录、wall:防御sql注入
    #如果允许时报错  java.lang.ClassNotFoundException: org.apache.log4j.Priority
    #则导入 log4j 依赖即可,Maven 地址: https://mvnrepository.com/artifact/log4j/log4j
    filters: stat,wall,log4j
    maxPoolPreparedStatementPerConnectionSize: 20
    useGlobalDataSourceStat: true
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500

image-20200404153854304.png 给数据库建表,导入department.sql和employee.sql。SpringBoot连接数据库之后自动建表。首先需要再SpringBoot文件中配置两张建表sql的位置

image-20200404155531606.png

SpringBoot2.0x版本自动运行建表sql,必须配置参数initialization-mode: always

运行项目后,就会自动运行Sql语句。进行建表操作

image-20200404152633313.png

image-20200404155952056.png

image-20200404160007955.png

为了每次运行此项目都自动运行建表语句,我们把他给注释掉

image-20200404160115063.png

创建相对应的JavaBean

image-20200404152809902.png

image-20200404152837076.png

注解版

使用MyBatis注解来进行对数据库的操作

image-20200404153344201.png

image-20200404153533402.png

由于没有Mybatis的配置文件。而数据库表中的d_id,department_name字段与bean中不一致。所以需要配置mybatis自动驼峰命名转换。

image-20200404154050880.png

image-20200404154107205.png

image-20200404154257033.png

image-20200404154315556.png

自定义MyBatis的配置规则,给容器中添加一个ConfigurationCustomizer。相当于mybatis.xml配置文件

image-20200404154600019.png

configuration.setMapUnderscoreToCamelCase(true);开启自动驼峰命名转换

@Configuration
public class MyBatisConfig {
​
    @Bean
    public ConfigurationCustomizer configurationCustomizer(){
        return new ConfigurationCustomizer(){
            @Override
            public void customize(org.apache.ibatis.session.Configuration configuration) {
                //开启自动驼峰命名转换 department_name
                configuration.setMapUnderscoreToCamelCase(true);
            }
        };
    }
}

编写controller

image-20200404153627933.png

测试插入

image-20200404163022843.png

image-20200404163042399.png

由于id是自增主键,我们插入时是没有Id的值。/dept?departmentName=xx所以获取到的department对象中的Id时null,而在数据库中id自增。

image-20200404163632051.png

这时我们可以在Mapper中使用@Options注解@Options(useGeneratedKeys =true,keyProperty = "id")插入完成后,主键会重新封装进来。

image-20200404163938417.png

再次测试插入

image-20200404164048023.png

测试通过Id获取对象

image-20200404164133304.png

通过注解版整合Mybatis成功!!

配置文件版

首先在SpringBoot配置文件中配置mybatis和mapper配置文件所在位置。

image-20200404164438360.png

mybatis配置文件

image-20200404164546726.png

<?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="mapUnderscoreToCamelCase" value="true"/>
    </settings>
    <typeAliases>
        <package name="com.kylin.bean"/>
    </typeAliases>
</configuration>

创建Mapper接口

image-20200404164651796.png

<?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.kylin.mapper.EmployeeMapper">
    <select id="getEmpById" resultType="employee">
        select * from employee where id = #{id}
    </select>
​
    <insert id="insertEmp">
        insert into employee(lastName,email,gender,d_id) values (#{lastName},#{email},#{gender},#{dId})
    </insert>
</mapper>

编写Mapper.xml

image-20200404164801220.png

编写Controller

image-20200404170143760.png

测试插入

image-20200404170247354.png

与上面一样的原因,导致id为null。我们在mapper配置文件中配置属性userGeneratedKeys="true"keyProperty="id"

image-20200404170734140.png

image-20200404170814055.png

image-20200404170833620.png

测试查询

image-20200404170911606.png

通过配置文件版整合Mybatis成功!!

两种方式可以混合使用!!