• 周三. 4月 24th, 2024

5G编程聚合网

5G时代下一个聚合的编程学习网

热门标签

在MyEclipse的Maven环境下,使用mybatis-generator插件自动生成映射文件(接口)及实体类

admin

11月 28, 2021

       在数据表比较多的情况下,手动编写sql映射文件和实体类,实在太多过繁琐,而mybatis-generator能自动生成这此东西,减少了重复性的工作量。mybatis-generator的配置容易出现问题,网上的教程虽然比较多,但不少帖子都有些小问题。我跟着上边尝试过多次,并不断修改才配置成功,我将自己亲测的配置过程分享出来,尽量让大家一步到位,尽量少改动、系统少报错。

1.在pom.xml中导入相关依赖

<!-- mybatis的映射sql 及实体类自动生成工具jar -->
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.2</version>
            <type>jar</type>
        </dependency>
        <!-- jdbc数据库连接包 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>

    </dependencies>
    <build>
        <plugins>
            <!-- maven环境中的mybatis.generator插件 -->
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.3</version>
                <configuration>
                <!-- 指定的 mybatis-generator配置文件位置。
                若省略此配置项,则默认查找使用 'src/main/resources'下的'generatorConfig.xml'配置文件。
                如果即没有指定配置文件位置,'src/main/resources/generatorConfig.xml'又不存在,
                则会报错退出。    -->
                    <configurationFile>src/main/resources/mybatis-generator/generatorConfig.xml</configurationFile>
                    <verbose>true</verbose>
                    <!-- 覆盖原有的实体类、sql映射文件及映射文件接口 -->
                    <overwrite>true</overwrite>
                </configuration>
            </plugin>
        </plugins>
        <finalName>sys</finalName>
    </build>

2.编写数据库配置文件

在resources资源目录下创建一个数据库配置文件database.properties

driver=com.mysql.jdbc.Driver
#在和mysql传递数据的过程中,使用unicode编码格式,并且字符集设置为utf-8
url=jdbc:mysql://127.0.0.1:3306/lottery_db?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
user=root
password=qwert

3.编写mybatis-generator的配置文件

