zoukankan      html  css  js  c++  java
  • SpringBoot的整合(三、整合mybatis补:自动生成工具的使用mysql5和mysql8版本的两种版本和两种生成方式)

    本篇文章是基于上篇文章的代码基础上进行的添加,具体代码可以参考上篇文章:SpringBoot的整合(三、整合mybatis)

    注意:本篇文章连接的数据库为mysql8.0.16版本的,跟低版本的稍微有些不同。

    使用mybatis进行开发的时候,model类、mapper.xml、mapper接口等都自己写十分浪费时间,这里介绍两种自动生成代码文件的工具:

    一、使用mybatis的generator工具。

    (1)首先pom.xml文件中添加

    <!--mysql-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>8.0.16</scope>
    </dependency>
    <!--mybatis自动生成工具-->
    <dependency>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-core</artifactId>
        <version>1.3.5</version>
    </dependency>
    
    <dependency>
        <groupId>tk.mybatis</groupId>
        <artifactId>mapper</artifactId>
        <version>4.0.0</version>
    </dependency>
    
    
    <!--mybatis自动生成工具-->
    <plugin>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-maven-plugin</artifactId>
        <version>1.3.5</version>
        <configuration>
            <verbose>true</verbose>
            <overwrite>true</overwrite>
            <configurationFile>src/main/resources/mybatis-generator.xml</configurationFile>
        </configuration>
        <dependencies>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.16</version>
            </dependency>
            <dependency>
                <groupId>tk.mybatis</groupId>
                <artifactId>mapper</artifactId>
                <version>4.0.0</version>
            </dependency>
        </dependencies>
    </plugin>

    pom.xml(全)

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.1.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
    
        <groupId>com.flyinghome</groupId>
        <artifactId>tm</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>jar</packaging>
    
        <name>tm</name>
        <description>Demo project for Spring Boot</description>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <!--mybatis-->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>1.3.2</version>
            </dependency>
    
            <!--mysql-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>8.0.16</scope>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
                <exclusions>
                    <exclusion>
                        <groupId>org.junit.jupiter</groupId>
                        <artifactId>junit-jupiter-engine</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
    
            <!-- alibaba的druid数据库连接池 -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>1.1.9</version>
            </dependency>
    
            <!--lombok:引用了之后,实体类就不需要写getter、setter、toString方法了-->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.6</version>
            </dependency>
            <!--pagehelper分页-->
            <dependency>
                <groupId>com.github.pagehelper</groupId>
                <artifactId>pagehelper-spring-boot-starter</artifactId>
                <version>1.2.5</version>
            </dependency>
    
            <!--mybatis自动生成工具-->
            <dependency>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-core</artifactId>
                <version>1.3.5</version>
            </dependency>
    
            <dependency>
                <groupId>tk.mybatis</groupId>
                <artifactId>mapper</artifactId>
                <version>4.0.0</version>
            </dependency>
    
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
                <!--mybatis自动生成工具-->
                <plugin>
                    <groupId>org.mybatis.generator</groupId>
                    <artifactId>mybatis-generator-maven-plugin</artifactId>
                    <version>1.3.5</version>
                    <configuration>
                        <verbose>true</verbose>
                        <overwrite>true</overwrite>
                        <configurationFile>src/main/resources/mybatis-generator.xml</configurationFile>
                    </configuration>
                    <dependencies>
                        <dependency>
                            <groupId>mysql</groupId>
                            <artifactId>mysql-connector-java</artifactId>
                            <version>8.0.16</version>
                        </dependency>
                        <dependency>
                            <groupId>tk.mybatis</groupId>
                            <artifactId>mapper</artifactId>
                            <version>4.0.0</version>
                        </dependency>
                    </dependencies>
                </plugin>
            </plugins>
        </build>
    
    </project>
    pom.xml

    (2)创建mybatis-generator.xml文件

    路径在resources文件夹下,位置不固定,如果修改了,需要对应修改pom.xml文件中的<configurationFile>标签内的地址。

    里面需要修改的地方:

    1. 数据连接的数据库名、数据库地址、账号、密码。

    2. 生成model、xml、mapper接口、table标签名称等信息。

    注意:数据库连接的driverClass,高版本为com.mysql.cj.jdbc.Driver。低版本为com.mysql.jdbc.Driver。

    高版本:

    <?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="DB2Tables" defaultModelType="flat" targetRuntime="MyBatis3">
        <!-- 生成的Java文件的编码 -->
        <property name="javaFileEncoding" value="UTF-8"/>
        <!-- 格式化java代码 -->
        <property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/>
        <!-- beginningDelimiter和endingDelimiter:指明数据库的用于标记数据库对象名的符号,比如ORACLE就是双引号,MYSQL默认是`反引号; -->
        <property name="beginningDelimiter" value="`"/>
        <property name="endingDelimiter" value="`"/>
        <!-- JavaBean 实现 序列化 接口 -->
        <plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
    
        <!-- generat entity时,生成toString -->
        <plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>
        <!-- 此处是将Example改名为Criteria 当然 想改成什么都行~    -->
        <plugin type="org.mybatis.generator.plugins.RenameExampleClassPlugin">
            <property name="searchString" value="Example$"/>
            <property name="replaceString" value="Selective"/>
        </plugin>
    
        <commentGenerator type="org.mybatis.generator.internal.DefaultCommentGenerator">
            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
    
        <!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/test?characterEncoding=utf8&amp;useSSL=false&amp;serverTimezone=GMT%2B8" userId="root"
                        password="root">
            <property name="nullCatalogMeansCurrent" value="true"/>
        </jdbcConnection>
        <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和
            NUMERIC 类型解析为java.math.BigDecimal -->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="true"/>
        </javaTypeResolver>
    
        <!-- targetProject:生成PO类的位置 -->
        <javaModelGenerator targetPackage="com.flyinghome.tm.model"
                            targetProject="./src/main/java">
            <!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false -->
            <property name="enableSubPackages" value="true"/>
            <!-- 从数据库返回的值被清理前后的空格 -->
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
        <!-- targetProject:mapper映射文件生成的位置 -->
        <sqlMapGenerator targetPackage="mapper" targetProject="./src/main/resources">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>
    
        <!-- targetPackage:mapper接口生成的位置 -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.flyinghome.tm.dao"
                             targetProject="./src/main/java">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>
    
        <!-- 指定数据库表 -->
        <!-- <table schema="" tableName="WECHAT_MESSAGE"/> -->
    
        <table schema="" tableName="user_info" domainObjectName="UserDO"/>
        <!-- 指定数据库所有表  -->
        <!-- <table schema="" tableName="%"/> -->
        <!-- 有些表的字段需要指定java类型
         <table schema="" tableName="">
            <columnOverride column="" javaType="" />
        </table> -->
    </context>
    </generatorConfiguration>

    低版本:

    <?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="DB2Tables" defaultModelType="flat" targetRuntime="MyBatis3">
            <!-- 生成的Java文件的编码 -->
            <property name="javaFileEncoding" value="UTF-8"/>
            <!-- 格式化java代码 -->
            <property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/>
            <!-- beginningDelimiter和endingDelimiter:指明数据库的用于标记数据库对象名的符号,比如ORACLE就是双引号,MYSQL默认是`反引号; -->
            <property name="beginningDelimiter" value="`"/>
            <property name="endingDelimiter" value="`"/>
            <!-- JavaBean 实现 序列化 接口 -->
            <plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
    
            <!-- generat entity时,生成toString -->
            <plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>
            <!-- 此处是将Example改名为Criteria 当然 想改成什么都行~    -->
            <plugin type="org.mybatis.generator.plugins.RenameExampleClassPlugin">
                <property name="searchString" value="Example$"/>
                <property name="replaceString" value="Selective"/>
            </plugin>
    
            <commentGenerator type="org.mybatis.generator.internal.DefaultCommentGenerator">
                <!-- 是否去除自动生成的注释 true:是 : false:否 -->
                <property name="suppressAllComments" value="true"/>
            </commentGenerator>
    
            <!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
            <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                            connectionURL="jdbc:mysql://127.0.0.1:3306/test?useSSL=false" userId="root"
                            password="root">
                <property name="nullCatalogMeansCurrent" value="true"/>
            </jdbcConnection>
            <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和
                NUMERIC 类型解析为java.math.BigDecimal -->
            <javaTypeResolver>
                <property name="forceBigDecimals" value="true"/>
            </javaTypeResolver>
    
            <!-- targetProject:生成PO类的位置 -->
            <javaModelGenerator targetPackage="com.dataobject"
                                targetProject="./src/main/java">
                <!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false -->
                <property name="enableSubPackages" value="true"/>
                <!-- 从数据库返回的值被清理前后的空格 -->
                <property name="trimStrings" value="true"/>
            </javaModelGenerator>
            <!-- targetProject:mapper映射文件生成的位置 -->
            <sqlMapGenerator targetPackage="mapping" targetProject="./src/main/resources">
                <!-- enableSubPackages:是否让schema作为包的后缀 -->
                <property name="enableSubPackages" value="true"/>
            </sqlMapGenerator>
    
            <!-- targetPackage:mapper接口生成的位置 -->
            <javaClientGenerator type="XMLMAPPER" targetPackage="com.tm.dao"
                                 targetProject="./src/main/java">
                <!-- enableSubPackages:是否让schema作为包的后缀 -->
                <property name="enableSubPackages" value="true"/>
            </javaClientGenerator>
    
            <!-- 指定数据库表 -->
            <!-- <table schema="" tableName="WECHAT_MESSAGE"/> -->
    
            <table schema="" tableName="user" domainObjectName="userDO"/>
            <!-- 指定数据库所有表  -->
            <!-- <table schema="" tableName="%"/> -->
            <!-- 有些表的字段需要指定java类型
             <table schema="" tableName="">
                <columnOverride column="" javaType="" />
            </table> -->
        </context>
    </generatorConfiguration>

    (3)执行生成对应的文件。

    点击run--Edit Configurations--点击 '+' 按钮,创建一个maven--右侧填写Command line的值为:mybatis-generator:generate  (手动填写,会有提示)

    选中我们刚才创建的,之后点击执行。

    控制台:

    原目录vs新目录:

    二、使用idea工具

    首先需要下载一下easy code这个插件,下载安装完成后,重启ideal。

    之后点击ideal软件窗口右侧的Database按钮,点击符号 '+' ,选择Data Source中的MySQL。

    弹出如下框体,输入User、Password、Database(数据库名称),之后点击下面的Test Connection按钮进行连接测试。

    如图,提示我缺少驱动,直接按照提示点击进行下载。

     

    下载之后,再次点击连接测试按钮测试,提示Successful。

     

    此时,点击Apply、ok退出之后,发现已经有了一条连接,但是点开之后,这是什么鬼。。。。

    没有我们想要的表结构,解决办法如下,点击下图的按钮

    在弹出的框中,选中Schemas,之后勾选上自己需要的数据库。

     

    此时再点开这条连接,就会发现表和对应的结构出来了。

    在任意一个表名上右键,选中EasyCode---Generate Code

    之后弹出如下框,选中一个生成的路径,之后勾选要生成的文件,点击OK。

    可以看到已经生成了对应的目录和文件了,我这里报错是因为已经有了一个User类了。

    至此,两种方法已经介绍完毕。

    参考:

    1. https://www.cnblogs.com/kosi/p/11289551.html

    持续更新!!!

  • 相关阅读:
    MSBuild最佳实践
    Javascript:阻止浏览器默认右键事件,并显示定制内容
    zeptoJS:如何像jQuery一样,让滚动变得优雅?
    Javascript:DOM表格操作
    Javascript:getElementsByClassName
    Javascript:DOM动态创建元素实例应用
    Javascript:倒计时
    Javascript:sort()方法快速实现对数组排序
    探究css !important的应用之道
    Javascript:splice()方法实现对数组元素的插入、删除、替换及去重
  • 原文地址:https://www.cnblogs.com/flyinghome/p/12927059.html
Copyright © 2011-2022 走看看