SpringBoot 集成 Mybatis

SpringBoot 是快速开发 Spring 项目的流行框架,而 MyBatis 是 Spring 中数据库操作的流行方案。本文以 MySQL 为例,总结了 SpringBoot 项目中借助 MyBatis Generator 的生成实体类和Mapper,并使用它们操作数据库的开发要点。

作者:王克锋
出处:https://kefeng.wang/2018/03/15/spring-boot-mybatis/
版权:自由转载-非商用-非衍生-保持署名,转载请标明作者和出处。

1 概述

1.1 两个工具

  • mybatis-generator-maven-plugin: 自动生成数据表的 entity/mapper,用于 Java 代码中操作数据库;
  • mybatis-spring-boot-starter: 简化 MyBatis 整合,快速实现数据库操作。

1.2 准备数据库 mybatis/database.sql

DROP DATABASE IF EXISTS cloudauth;
CREATE DATABASE cloudauth CHARACTER SET utf8;
USE cloudauth;

DROP TABLE IF EXISTS auth_users;
CREATE TABLE auth_users
(
    id       INT AUTO_INCREMENT COMMENT '用户ID',
    name     VARCHAR(16)        COMMENT '用户名称',
    passwd   VARCHAR(16)        COMMENT '登录密码',
    created  TIMESTAMP NOT NULL DEFAULT  CURRENT_TIMESTAMP COMMENT '生成时间',
    updated  TIMESTAMP NOT NULL DEFAULT  CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY(id), UNIQUE KEY(name)
) ENGINE=InnoDB DEFAULT CHARSET=UTF8 COMMENT='AUTH_用户表';

2 Mybatis Generator 生成

2.1 配置 config/application-local.properties

  • 配置 MySQL 的连接参数,同时用于 Mybatis Generator/Starter;
  • 配置生成的类所在的父 package(xxxEntity.java / xxxMapper.java 分别在其下 entity/mapper 子目录中)。
## MySQL
spring.datasource.username=root
spring.datasource.password=root123
spring.datasource.url=jdbc:mysql://192.168.9.24:3306/cloudauth?useUnicode=true&characterEncoding=utf8&useSSL=false
mybatis.generator.base-package=wang.kefeng.cloud.security

2.2 配置 mybatis/generator.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<generatorConfiguration>
    <properties resource="config/application-local.properties"/>

    <context id="MySQLTables" targetRuntime="MyBatis3" defaultModelType="flat">
        <!-- 注意:不要使用自带的 RowBoundsPlugin 插件,它是全量提取后在应用中分页,性能差 -->
        <!-- 【1】仅包含分页功能的插件: https://github.com/wucao/mybatis-generator-limit-plugin -->
        <!-- 【2】仅包含批量插入的插件(未接入成功): https://github.com/wen866595/MyBatis-batch -->
        <!-- 【3】全功能插件(要求 Java8+): https://github.com/itfsw/mybatis-generator-plugin -->
        <!-- 【4】全功能插件(最佳): https://github.com/oceanc/mybatis3-generator-plugins -->
        <plugin type="com.github.oceanc.mybatis3.generator.plugin.BatchInsertPlugin"/>
        <plugin type="com.github.oceanc.mybatis3.generator.plugin.PaginationPlugin"/>

        <commentGenerator>
            <property name="suppressAllComments" value="true"/>
            <property name="suppressDate" value="true"/>
        </commentGenerator>

        <jdbcConnection
                driverClass="com.mysql.jdbc.Driver"
                connectionURL="${spring.datasource.url}"
                userId="${spring.datasource.username}"
                password="${spring.datasource.password}">
        </jdbcConnection>

        <javaModelGenerator
                targetProject="src/main/java"
                targetPackage="${mybatis.generator.base-package}.entity">
            <property name="enableSubPackages" value="false"/>
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>

        <sqlMapGenerator
                targetProject="src/main/resources"
                targetPackage="mapper">
            <property name="enableSubPackages" value="false"/>
        </sqlMapGenerator>

        <javaClientGenerator
                targetProject="src/main/java"
                targetPackage="${mybatis.generator.base-package}.mapper"
                type="XMLMAPPER">
            <property name="enableSubPackages" value="false"/>
        </javaClientGenerator>

        <table tableName="auth_users">
            <generatedKey column="id" sqlStatement="MySql" identity="true"/>
        </table>

    </context>
