SpringBoot整合mybatis+mybatis-gene
2019-12-11 本文已影响0人
东西汉
近来着手将本年Java项目开发所涉及到的知识点做一个梳理,之前是在他人搭建框架基础上做的功能开发,其实很多不经意间的配置都是有讲究的,不亲自爬坑总归雾里看花
首先使用IDEA自带的SpringBoot构建web项目,勾选mysql+mybaits插件,此时直接启动就会提示数据库不存在报错,就得在application.propertitis或者application.yml配置文件中配置数据库连接
spring:
datasource:
name: suzhou_loupan
url: jdbc:mysql://localhost:3306/suzhou_loupan
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver #mysql-connector-java高于6.0版本的统一加上cj否则报错#
type: com.alibaba.druid.pool.DruidDataSource #这里使用druid数据库管理池#
mybatis:
mapper-locations: classpath:mappers/*.xml #mybatis的xml文件目录#
#下面日志配置控制台打印SQL执行语句#
logging:
level:
com.myJavaShop.dao: debug #前面的路径是项目dao目录#
但是实际项目开发时若是实体类都是手写的未免太过费事,引入mybatis-generator自动生成实体类,但是若是仅仅引入mybatis-generator生成的xml文件会生成诸多不必要的单表增删改查,而且生成的实体类注释也是反人类,网上更多是建议新建项目重写mybatis-generator的注释生成方法并打包jar包作为扩展类引入,其实只要再引入tk.mybatis,隐性自带单表增删改查,代码清爽而且自带修改注释。
pom.xml配置文件引入tk.mybatis和mybatis-generator依赖,并整合启动指令到idea中Maven的plugins里面
<dependencies>
<!--利用mybatis-generator自动生成代码-->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
<!-- https://mvnrepository.com/artifact/tk.mybatis/mapper-spring-boot-starter -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.1.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/tk.mybatis/mapper -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>4.1.5</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-generator</artifactId>
<version>1.1.5</version>
</dependency>
</dependencies>
<!--下面按需添加IDEA的maven的plugins快捷启动方式 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.18</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>4.1.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/tk.mybatis/mapper-generator -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-generator</artifactId>
<version>1.1.5</version>
</dependency>
</dependencies>
<executions>
<execution>
<id>mybatis generator</id>
<phase>package</phase>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<!--为避免反复生成-->
<configuration>
<!--允许移动生成的文件-->
<verbose>true</verbose>
<!--允许自动覆盖-->
<overwrite>true</overwrite>
<configurationFile>
src/main/resources/mybatis-generator.xml
</configurationFile>
</configuration>
</plugin>
</plugins>
</build>
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>
<!--导入属性配置-->
<!-- context 是逆向工程的主要配置信息 -->
<!-- id:起个名字 -->
<!-- targetRuntime:设置生成的文件适用于那个 mybatis 版本 -->
<context id="DB2Tables" targetRuntime="MyBatis3Simple" defaultModelType="flat">
<!-- 生成的Java文件的编码 -->
<property name="javaFileEncoding" value="UTF-8"/>
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<!-- 格式化java代码 -->
<property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/>
<!-- 格式化XML代码 -->
<property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/>
<!-- 整合lombock,参考方式https://github.com/GuoGuiRong/mybatis-generator-lombok-plugin 暂时不整合-->
<!-- <plugin type="org.mybatis.generator.plugins.LombokPlugin" >-->
<!-- <property name="hasLombok" value="true"/>-->
<!-- </plugin>-->
<!-- 配置 tk.mybatis 插件 这边value指向mybatis通用接口 -->
<plugin type="tk.mybatis.mapper.generator.MapperPlugin">
<property name="mappers" value="tk.mybatis.mapper.common.Mapper"/>
</plugin>
<!--optional,旨在创建class时,对注释进行控制-->
<commentGenerator>
<property name="suppressDate" value="true"/>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="false"/>
<!-- 是否带上注释-->
<property name="addRemarkComments" value="true"/>
</commentGenerator>
<!--jdbc的数据库连接-->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/suzhou_loupan?useInformationSchema=true&useUnicode=true&characterEncoding=UTF8&serverTimezone=UTC"
userId="root"
password="123456">
</jdbcConnection>
<!--非必须,类型处理器,在数据库类型和java类型之间的转换控制-->
<javaTypeResolver>
<!-- 默认情况下数据库中的 decimal,bigInt 在 Java 对应是 sql 下的 BigDecimal 类 -->
<!-- 不是 double 和 long 类型 -->
<!-- 使用常用的基本类型代替 sql 包下的引用类型 -->
<property name="forceBigDecimals" value="false"/>
<!--时间戳生成字段类型避免是Java.util.Date-->
<property name="useJSR310Types" value="true"/>
</javaTypeResolver>
<!-- targetPackage:生成的实体类所在的包 -->
<!-- targetProject:生成的实体类所在的硬盘位置 -->
<javaModelGenerator targetPackage="com.myJavaShop.domain.entity"
targetProject="src/main/java">
<!-- 是否允许子包 -->
<property name="enableSubPackages" value="false"/>
<!-- 是否对modal添加构造函数 -->
<property name="constructorBased" value="true"/>
<!-- 是否清理从数据库中查询出的字符串左右两边的空白字符 -->
<property name="trimStrings" value="true"/>
<!-- 建立modal对象是否不可改变 即生成的modal对象不会有setter方法,只有构造方法 -->
<property name="immutable" value="false"/>
</javaModelGenerator>
<!-- targetPackage 和 targetProject:生成的 mapper 文件的包和位置 -->
<sqlMapGenerator targetPackage="mappers"
targetProject="src/main/resources">
<!-- 针对数据库的一个配置,是否把 schema 作为字包名 -->
<property name="enableSubPackages" value="false"/>
</sqlMapGenerator>
<!--生成dao类存放位置-->
<!-- targetPackage 和 targetProject:生成的 interface 文件的包和位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.myJavaShop.dao" targetProject="src/main/java">
<!-- 针对 oracle 数据库的一个配置,是否把 schema 作为字包名 -->
<property name="enableSubPackages" value="false"/>
</javaClientGenerator>
<!--生成表及类名-->
<table tableName="employee_info"></table>
</context>
</generatorConfiguration>
tk.mybatis引入SpringBoot中还需要在启动类上增加tk的@MapperScan("com.myJavaShop.dao")
package com.myJavaShop;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import tk.mybatis.spring.annotation.MapperScan;
@MapperScan("com.myJavaShop.dao")
@SpringBootApplication
public class ShopApplication {
public static void main(String[] args) {
SpringApplication.run(ShopApplication.class, args);
}
}
如此这般配置完成后,便可以在IDEA中点击生成代码了

下面是Dao层,实体类以及mybatis的xml生成展示,其中可以看到Dao层因为在mybatis-generator.xml中用<plugin>标签引入了tk.mybatis的接口,此处生成的Dao层会自动继承tk的Mapper,于是便可以不添一行代码使用所有单表操作

下面是实体类生成展示,可以看到注释已经变成常规中文注释了

下面是mybatis的xml生成展示,很清爽,而且<table>标签不再需要配置一堆如enableDeleteByPrimaryKey="false"的属性了,因为引入tk.mybatis后就没必要再生成那些单表的增删改查了

推荐相关链接
1.Mybatis Generator官网文档
2.Mybatis Generator配置详解
3.tk.Mybatis使用说明