一、介绍:
我们做WEB开发,现在常用的ORM框架,如Mybatis,Hibernate等,现在较为常用的是Mybatis,不是因为Hibernate不好,在某些意义下Hibernate要比Mybatis要好,比如Hibernate的HQL语言,他进行数据库操作使用的非数据库对应的查询语言而是自己的一套语言HQL,只要你在配置文件中配置对应数据库信息,它自动转为对应数据库的语言,这样如果在开发时和部署上线时的数据库不一样,就只需要修改配置文件即可,不需要修改SQL。话不扯远,既然大家现在推崇Mybatis,咱也不能不随大流,毕竟咱可能涉及二次开发对吧。
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。
上面是Mybatis的介绍,但是什么是逆向工程呢?这么来理解吧。我们设计完ER图就要设计数据库,设计完数据库就会需要设置对应实体类,对应实体类写完又要写对应的Mapper接口,写完接口要写对应的映射文件。好了,这么多工作要做,真累呀。那么问题来了,我们很多事得重复操作,比如:基础的增删改查,这些单表操作,都是傻瓜式操作对吧。这种一尘不变的套模板的操作,咱Mybatis也会做,所以,对于单表操作,生成基础实体类和映射问题,逆向工程直接帮我们写完。
二、逆向工程使用,生产基础文件,以MySQL为例:
项目目录结构:
GeneratorSqlmap.java使用IO留读取配置文件信息,并生成对应实体类,接口,映射文件:
public class GeneratorSqlmap {
public void generator() throws Exception{
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
File configFile = new File("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);
}
public static void main(String[] args) throws Exception {
try {
GeneratorSqlmap generatorSqlmap = new GeneratorSqlmap();
generatorSqlmap.generator();
} catch (Exception e) {
e.printStackTrace();
}
}
}
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">
<generatorConfiguration>
<context id="testTables" targetRuntime="MyBatis3">
<commentGenerator>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://127.0.0.1:3306/blog" userId="root"
password="123456">
</jdbcConnection>
<!-- <jdbcConnection driverClass="oracle.jdbc.OracleDriver"
connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:yycg"
userId="yycg"
password="yycg">
</jdbcConnection> -->
<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和
NUMERIC 类型解析为java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- targetProject:生成PO类的位置 -->
<javaModelGenerator targetPackage="cn.org.easycoding.entity"
targetProject=".\src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- targetProject:mapper映射文件生成的位置 -->
<sqlMapGenerator targetPackage="cn.org.easycoding.mapper"
targetProject=".\src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- targetPackage:mapper接口生成的位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="cn.org.easycoding.mapper"
targetProject=".\src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 指定数据库表 -->
<table schema="" tableName="blog_article"></table>
<!-- 有些表的字段需要指定java类型
<table schema="" tableName="">
<columnOverride column="" javaType="person" />
</table> -->
</context>
</generatorConfiguration>
运行java文件后会找到对应的数据库,读取字段信息并生成基础文件:
只需要修改xml文件就可以对应不同的数据库或者对应的表。