Mybatis逆向工程使用:
由于实际项目中大量的数据表,若开发人员使用mybatis框架为其一一创建mapper,pojo..等文件实在是一件低效,费力的工作。而Mybatis逆向工程实现类直接从数据表带pojo,mapper...等文件的转换,极大提高开发效率。并且这也符合软件开发的流程,一般情况,软件开发过程中数据表在需求设计阶段就已经设计好了,到具体实现阶段我们自然就可以通过设计的表来构建项目中的基础部分。
逆向工程,使用Maven
需要至少三样依赖:
mybatis,mybatis-generator-core,mysql-connector
log4j 日志查看(非必须)
1.Maven配置
<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>com.ncs</groupId>
<artifactId>MybatisGenerator</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!--mybati框架 -->
<mybatis>3.5.0</mybatis>
<!--log4j -->
<log4j>1.2.17</log4j>
<!--mysql-conn -->
<mysql-connector>6.0.2</mysql-connector>
<!--mybatis-generator-core -->
<mybatis-generator-core>1.3.7</mybatis-generator-core>
</properties>
<dependencies>
<!--Mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis}</version>
</dependency>
<!--mybatis-generator -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>${mybatis-generator-core}</version>
</dependency>
<!--mysql数据库连接驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector}</version>
</dependency>
<!-- log4j日志 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j}</version>
</dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.2</version>
</dependency>
</dependencies>
<!--配置文件的路径 -->
<!--<configuration>
<configurationFile>${basedir}/src/main/resources/generatorConfig.xml</configurationFile>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>-->
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
2.日志配置:
# Global logging configuration
#注意如果是开发环境日志级别需要配置为DEBUG,生产环境设置为info或error
#log4j.rootLogger=DEBUG, stdout
#代表root节点整个工程下所有输出日志的地方配置的输出的级别和输出的位置
log4j.rootLogger=DEBUG, CONSOLE
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# Console output...
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
# stdout output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
3.MybatisGenerator配置文件配置generatorConfig.xml
配置参考:http://www.mybatis.org/generator/configreference/xmlconfig.html
在classpath路径下配置 配置文件
<?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="test" targetRuntime="MyBatis3">
<plugin
type="org.mybatis.generator.plugins.EqualsHashCodePlugin"></plugin>
<plugin type="org.mybatis.generator.plugins.SerializablePlugin"></plugin>
<plugin type="org.mybatis.generator.plugins.ToStringPlugin"></plugin>
<commentGenerator>
<!-- 这个元素用来去除指定生成的注释中是否包含生成的日期 false:表示保护 -->
<!-- 如果生成日期,会造成即使修改一个字段,整个实体类所有属性都会发生变化,不利于版本控制,所以设置为true -->
<property name="suppressDate" value="true" />
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="false" />
</commentGenerator>
<!--mysql数据库 -->
<!--数据库链接URL,用户名、密码 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mydb?charset=utf8&serverTimezone=UTC&useSSL=false"
userId="root" password="root">
</jdbcConnection>
<!-- Oracle数据库 <jdbcConnection driverClass="oracle.jdbc.OracleDriver" connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:yycg"
userId="yycg" password="yycg"> </jdbcConnection> -->
<javaTypeResolver>
<!-- 默认为false,把JDBC DECIMAL 和NUMERIC类型解析为Integer,为true时 把JDBC DECIMAL
和NUMERIC类型解析为java.math.BigDecimal -->
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- 生成模型的包名和位置 -->
<javaModelGenerator targetPackage="com.ncs.pojo"
targetProject=".\src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- 生成映射文件的包名和位置 -->
<sqlMapGenerator targetPackage="com.ncs.mapper"
targetProject=".\src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- 生成DAO的包名和位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.ncs.dao" implementationPackage="com.test.dao.impl"
targetProject=".\src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 要生成哪些表 -->
<table schema="" tableName="user"></table>
<table schema="" tableName="orderform"></table>
<table schema="" tableName="orderdetails"></table>
<table schema="" tableName="commodity"></table>
<!-- 有些表的字段需要指定java类型 -->
<!-- <table schema="DB2ADMIN" tableName="ALLTYPES" domainObjectName="Customer"
> <property name="useActualColumnNames" value="true"/> <generatedKey column="ID"
sqlStatement="DB2" identity="true" /> <columnOverride column="DATE_FIELD"
property="startDate" /> <ignoreColumn column="FRED" /> <columnOverride column="LONG_VARCHAR_FIELD"
jdbcType="VARCHAR" /> </table> -->
</context>
</generatorConfiguration>
4.GeneratorSqlmap.java 加载类
加载generatorConfig.xml配置文件
public class GeneratorSqlmap {
public void generator() throws Exception {
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
// 指定配置文件
URL url = GeneratorSqlmap.class.getClassLoader().getResource("generatorConfig.xml");
File configFile = new File(url.getFile());
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);
}
// 执行main方法以生成代码
public static void main(String[] args) {
try {
GeneratorSqlmap generatorSqlmap = new GeneratorSqlmap();
generatorSqlmap.generator();
} catch (Exception e) {
e.printStackTrace();
}
}
}
5. Refresh项目,pojo,mapper..已经自动生成
6.注意事项
mybatis使用逆向工程,数据库建表的字段user_id必须用下滑线隔开,这样生成的对象private LonguserId;mapper.xml文件也会自动换成大写
当数据库中的字段是text类型时,使用mybatis逆向工程要在generatorConfig.xml配置文件中修改
7.补充
使用eclipse插件,在eclipse程点击Help ----> Eclipse Marketplace,然后搜索"mybatis" 安装Mybatis Generator插件
用户就可以直接通过eclipse快速构建Mybatis逆向工程