美文网首页
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