eclipse安装mybatis generator插件,自动生成实体类、mapper接口和SQL XM文件

目录

一、什么是MyBatis逆向工程?

二、mybatis generator插件安装过程

 三、配置generatorConfig.xml文件


一、什么是MyBatis逆向工程?

平时在开发项目的时候,数据持久层经常会用到mybatis框架来操作数据库,sql语句需要程序员自己去编写,这样就浪费了一部分没有必要的时间了。不过mybatis官方是提供逆向工程,简单理解的话就是,mybatis通过mybatis generator插件针对数据库单表生成mybatis执行时所需要的代码,比如:mapper.java、mapper.xml、pojo等,有效的提高了工作效率。

实际的开发中,经常用到的mybatis逆向工程的方式为:由数据库的表生成java代码;之所以强调单表两个字,是因为Mybatis逆向工程生成的Mapper所进行的操作都是针对单表的,也许你可能会觉得那这就有点鸡肋了,但是在大型项目中,很少有复杂的多表关联查询,所以作用还是很大的。

二、mybatis generator插件安装过程

1、在eclipse导航栏选择Help-->Eclipse Marketpalce --> 搜索框搜,输入:mybatis generator;然后出现如下页面:

最后按照步骤说明进行安装即可

2、安装结束以后,选中要生成代码的项目,鼠标右击,选择New–>Other,键入mybatis,可以查看到刚刚安装好的mybatis generator。如下图,说明mybatis generator插件安装成功。

 三、配置generatorConfig.xml文件

选择mybatis generator插件,创建一个新的generatorConfig.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>

<!-- 可以用于加载配置项或者配置文件,在整个配置文件中就可以使用${propertyKey}的方式来引用配置项
    resource:配置资源加载地址,使用resource,MBG从classpath开始找,比如com/myproject/generatorConfig.properties        
    url:配置资源加载地质,使用URL的方式,比如file:///C:/myfolder/generatorConfig.properties.
    注意,两个属性只能选择一个;
    另外,如果使用了mybatis-generator-maven-plugin,那么在pom.xml中定义的properties都可以直接在generatorConfig.xml中使用
