MyBatis-Generator反向生成器的使用(保姆级教程)

为什么要用mybatis-generator反向生成器?

在编写Mybatis的mapper层的xml文件时,如果pojo层和数据库中对应表的实体类数量过多,此时即使是利用MyBatis来做一些简单的查询,xml文件中大量的sql语句指令的编写也会使得开发的效率变低(简单的查询都是如此,更别说复杂的查询了)。而利用mybatis-generator反向生成器不仅可以自动生成pojo中的实体类,还可以生成dao层中的接口和mapper层中的xml文件


MyBatis中-Generator反向生成器的使用步骤讲解

第一步在pom.xml文件中导入以下依赖(包括1和2和3都在pom.xml文件中完成)

1.导入generator生成的依赖

具体的目录结构是

<dependencies>
  <dependency>

<!--根据实体表反向生成实体类插件-->
<dependency>
  <groupId>org.mybatis.generator</groupId>
  <artifactId>mybatis-generator-maven-plugin</artifactId>
  <version>1.4.0</version>
</dependency>

2.导入反向生成插件的依赖

具体的目录结构是

<build>
  <pluginManagement>
    <plugins>
      <plugin>

<!--MysqL的驱动是给下面这个反向生成插件使用的 -->
<plugin>
  <groupId>org.mybatis.generator</groupId>
  <artifactId>mybatis-generator-maven-plugin</artifactId>
  <version>1.4.0</version>
  <dependencies>
    <dependency>
      <groupId>MysqL</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.26</version>
      <scope>runtime</scope>
    </dependency>
  </dependencies>
</plugin>

3.然后手动导入1和2中的这些依赖

做法:在pom.xml文件中 右键鼠标点击Maven 然后点击 reloadProject

 第二步:在webapp项目下创建对应的一些包(一步一步看不用急)

1.在webapp项目的src/main/java 下分别创建pojo 和 dao 和 vo 以及 bo 包(包名最好见名知意)

2.再在webapp项目的src/main/resources下创建mappers目录

3.然后在webapp项目的src/main/resources下新建文件generatorConfig.xml文件

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">

<!--https://blog.csdn.net/weixin_45433031/article/details/121759041 详解见此路径-->
<!--反向把数据库对象生成java对象 反射(获取字段) + io(写数据) + jdbc(查数据)-->
<generatorConfiguration>
<!-- 读取jdbc配置文件-->
 <properties resource="jdbc.properties"></properties>
    <!--targetRuntime:设置生成文件适用于那个 mybatis 版本-->
    <context id="myGenerator" targetRuntime="MyBatis3">
        <!--去除注释-->
        <commentGenerator>
            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <!--jdbcConnection中的EL表达式的取值的文件为jdbc.properties 在后面的步骤中会提及-->
        <jdbcConnection driverClass="${jdbc.driver}"
                        connectionURL="${jdbc.url}"
                        userId="${jdbc.username}"
                        password="${jdbc.password}">
        </jdbcConnection>
        <!--不使用BigDecimal类型 java类型解析器-->
        <!--非必须,类型处理器,在数据库类型和java类型之间的转换控制-->
        <javaTypeResolver >
            <!-- 认情况下数据库中的 decimal,bigInt 在 Java 对应是 sql 下的 BigDecimal 类 -->
            <!-- 不是 double 和 long 类型 -->
            <!-- 使用常用的基本类型代替 sql 包下的引用类型 -->
            <property name="forceBigDecimals" value="true" />
        </javaTypeResolver>
         <!--生成的东西放哪 pojo-->
        <javaModelGenerator targetPackage="org.example.pojo" targetProject="src/main/java">
            <property name="trimstrings" value="true" />
        </javaModelGenerator>
        <!--自动生成xml-->
        <!-- targetPackage:生成实体类所在的包 -->
        <!-- targetProject:生成实体类所在的硬盘位置 -->
        <!--使用注解开发时不需要sql的xml文件 所以不需要此标签        -->
        <sqlMapGenerator targetPackage="/mappers/"  targetProject="src/main/resources">
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>
        <!--自动生成dao-->
        <!-- targetPackage 和 targetProject:生成的 interface 接口文件的包和位置 -->
        <!--ANNOTATEDMAPPER使用注解开发  XMLMAPPER使用sqlxml的注解开发       -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="org.example.dao"  targetProject="src/main/java">
        </javaClientGenerator>

        <!-- tableName是数据库中的表名,domainObjectName是生成的JAVA pojo模型(即对应的pojo包下和数据库中表对应的实体类的类)名,后面的参数不用改,要生成更多的表就在下面继续加table标签 -->
        <table schema="TZRDB" tableName="NEWS" domainObjectName="News"  enableCountByExample="false" enableupdateByExample="false"
               enableDeleteByExample="false" enableSelectByExample="false"
               selectByExampleQueryId="false">
        </table>
       <table tableName="NEWSTYPE" domainObjectName="NewsType" schema="TZRDB"
              enableCountByExample="false" enableupdateByExample="false"
              enableDeleteByExample="false" enableSelectByExample="false"
              selectByExampleQueryId="false">
       </table>

    </context>
</generatorConfiguration>

jdbc.properties文件内容如下(主要配置数据库的连接信息)

