mybatis逆向生成
-
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"> <!-- 这个配置文件有如下作用--> <!-- 1. 指定 mysql jdbcjar 包的位置,这里用的位置是 e:/project/mybatis/lib/mysql-connector-java-5.0.8-bin.jar--> <!-- 2. 设置数据库链接账号密码--> <!-- 3. 指定pojo,mapper,xml分别生成的包名--> <!-- 4. 指定表名以及表名对应的类名--> <!-- 4.1 使用自增长键:--> <!-- 5.自动配置pojo,mapper,对应的映射文件 --> <generatorConfiguration> <!--数据库驱动--> <!-- 如果IDE(eclipse或者idea) 项目里导入了jar包,那么就不需要配置了jar包的绝对路径了 <classPathEntry location="e:/project/mybatis/lib/mysql-connector-java-5.0.8-bin.jar"/> --> <context id="DB2Tables" targetRuntime="MyBatis3"> <!--避免生成重复代码的插件--> <plugin type="com.xiaoxu.tmallspringboot.utils.OverIsMergeablePlugin" /> <!--是否在代码中显示注释--> <commentGenerator> <property name="suppressDate" value="true"/> <!-- 是否去除自动生成的注释 true:是 : false:否 --> <property name="suppressAllComments" value="true"/> </commentGenerator> <!--数据库链接地址账号密码--> <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/数据库名?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC" userId="root" password="123456"> </jdbcConnection> <!--非必须,类型处理器,在数据库类型和java类型之间的转换控制--> <javaTypeResolver> <!-- 默认情况下数据库中的 decimal,bigInt 在 Java 对应是 sql 下的 BigDecimal 类 --> <!-- 不是 double 和 long 类型 --> <!-- 使用常用的基本类型代替 sql 包下的引用类型 --> <property name="forceBigDecimals" value="false" /> </javaTypeResolver> <!-- targetPackage:生成的实体类所在的包 --> <!-- targetProject:生成的实体类所在的硬盘位置 先写绝对路径生成后改成相对路径即可--> <!--注意:先pojo->mapper.xml->mapper 顺序把不要改变 --> <!--生成Model类(pojo实体类)存放位置--> <javaModelGenerator targetPackage="com.xiaoxu.tmallspringboot.pojo" targetProject="E:\Intellij IDEA\IDEAProject\TM_SpringBoot\_03HandTmall\src\main\java"> <property name="enableSubPackages" value="true"/> <property name="trimStrings" value="true"/> </javaModelGenerator> <!--生成映射文件存放位置--> <sqlMapGenerator targetPackage="com.xiaoxu.tmallspringboot.mapper" targetProject="E:\Intellij IDEA\IDEAProject\TM_SpringBoot\_03HandTmall\src\main\resources"> <property name="enableSubPackages" value="true"/> </sqlMapGenerator> <!--生成Dao/mapper存放位置--> <javaClientGenerator type="XMLMAPPER" targetPackage="com.xiaoxu.tmallspringboot.mapper" targetProject="E:\Intellij IDEA\IDEAProject\TM_SpringBoot\_03HandTmall\src\main\java"> <!-- 针对 oracle 数据库的一个配置,是否把 schema 作为字包名 --> <property name="enableSubPackages" value="true"/> </javaClientGenerator> <!--生成对应表及类名--> <table tableName="category" domainObjectName="Category" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="true" selectByExampleQueryId="false"> <property name="my.isgen.usekeys" value="true"/> <property name="useActualColumnNames" value="true"/> <generatedKey column="id" sqlStatement="JDBC"/> </table> <!-- 表对应的实体类 --> <table tableName="property" domainObjectName="Property" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="true" selectByExampleQueryId="false"> <property name="my.isgen.usekeys" value="true"/> <property name="useActualColumnNames" value="true"/> <generatedKey column="id" sqlStatement="JDBC"/> </table> </context> </generatorConfiguration>
-
mybatisGenerator.java
public class MybatisGenerator { public static void main(String[] args) throws Exception { String today = "2020-6-12"; SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd"); Date now =sdf.parse(today); Date d = new Date(); if(d.getTime()>now.getTime()+1000*60*60*24){ System.err.println("——————未成成功运行——————"); System.err.println("——————未成成功运行——————"); System.err.println("本程序具有破坏作用,应该只运行一次,如果必须要再运行,需要修改today变量为今天,如:" + sdf.format(new Date())); return; } List<String> warnings = new ArrayList<>(); boolean overwrite = true; InputStream is= MybatisGenerator.class.getClassLoader().getResource("generatorConfig.xml").openStream(); ConfigurationParser cp = new ConfigurationParser(warnings); Configuration config = cp.parseConfiguration(is); is.close(); DefaultShellCallback callback = new DefaultShellCallback(overwrite); MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings); myBatisGenerator.generate(null); System.out.println("生成代码成功,只能执行一次,以后执行会覆盖掉mapper,pojo,xml 等文件上做的修改"); } }
-
OverlsMergeablePlugin.java
/** * MybatisGenerator插件是Mybatis官方提供的,这个插件存在一个固有的Bug, * 即当第一次生成了CategoryMapper.xml之后,再次运行会导致CategoryMapper.xml生成重复内容(这里虽然重复但是并没有覆盖),而影响正常的运行。 * 为了解决这个问题,需要自己写一个小插件类OverIsMergeablePlugin。 */ public class OverIsMergeablePlugin /*extends PluginAdapter*/ { @Override public boolean validate(List<String> warnings) { return true; } @Override public boolean sqlMapGenerated(GeneratedXmlFile sqlMap, IntrospectedTable introspectedTable) { try { Field field = sqlMap.getClass().getDeclaredField("isMergeable"); field.setAccessible(true); field.setBoolean(sqlMap, false); } catch (Exception e) { e.printStackTrace(); } return true; } }
-
jar
<!-- mybatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </dependency> <!-- mybatis generator 生成工具需要改jar --> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.6</version> </dependency>