<properties resource="" url="" /> -->
  <properties resource="mybatis/generator.properties"></properties>
  
  <!-- 连接mysql包,选择自己本地硬盘上面的数据库驱动包 -->
  <classPathEntry location="${db.driverLocation}"/>
  
  <!-- 
    context:生成一组对象的环境 
    id:必选,上下文id,用于在生成错误时提示
    defaultModelType:指定生成对象的样式
        1,conditional:类似hierarchical;
        2,flat:所有内容(主键,blob)等全部生成在一个对象中;
        3,hierarchical:主键生成一个XXKey对象(key class),Blob等单独生成一个对象,其他简单属性在一个对象中(record class)
    targetRuntime:
        1,MyBatis3:默认的值,生成基于MyBatis3.x以上版本的内容,包括XXXBySample;
        2,MyBatis3Simple:类似MyBatis3,只是不生成XXXBySample;
    introspectedColumnImpl:类全限定名,用于扩展MBG
  -->
  <context id="mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
     <!-- 自动识别数据库关键字,默认false;一般保留默认值,遇到数据库关键字(Java关键字),使用columnOverride覆盖 -->
     <property name="autoDelimitKeywords" value="true"/>
     <!-- 生成的Java文件的编码 -->
     <property name="javaFileEncoding" value="UTF-8"/>
     <!-- 格式化java代码 -->
     <property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/>
     <!-- 格式化XML代码 -->
     <property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/>
    
     <!-- beginningDelimiter和endingDelimiter:指明数据库的用于标记数据库对象名的符号,比如ORACLE就是双引号,MYSQL默认是`反引号; -->
     <property name="beginningDelimiter" value="`"/>
     <property name="endingDelimiter" value="`"/>
     
     <plugin type="org.mybatis.generator.plugins.EqualsHashCodePlugin"></plugin>
     <plugin type="org.mybatis.generator.plugins.SerializablePlugin"></plugin>
     <plugin type="org.mybatis.generator.plugins.ToStringPlugin"></plugin>
     
     <commentGenerator>
            <!-- 这个元素用来删除指定生成的注释中是否包含生成的日期 false:表示 生成日期,true:表示不生成日期-->
            <!-- 如果生成日期,会造成即使修改一个字段,整个实体类所有属性都会发生变化,不利于版本控制,所以设置为true -->
            <property name="suppressDate" value="true" />
            <!-- 是否去除自动生成的注释 true:是 ,false:否 -->
            <property name="suppressAllComments" value="true" />
    </commentGenerator>
    
    <!--数据库链接URL,用户名、密码 -->
    <jdbcConnection connectionURL="${db.url}" 
                    driverClass="${db.driverClassName}"
                    userId="${db.username}"
                    password="${db.password}">
    <!--MySQL 不支持 schema 或者 catalog 所以需要添加这个-->
    <property name="nullCatalogMeansCurrent" value="true"/>
    </jdbcConnection>
    
    <!-- 默认false,把JDBC DECIMAL和 NUMERIC类型解析为 Integer,为 true时把JDBC DECIMAL和NUMERIC类型解析为java.math.BigDecimal -->  
    <javaTypeResolver>  
        <property name="forceBigDecimals" value="false" />  
    </javaTypeResolver>
    
    <!-- 生成pojo实体类
     负责:1,key类(见context的defaultModelType);2,java类;3,查询类
        targetPackage:生成的类要放的包,真实的包受enableSubPackages属性控制;
        targetProject:目标项目,指定一个存在的目录下,生成的内容会放到指定目录中,如果目录不存在,MBG不会自动建目录
     -->
    <javaModelGenerator targetPackage="com.you.rabbitmq" 
                        targetProject="rabbitmq-demo/src/main/java">
        <!-- 自动为每一个生成的类创建一个构造方法,构造方法包含了所有的field;而不是使用setter;如果想在实体类中生成构造函数,则table标签中constructorBased属性也要设置成true -->
        <property name="constructorBased" value="false"/>
        <!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false -->
        <property name="enableSubPackages" value="false"/>
        <!-- 是否创建一个不可变的类,如果为true, 那么MBG会创建一个没有setter方法的类,取而代之的是类似constructorBased的类  -->
        <property name="immutable" value="false"/>
        <!-- 设置是否在getter方法中,对String类型字段调用trim()方法 -->
        <property name="trimStrings" value="true"/>
    </javaModelGenerator>
    
    <!-- 生成SQL map的XML文件生成器,注意,在Mybatis3之后,我们可以使用mapper.xml文件+Mapper接口,
            或者只使用Mapper接口+Annotation,所以,如果 javaClientGenerator配置中配置了需要生成XML文件的话,这个元素就必须配置
        targetPackage/targetProject:同javaModelGenerator
     -->
    <sqlMapGenerator targetPackage="mapper"
                     targetProject="rabbitmq-demo/src/main/resources/">
        <!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false -->
        <property name="enableSubPackages" value="false"/>
    </sqlMapGenerator>
    
    <!-- 对于mybatis来说,即生成Mapper接口;注意,如果没有配置该元素,那么默认不会生成Mapper接口 
        targetPackage/targetProject:同javaModelGenerator的作用
        type:选择怎么生成mapper接口(在MyBatis3/MyBatis3Simple下):
            1,ANNOTATEDMAPPER:会生成使用Mapper接口+Annotation的方式创建(SQL生成在annotation中),不会生成对应的XML文件;
            2,MIXEDMAPPER:使用混合配置,会生成Mapper接口,并适当添加合适的Annotation,但是XML会生成在XML中;
            3,XMLMAPPER:会生成Mapper接口,接口完全依赖XML文件;
        注意,如果context是MyBatis3Simple:只支持ANNOTATEDMAPPER和XMLMAPPER
    -->
    <javaClientGenerator targetPackage="com.you.rabbitmq" 
                         type="XMLMAPPER" 
                         targetProject="rabbitmq-demo/src/main/java">
        <!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false -->
        <property name="enableSubPackages" value="false"/>
    </javaClientGenerator>
    
    
    <!-- 要生成哪些表
        tableName(必要):要生成对象的表名
        可选:
        1,schema:数据库的schema;
        2,catalog:数据库的catalog
        3,alias:为数据表设置的别名,如果设置了alias,那么生成的所有的SELECT SQL语句中,列名会变成:alias_actualColumnName
        4,domainObjectName:生成的domain类的名字,如果不设置,直接使用表名作为domain类的名字;可以设置为somepck.domainName,那么会自动把domainName类再放到somepck包里面
        5,enableInsert(默认true):指定是否生成insert语句
        6,enableSelectByPrimaryKey(默认true):指定是否生成按照主键查询对象的语句(就是getById或get)
        7,enableUpdateByPrimaryKey(默认true):指定是否生成按照主键修改对象的语句(即update)
        8,enableDeleteByPrimaryKey(默认true):指定是否生成按照主键删除对象的语句(即delete)
        9,enableSelectByExample(默认true):MyBatis3Simple为false,指定是否生成动态查询语句
        10,enableDeleteByExample(默认true):MyBatis3Simple为false,指定是否生成动态删除语句
        11,enableCountByExample(默认true):MyBatis3Simple为false,指定是否生成动态查询总条数语句(用于分页的总条数查询)
        12,enableUpdateByExample(默认true):MyBatis3Simple为false,指定是否生成动态修改语句(只修改对象中不为空的属性)
        13,modelType:参考context元素的defaultModelType,相当于覆盖
        14,delimitIdentifiers:参考tableName的解释,注意,默认的delimitIdentifiers是双引号,如果类似MYSQL这样的数据库,使用的是`(反引号,那么还需要设置context的beginningDelimiter和endingDelimiter属性)
        15,delimitAllColumns:设置是否所有生成的SQL中的列名都使用标识符引起来。默认为false,delimitIdentifiers参考context的属性
        
        注意,table里面很多参数都是对javaModelGenerator,context等元素的默认属性的一个复写;
     -->
    <!--表配置,tableName支持%,表示全部生成-->
    <table tableName="userinfo" domainObjectName="UserInfo">
        
        <!-- 参考 javaModelGenerator 的 constructorBased属性-->
        <property name="constructorBased" value="false"/>
        <!-- 默认为false,如果设置为true,在生成的SQL中,table名字不会加上catalog或schema; -->
        <property name="ignoreQualifiersAtRuntime" value="false"/>
        <!-- 参考 javaModelGenerator 的 immutable 属性 -->
        <property name="immutable" value="false"/>
        <!-- 指定是否只生成domain类,如果设置为true,只生成domain类,如果还配置了sqlMapGenerator,那么在mapper XML文件中,只生成resultMap元素 -->
        <property name="modelOnly" value="false"/>
        <!-- 如果设置为true,生成的model类会直接使用column本身的名字,而不会再使用驼峰命名方法,比如BORN_DATE,生成的属性名字就是BORN_DATE,而不会是bornDate -->
        <property name="useActualColumnNames" value="false"/>
        <!-- 设置是否所有生成的SQL中的列名都使用标识符引起来,默认为false -->
        <property name="delimitAllColumns" value="true"/>
        <!-- mysql配置 -->
        <generatedKey column="user_id" sqlStatement="Mysql" identity="true"/>
       
        <!-- 用来修改表中某个列的属性,MBG会使用修改后的列来生成domain的属性;注意:一个table元素中可以有多个columnOverride元素
            column:要重新设置的列名。注意,一个table元素中可以有多个columnOverride元素;
            property:该属性来指定要生成实体类domain的属性名称;
            javaType:该属性用于指定生成的domain的属性类型,使用类型的全限定名 ;
            jdbcType:用于指定该列的JDBC类型 ;
         -->
         <columnOverride column="user_name" property="jiaName" javaType="java.lang.String"/>
         
         <!-- ignoreColumn设置一个MGB忽略的列,如果设置了改列,那么在生成的domain中,生成的SQL中,都不会有该列出现;注意:一个table元素中可以有多个ignoreColumn元素
            column:指定要忽略的列的名字;
            delimitedColumnName:参考table元素的delimitAllColumns配置,默认为false;
         -->
         <ignoreColumn column="user_age" delimitedColumnName="true"/>
    </table>
  </context>
</generatorConfiguration>

补充generator.properties文件配置:

db.driverLocation=C:/software/maven/maven-repository/mysql/mysql-connector-java/8.0.15/mysql-connector-java-8.0.15.jar
db.driverClassName=com.mysql.cj.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false
db.username=root
db.password=123456

generatorConfig.xml文件配置好以后,选中generatorConfig.xml文件,鼠标右击选择run as,选择run mybatis generator即可逆向生成相关java代码。上面的配置是在单应用程序中执行的,不过有几点需要注意的地方:

1、generatorConfig.xml文件中标签的顺序不能颠倒,否则执行时会报错;

2、生成文件放置的位置targetProject="rabbitmq-demo/src/main/java",路径前面一定要加行项目名称,否则不能生成文件;网上有些例子说的是不用加项目名称,写成targetProject="src/main/java"就可以生成文件,本人亲测了一下,然而并没有生成相应的文件,可能是和mybatis generator插件的版本有关系,我也搞不明白为啥。

3、在springboot多模块项目中,如何使用mybatis generator插件逆向生成代码,其实就是改一下generatorConfig.xml文件中修改一下文件生成位置的路径即可,其他的不用修改,修改如下:

<!-- 生成pojo实体类
     负责:1,key类(见context的defaultModelType);2,java类;3,查询类
        targetPackage:生成的类要放的包,真实的包受enableSubPackages属性控制;
        targetProject:目标项目,指定一个存在的目录下,生成的内容会放到指定目录中,如果目录不存在,MBG不会自动建目录
     -->
    <javaModelGenerator targetPackage="com.you.wstro.bean" 
                        targetProject="wstro-entity/src/main/java">
        <!-- 自动为每一个生成的类创建一个构造方法,构造方法包含了所有的field;而不是使用setter;如果想在实体类中生成构造函数,则table标签中constructorBased属性也要设置成true -->
        <property name="constructorBased" value="false"/>
        <!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false -->
        <property name="enableSubPackages" value="false"/>
        <!-- 是否创建一个不可变的类,如果为true, 那么MBG会创建一个没有setter方法的类,取而代之的是类似constructorBased的类  -->
        <property name="immutable" value="false"/>
        <!-- 设置是否在getter方法中,对String类型字段调用trim()方法 -->
        <property name="trimStrings" value="true"/>
    </javaModelGenerator>
    
    <!-- 生成SQL map的XML文件生成器,注意,在Mybatis3之后,我们可以使用mapper.xml文件+Mapper接口,
            或者只使用Mapper接口+Annotation,所以,如果 javaClientGenerator配置中配置了需要生成XML文件的话,这个元素就必须配置
        targetPackage/targetProject:同javaModelGenerator
     -->
    <sqlMapGenerator targetPackage="mapper"
                     targetProject="wstro-dao/src/main/resources/">
        <!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false -->
        <property name="enableSubPackages" value="false"/>
    </sqlMapGenerator>
    
    <!-- 对于mybatis来说,即生成Mapper接口;注意,如果没有配置该元素,那么默认不会生成Mapper接口 
        targetPackage/targetProject:同javaModelGenerator的作用
        type:选择怎么生成mapper接口(在MyBatis3/MyBatis3Simple下):
            1,ANNOTATEDMAPPER:会生成使用Mapper接口+Annotation的方式创建(SQL生成在annotation中),不会生成对应的XML文件;
            2,MIXEDMAPPER:使用混合配置,会生成Mapper接口,并适当添加合适的Annotation,但是XML会生成在XML中;
            3,XMLMAPPER:会生成Mapper接口,接口完全依赖XML文件;
        注意,如果context是MyBatis3Simple:只支持ANNOTATEDMAPPER和XMLMAPPER
    -->
    <javaClientGenerator targetPackage="com.you.wstro.mapper" 
                         type="XMLMAPPER" 
                         targetProject="wstro-dao/src/main/java">
        <!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false -->
        <property name="enableSubPackages" value="false"/>
    </javaClientGenerator>

我这里是将java实体类放在wstro-entity模块中,将mapper接口以及sql xml文件放在了wstro-到模块中,这样的话就需要修改文件生成的路径,文件生成在哪个模块,就在路径上加上哪个模块的名称即可。网上有的说是用相应模块的结对路径,我尝试了一下文件生成失败。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值