# 每个配置后一定不要加分号 且参数一定要加. 不然取不到值
# 加载驱动的类
jdbc.driver=com.MysqL.cj.jdbc.Driver
# url固定格式  jdbc:MysqL://域名(如果为本机就是localhost):端口号/连接的数据库名?(后面的三个参数可以不加 加了后的意思为 使用unicode编码 支持的编码格式为UTF-8)
jdbc.url=jdbc:MysqL://192.168.0.0:3306/UserDB?useUnicode=TRUE&characterEncoding=utf8&useSSL=TRUE
# 数据库连接的用户名
jdbc.username=root 
# 数据库连接的密码
jdbc.password=123456

以上1、2、3小步完成后的目录结构如下

第三步:执行以下操作(按顺序执行),生成反向生成器,自动生成pojo中的实体类以及dao中的接口和mappers下的映射文件

注意里面有一条命令为mybatis-generator:generate

 

 

 

 

填写的命令为mybatis-generator:generate  

第四步:修改 webapp项目下src/main/resources下的mybatis的核心配置文件mybatis.xml的sqlxml映射名(也即mappers下的xml名字)

MyBatis核心配置文件mybatis.xml文件内容如下

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--读取jdbc.properties配置文件-->
    <properties resource="jdbc.properties"></properties>
    <settings>
        <!--延迟加载开关: 如false,那么查询就直接调用查询 如果为true则在需要的时候再去调用查询-->
        <setting name="lazyLoadingEnabled" value="true"/>
        <!--true是调用自身查询的结果字段也会去执行子查询 所以调成false只有在查询查询中的字段才会去调用查询-->
        <setting name="aggressiveLazyLoading" value="false"/>
    </settings>
    <typeAliases>
        <!--将所有的此包中的类转为驼峰命名 如将Emp转为emp等 适用于一个包中有多个类的情况-->
        <package name="org.example.pojo"/>
        <package name="org.example.vo"/>
        <package name="org.example.bo"/>
    </typeAliases>
    <!--这种方式也可以配置别名 适用于包中类的数量较少的情况 为类配置别名        -->
    <!--<typeAliases>
        <typeAlias alias="Author" type="domain.blog.Author"/>
        <typeAlias alias="Blog" type="domain.blog.Blog"/>
        <typeAlias alias="Comment" type="domain.blog.Comment"/>
        <typeAlias alias="Post" type="domain.blog.Post"/>
        <typeAlias alias="Section" type="domain.blog.Section"/>
        <typeAlias alias="Tag" type="domain.blog.Tag"/>
    </typeAliases>-->

    <!--认使用哪个环境-->
    <environments default="development">
        <!--配置不同的数据库环境 -->
        <environment id="development">
            <!--JDBC(常用,使用JDBC管理事务) MANAGED (不常用,容器管理事务)-->
            <transactionManager type="JDBC"/>
            <!---->
            <dataSource type="POOLED">
                <!--这里一定要加jdbc. 不然取不到值-->
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--加载pojo的sql映射文件(由于是注解开发所以和dao在同一个包中)-->
    <!--<mappers>
        <package name="org.example.dao"/>
    </mappers>-->
    <!--加载pojo的sqlxml映射文件-->
    <mappers>
        <!--使用mybatis-generator反向生成生成代码后记得修改mybatis.xml中的mapper的映射路径(即sqlxml的映射路径)-->
        <!--认前面加了左斜杆 自己不能加左斜杆不然会报错 为编译后的根路径-->
        <mapper resource="mappers/NewsMapper.xml"/>
        <mapper resource="mappers/NewsTypeMapper.xml"/>
        <mapper resource="mappers/HUserMapper.xml"/>
        <mapper resource="mappers/HDeptMapper.xml"/>
        <mapper resource="mappers/sstudentMapper.xml"/>
        <mapper resource="mappers/STeacherMapper.xml"/>
    </mappers>
</configuration>

至此反向生成器便会成功在第二步创建的包下生成类和接口以及xml映射文件


关于mybatis-generator 反向生成器的一些额外的补充

//使用mybatis-generator反向生成器可以自动生成pojo中对应数据库中表的实体类以及dao中对应sql映射文件的接口以及mapper中的sql映射文件
//但是自动生成sql映射文件后 需要在mybatis.xml文件中配置sqlxml的新路径,其实路径没变只是名字变了 (xmlmapper开发)
//注解开发 ANNOTATEDMAPPER 不需要sqlxml了所以mybatis.xml中的mapper的source配置去掉 改为mapper的package告诉dao的位置
//且注解开发不需要generatorConfig.xml中的sqlMapGenerator标签
//使用mybatis-generator反向生成器一定要使用targetRuntime配置mybatis的版本

相关文章

显卡天梯图2024最新版,显卡是电脑进行图形处理的重要设备,...
初始化电脑时出现问题怎么办,可以使用win系统的安装介质,连...
todesk远程开机怎么设置,两台电脑要在同一局域网内,然后需...
油猴谷歌插件怎么安装,可以通过谷歌应用商店进行安装,需要...
虚拟内存这个名词想必很多人都听说过,我们在使用电脑的时候...
win11本地账户怎么改名?win11很多操作都变了样,用户如果想要...