</generatorConfiguration>

2.3 配置 pom.xml

<properties>
    <mysql-connector-version>5.1.46</mysql-connector-version>
    <mybatis-generator-version>1.3.6</mybatis-generator-version>
</properties>

<build>
    <plugins>
        <plugin><!-- MyBatis(for Generator) -->
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-maven-plugin</artifactId>
            <version>${mybatis-generator-version}</version>
            <configuration>
                <configurationFile>src/main/resources/mybatis/generator.xml</configurationFile>
                <overwrite>true</overwrite>
                <verbose>false</verbose>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>${mysql-connector-version}</version>
                    <scope>runtime</scope>
                </dependency>
                <dependency>
                    <groupId>com.github.oceanc</groupId>
                    <artifactId>mybatis3-generator-plugin</artifactId>
                    <version>0.4.0</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

2.4 生成 mybatis/generate.cmd

需要特别注意,pom.xml 指定的选项 overwrite=true,只对 *.java 有效;
而对 *.xml 无效,会导致 xml 文件内容重复追加而报错,所以必须另加脚本删除 xml 文件。
当然,为避免 overwrite 的警告日志,也可以增加脚本删除 java 文件。

@echo off & cls

cd /d E:\projects\beyond-cloud\beyond-security

del /q src\main\resources\mapper\*.xml
del /q src\main\java\wang\kefeng\cloud\security\entity\*.java
del /q src\main\java\wang\kefeng\cloud\security\mapper\*.java

call mvn.cmd mybatis-generator:generate
pause

2.5 生成结果

  • src/main/java/wang/kefeng/cloud/security/entity/AuthUsers.java
  • src/main/java/wang/kefeng/cloud/security/entity/AuthUsersExample.java
  • src/main/java/wang/kefeng/cloud/security/mapper/AuthUsersMapper.java
  • src/main/resources/mapper/AuthUsersMapper.xml

2.6 更多生成方式

Running MyBatis Generator
Running MyBatis Generator With Command Line
Running MyBatis Generator With Maven
Running MyBatis Generator With Java

也可以不改动 pom.xml,用命令行方式生成:

@echo off & cls

set MYBATIS_JAR=%USERPROFILE%\.m2\repository\org\mybatis\generator\mybatis-generator-core\1.3.6\mybatis-generator-core-1.3.6.jar
set MYBATIS_XML=%USERPROFILE%\Desktop\demo\mybatis.xml
java -jar "%MYBATIS_JAR%" -configfile "%MYBATIS_XML%" -overwrite

3 Mybatis Starter 整合

3.1 配置 pom.xml

注意 mybatis-spring-boot-starter / mybatis-spring / mybatis 三者版本兼容性。相关资料:
- mybatis-spring-boot-starter: http://www.mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/
- mybatis-spring: http://www.mybatis.org/spring/index.html

<properties>
    <mysql-connector-version>5.1.46</mysql-connector-version>
    <mybatis-generator-version>1.3.6</mybatis-generator-version>
</properties>

<dependencies>
    <!-- MyBatis(for runtime) -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>${mysql-connector-version}</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>1.3.2</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>1.3.2</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.4.6</version>
    </dependency>
</dependencies>

3.2 配置 config/application.properties

指定文件 XxxMapper.xml 所在位置。

mybatis.mapper-locations=classpath:mapper/*.xml

3.3 配置 BeyondSecurityApplication.java

指定 bean 包扫描路径,也就是 AuthUsersMapper.java 所在 package。

@MapperScan("wang.kefeng.cloud.security.mapper")

3.4 操作数据库

@Resource
private AuthUsersMapper authUsersMapper;

@PostConstruct
public void init() {
    AuthUsersExample example = new AuthUsersExample();
    List<AuthUsers> users = authUsersMapper.selectByExample(example);
    users.size();
}

猜你喜欢

转载自blog.csdn.net/kefengwang/article/details/81213016