美文网首页
SpringBoot整合mybatis+mybatis-gene

SpringBoot整合mybatis+mybatis-gene

作者: 东西汉 | 来源:发表于2019-12-11 11:22 被阅读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&amp;useUnicode=true&amp;characterEncoding=UTF8&amp;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中点击生成代码了

IDEA点击自动生成mybatis
下面是Dao层,实体类以及mybatis的xml生成展示,其中可以看到Dao层因为在mybatis-generator.xml中用<plugin>标签引入了tk.mybatis的接口,此处生成的Dao层会自动继承tk的Mapper,于是便可以不添一行代码使用所有单表操作
Dao层
下面是实体类生成展示,可以看到注释已经变成常规中文注释了
实体类
下面是mybatis的xml生成展示,很清爽,而且<table>标签不再需要配置一堆如enableDeleteByPrimaryKey="false"的属性了,因为引入tk.mybatis后就没必要再生成那些单表的增删改查了
xml
推荐相关链接
1.Mybatis Generator官网文档
2.Mybatis Generator配置详解
3.tk.Mybatis使用说明

相关文章

网友评论

      本文标题:SpringBoot整合mybatis+mybatis-gene

      本文链接:https://www.haomeiwen.com/subject/jrqogctx.html