在resources资源目录下新建一个目录mybatis-generator,在此目录下创建一个mybatis-generator的配置文件generatorConfig.xml (与pom.xml中mybatis-generator-maven-plugin插件的configurationFile标签设置的路径一致

<?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>
    <!-- 引入数据库配置文件。 -->
    <!-- 与当前generatorConfig.xml的位置无关,只跟database.properties的位置有关. 如果database.properties就直接在resources目录下, 
        可以直接写resource="database.properties", 而不管generatorConfig.xml存在于resources目录还是resources的子目录中。 
        因为我们用命令生成映射文件,而并没有让项目运行起来,如果写成“resource='classpath:database.properties'” 
        用命令生成映射文件时会报错(项目未运行就不存在'类路径'这种说法)。
         若database.properties文件在resources的子目录xxx下,这里便写作"resource='xxx/database.properties'" -->
    <properties resource="database.properties" />
    <!-- jdbc工具包 -->
    <!-- 必须配置指定 数据库连接器jar包位置 -->
    <classPathEntry
        location="E:maven_repositorymysqlmysql-connector-java5.1.47mysql-connector-java-5.1.47.jar" />
        
    <!-- 一个数据库一个上下文context -->
    <context id="mapper_lottery_db" targetRuntime="MyBatis3"><!--指定mybatis框架版本 -->
    
        <commentGenerator>
            <property name="type" value="DEFAULT" />
            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
            <property name="suppressAllComments" value="true" />
            <!-- 这个元素用来去除指定生成的注释中是否包含生成的日期 false:表示保护 -->
            <!-- 如果生成日期,会造成即使修改一个字段,整个实体类所有属性都会发生变化,不利于版本控制,所以设置为true -->
            <property name="suppressDate" value="true" />
        </commentGenerator>

        <!-- 通过美元符号引用database.properties中的jdbc连接参数 -->
        <jdbcConnection driverClass="${driver}" connectionURL="${url}"
            userId="${user}" password="${password}" />
            
        <!-- 生成实体类 -->
        <!-- targetPackage表示放置实体类的包,这个包可以原本不存在于项目中, 若不存在,generator则会自动先建包,再建实体类 
             targetProject表示包的位置 -->
        <javaModelGenerator targetPackage="cn.lottery.pojo"
            targetProject="src/main/java">
            <!-- 是否在当前路径下新加一层schema,
            fase : cn.lottery.pojo, true : cn.lottery.pojo.[schemaName] -->
            <property name="enableSubPackages" value="false" />
            <!-- 是否针对string类型的字段在set的时候进行trim调用 -->
            <property name="trimStrings" value="false" />
        </javaModelGenerator>

        <!--sql映射文件 -->
        <sqlMapGenerator targetPackage="mappers"
            targetProject="src/main/resources">
            <property name="enableSubPackages" value="false" />
        </sqlMapGenerator>
        
        <!-- mapper接口 -->
        <!--     type="XMLMAPPER|ANNOTATEDMAPPER",分别表示以xml还是以注解来映射SQL语句  -->
        <javaClientGenerator targetPackage="cn.lottery.mapper"
            type="ANNOTATEDMAPPER" targetProject="src/main/java">
            <property name="trimStrings" value="false" />
        </javaClientGenerator>
        
        
        <!-- 数据表的需要的SQL语句 -->
        
        <!--一张表一个<table>标签,schema表示数据库名,tableName表示数据表名,domainObjectName表示生成的实体类名 -->
        <!--enableXXXXByExample设置为true,将生成"pojonameXXXXByExample"的实体类。
        生成这种实体类主要用于复杂的SQL操作,如:排序、去重、大于/小于的区间查询匹配等 ,一般情况下不需要这些。
         -->
        <table schema="lottery_db" tableName="admin_user"
            domainObjectName="AdminUser" enableCountByExample="false"
            enableUpdateByExample="false" enableDeleteByExample="false"
            enableSelectByExample="false" selectByExampleQueryId="false">
            <!-- 默认情况下,字段名和实体类的属性名相同,此处可省略 -->
            <property name="useActualColumnNames" value="true" />
            <!--如果想让字段名和属性名不完全对应,可对columnOverride标签设置相关属性  -->
        <!--     <columnOverride column="login_name" property="loginName"/> -->
        </table>
        
 
    </context>
</generatorConfiguration>

4.命令生成所需文件

网上很多教程过都是使用run as maven生成的相关文件,但在我的myeclipse环境中run as总会报错,只有在命令行终端中使用命令才不报错,正确地生成了相关文件。

myeclipse自带有命令行终端,在左上角点击终端图标即可显示。

image

终端打开后,工作目录默认在当前项目的根目录中。若不在项目的根目录,则要切换到项目根目录 ,在此目录中使用”dir“命令要能看到”pom.xml”文件。

image

然后输入”mvn clean mybatis-generator:generate” ,当见到终端输出显示绿色的”BUILD SUCCESS”就成功生成了mybatis的相关sql映射文件。

image

最后在当前项目中按下”F5″键刷新,就能看到生成的接口、实体类及sql映射文件

image

注意: 如果以xml的方式映射SQL语句,而在原先的xml映射文件又未被删除情况下,你第二次运行”mvn clean mybatis-generator:generate”命令,新的SQL映射内容会追加在原来xml文件中,将导致多个相同的sql语句id,最终会运行时将报错。这里并未像mybatis-generator中配置 <overwrite>true</overwrite>所预期的那样,覆盖原有的内容,这可能是这个插件的小BUG 。因此需要将原先的xml映射文件给删除掉,防止sql映射内容追加在原文件中。

参考:Mybatis自动生成实体类和Mapper文件 (X兄)

《在MyEclipse的Maven环境下,使用mybatis-generator插件自动生成映射文件(接口)及实体类》有3个想法
  1. Wow, incredible weblog format! How long have you been running a blog
    for? you made blogging look easy. The entire glance of your website is wonderful, let alone the content!
    You can see similar here sklep online

  2. Подробно расскажем, как Принять наследство через суд – Ливенский районный суд Орловской области онлайн или самостоятельно. Юристы по трудовому праву подготовили пошаговую инструкцию по взысканию компенсации за задержку выплаты зарплаты в суде: этапы взыскания, размер пошлины, подсудность и ответы на частые вопросы работников

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注