为什么要用mybatis-generator反向生成器?
在编写Mybatis的mapper层的xml文件时,如果pojo层和数据库中对应表的实体类数量过多,此时即使是利用MyBatis来做一些简单的查询,xml文件中大量的sql语句指令的编写也会使得开发的效率变低(简单的查询都是如此,更别说复杂的查询了)。而利用mybatis-generator反向生成器不仅可以自动生成pojo中的实体类,还可以生成dao层中的接口和mapper层中的xml文件。
MyBatis中-Generator反向生成器的使用步骤讲解
1.导入generator生成的依赖
具体的目录结构是
<dependencies>
<dependency>
<!--根据实体表反向生成实体类的插件-->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.4.0</version>
</dependency>
具体的目录结构是
<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文件
<?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.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名字)
<?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的版本