MyBatis反向生成(IDEA+Maven)
一、什么是反向生成工程
反向生成工程,可以针对数据库表自动生成MyBatis执行所需要的代码,比如实体类代码、mapper.xml、mapper接口等,可以提高开发效率。
本文将介绍如何使用IDEA+Maven实施反向生成工程。
二、使用方法
1、创建Maven项目
创建好的项目目录结构如下:
2、配置Maven的pop.xml文件
下载反向工程说需要的jar包,pop.xml文件代码如下:
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>MyBatisGenerator1</groupId>
<artifactId>MyBatisGenerator1</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>MyBatisGenerator1 Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!--MyBatis版本-->
<mybatis-version>3.4.5</mybatis-version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!--https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis-version}</version>
</dependency>
<!--https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core-->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.5</version>
</dependency>
<!--https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
<!--https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.30</version>
</dependency>
</dependencies>
<build>
<finalName>MyBatisGenerator1</finalName>
</build>
</project>
3、反向工程配置文件
这个配置文件就是generatorConfig.xml,里面配置了数据库的连接属性、需要反向生成的数据库表及其属性。操作步骤有:
(1)添加要生成的数据库表
(2)实体类、mapper接口Java类所在的包路径
(3)SQL语句的mapper.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> <context id="default" targetRuntime="Mybatis3" > <!-- optional,旨在创建class时,对注释进行控制 --> <commentGenerator type="generator.MyCommentGenerator"> <!--<property name="suppressDate" value="true"/>--> <!--<property name="suppressAllComments" value="true"/>--> </commentGenerator> <!--配置数据库连接--> <!--<jdbcConnection--> <!--driverClass="${jdbc.driverClass}"--> <!--connectionURL="${jdbc.connectionURL}"--> <!--userId="${jdbc.userId}"--> <!--password="${jdbc.password}">--> <!--<!– 针对oracle数据库 –>--> <!--<!–<property name="remarksReporting" value="true"></property>–>--> <!--<!– 针对mysql数据库 –>--> <!--<property name="useInformationSchema" value="true"></property>--> <!--</jdbcConnection>--> <!--数据库连接的信息:驱动类、连接地址、用户名、密码 --> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/testmysql" userId="root" password="root"> </jdbcConnection> <!-- 非必需,类型处理器,在数据库类型和java类型之间的转换控制--> <javaTypeResolver> <property name="forceBigDecimals" value="false"/> </javaTypeResolver> <!-- Model模型生成器,用来生成含有主键key的类,记录类 以及查询Example类 targetPackage 指定生成的model生成所在的包名 targetProject 指定在该项目下所在的路径 --> <javaModelGenerator targetPackage="com.charlie.ssm.demo.entity" targetProject="src/main/java"> <!-- 是否允许子包,即targetPackage.schemaName.tableName --> <property name="enableSubPackages" value="false"/> <!-- 是否对model添加 构造函数 --> <property name="constructorBased" value="false"/> <!-- 是否对类CHAR类型的列的数据进行trim操作 --> <property name="trimStrings" value="true"/> <!-- 建立的Model对象是否 不可改变 即生成的Model对象不会有 setter方法,只有构造方法 --> <property name="immutable" value="false"/> </javaModelGenerator> <!--Mapper映射文件生成所在的目录 为每一个数据库的表生成对应的SqlMap文件 --> <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources"> <property name="enableSubPackages" value="false"/> </sqlMapGenerator> <!-- 客户端代码,生成易于使用的针对Model对象和XML配置文件 的代码 type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper对象 type="MIXEDMAPPER",生成基于注解的Java Model 和相应的Mapper对象 type="XMLMAPPER",生成SQLMap XML文件和独立的Mapper接口 --> <javaClientGenerator targetPackage="com.charlie.ssm.demo.entity" targetProject="src/main/java" type="XMLMAPPER" > <property name="enableSubPackages" value="false"/> </javaClientGenerator> <!-- 指定生成的数据表 tableName:数据库表名称 domainObjectName:生成的实体类名称 mapperName:SQL语句的XML文件名称 --> <!--<table tableName="tb_user" domainObjectName="UserEntity" mapperName="UserDao"--> <!--enableCountByExample="false" enableUpdateByExample="false"--> <!--enableDeleteByExample="false" enableSelectByExample="false"--> <!--selectByExampleQueryId="false">--> <!--</table>--> <table tableName="tb_user" domainObjectName="UserEntity" mapperName="UserDao" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"> </table> </context> </generatorConfiguration>
4、运行程序生成代码
运行MainGenerator的main方法,就可运行反向工程,注意反向工程的配置文件路径要正确。
运行代码如下:
/** * 运行此方法重新生成mybatis相关的文件,慎用 * 运行之后会覆盖com.dao 以及com.entity的类,但是对应的mapper/*.xml中的数据库操作 */ public class MainGenerator { /** * MyBatis反向生成工程 * @param args */ public static void main(String[] args) { try { System.out.println("MyBatis反向生成"); List<String> warnings = new ArrayList<>(); boolean overwrite = true; //配置文件 File configFile = new File("./src/main/resources/generator/generatorConfig.xml"); ConfigurationParser cp = new ConfigurationParser(warnings); Configuration config = cp.parseConfiguration(configFile); DefaultShellCallback callback = new DefaultShellCallback(overwrite); MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings); myBatisGenerator.generate(null); System.out.println("执行完毕"); } catch (IOException e) { e.printStackTrace(); } catch (XMLParserException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } catch (InvalidConfigurationException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } }
5、运行结果
三、下载地址
https://download.csdn.net/download/qq_33721382/10506541