前言
这篇文章想介绍一下mybatis-generator-maven-plugin
插件,它可以帮助我们逆向的将数据库表生成相应的实体。
使用
如图所示的目录结构中,entity
存放的是数据库表生成的实体,mapper
存放的是dao接口文件。
resources资源目录里,generator
存放的是逆向生成所需要的配置文件。mapper
文件存放的是数据库操作的XML。
generator.properties
mysql-connector-java-8.0.13.jar是我通过maven引入后,下载到本地的包。
# 手动配置以下选项
# 数据库驱动:选择你的本地硬盘上面的数据库驱动包
classPathEntry = C:\\Users\\fang\\.m2\\repository\\mysql\\mysql-connector-java\\8.0.13\\mysql-connector-java-8.0.13.jar
# 数据库连接驱动、连接地址、名称、用户名、密码
driver =com.mysql.jdbc.Driver
url = jdbc:mysql://192.168.0.30:3306/evaluation_vrm?characterEncoding=utf-8
db = test_fang
userId = root
password = 111111
# 生成pojo的包名位置 在src/main/java目录下
pojoTargetPackage = cn.fang.model.entity
# 生成DAO的包名位置 在src/main/java目录下
daoTargetPackage = cn.fang.model.mapper
# 生成Mapper的包名位置 位于src/main/resources目录下
mapperTargetPackage = mapper
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">
<!--利用MyBatis Generator里面的Xml文件格式,复制成为resource的xml文件,并进行修改-->
<generatorConfiguration>
<properties resource="generator/generator.properties"/>
<!--找到MySQL驱动包的路径-->
<!-- <classPathEntry location="C:\Users\fang\.m2\repository\mysql\mysql-connector-java\8.0.13\mysql-connector-java-8.0.13.jar" />-->
<!--配置连接MySQL数据库的信息-->
<!-- 引入配置文件 -->
<!-- 一个数据库一个context -->
<!--defaultModelType="flat" 大数据字段,不分表 -->
<context id="MysqlTables" targetRuntime="MyBatis3" defaultModelType="flat">
<!-- 自动识别数据库关键字,默认false,如果设置为true,根据SqlReservedWords中定义的关键字列表;
一般保留默认值,遇到数据库关键字(Java关键字),使用columnOverride覆盖 -->
<property name="autoDelimitKeywords" value="true" />
<!-- 生成的Java文件的编码 -->
<property name="javaFileEncoding" value="utf-8" />
<!-- beginningDelimiter和endingDelimiter:指明数据库的用于标记数据库对象名的符号,比如ORACLE就是双引号,MYSQL默认是`反引号; -->
<property name="beginningDelimiter" value="`" />
<property name="endingDelimiter" value="`" />
<!-- 格式化java代码 -->
<property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/>
<!-- 格式化XML代码 -->
<property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/>
<!-- 生成的pojo,将implements Serializable -->
<plugin type="org.mybatis.generator.plugins.SerializablePlugin"></plugin>
<!-- 生成的pojo带有toString方法 -->
<plugin type="org.mybatis.generator.plugins.ToStringPlugin"></plugin>
<!-- 注释 -->
<commentGenerator >
<property name="suppressAllComments" value="false"/><!-- 是否取消注释 -->
<property name="suppressDate" value="true" /> <!-- 是否生成注释代时间戳-->
</commentGenerator>
<!-- jdbc连接 -->
<jdbcConnection driverClass="${driver}" connectionURL="${url}" userId="${userId}" password="${password}" >
<property name="nullCatalogMeansCurrent" value="true"/>
</jdbcConnection>
<!-- 类型转换 -->
<!--配置各个文件的相对路径和项目路径-->
<!--产生实体类,需要和App是同级的-->
<javaModelGenerator targetPackage="${pojoTargetPackage}" targetProject="src/main/java">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!--映射文件,一定是在resources中的-->
<sqlMapGenerator targetPackage="${mapperTargetPackage}" targetProject="src/main/resources">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!--底层dao-->
<javaClientGenerator type="XMLMAPPER" targetPackage="${daoTargetPackage}" targetProject="src/main/java">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!--数据表-->
<!-- 需要生成的表 -->
<!-- 可以写上不存在的表不抛错,只是忽略,例如表tb_xxyyzz -->
<!-- schema随便写(可以不写),mysql无schema概念,oracle中schema跟用户名相同,每个用户名都有一个与之同名的schema,例如scott用户有scott的schema -->
<!-- domainObjectName指定生成的model的类名,可以默认不指定 -->
<!-- enableCountByExample等属性控制是否生成该方法,默认生成 -->
<!-- %匹配所有表格 -->
<table tableName="%" >
<generatedKey column="id" sqlStatement="MySql" identity="true" />
</table>
<!-- 如果有自增长的id,希望在插入后获得id,可以配置generatedKey,需要指定column,
sqlStatement未Mysql,identity必须为true。,在java端,insert(entity)后,由entity.getXxxId()获得自增长的id -->
<!-- 非自增长的不要出现generatedKey,否则报错 -->
<!--指定表进行逆向生成-->
<!--<table tableName="ips">-->
<!--<generatedKey column="id" sqlStatement="MySql" identity="true" />-->
<!--</table>-->
</context>
</generatorConfiguration>
在pom文件引入build部分的xml
<build>
<plugins>
<!-- mapper-generator START -->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<!--允许移动生成的文件 -->
<verbose>true</verbose>
<!--允许覆盖生成的文件 -->
<overwrite>true</overwrite>
<!--generatorConfig.xml文件 位置 -->
<configurationFile>src/main/resources/generator/generatorConfig.xml</configurationFile>
</configuration>
<dependencies>
<dependency>
<!--指定连接驱动 -->
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.13</version>
</dependency>
</dependencies>
</plugin>
<!-- mapper-generator END -->
</plugins>
</build>
终极指令
最后在当前项目模块下执行mvn mybatis-generator:generate -e
即可生成实体。
简单操作
通过逆向生成的xml和实体,对于单表的简单操作,可以通过逻辑代码进行操作。
eg.我想查询手机类型相匹配的用户实体,只需要在业务层实现如下语句即可,UsersExample
和Users
为逆向生成的实体。usersMapper为逆向生成的dao接口文件。
UsersExample usersExample = new UsersExample();
usersExample.createCriteria().andMobileEqualTo(emobileType);
List<Users> list = usersMapper.selectByExample(usersExample);