今天来看看一个经常使用的小功能,就是mybatis的逆向工程。(数据库是mysql)java
什么是逆向工程呢?看名字就知道反方向的一个什么工程!mysql
其实啊,若是是日常咱们本身学习实践一些小项目的时候,应该是先瞎写几张数据库表,而后再打开IDEA或者Eclipse去搭建环境,经过一些和数据库交互的框架去和数据库交互,就好比用mybatis,咱们就要写一个mapper和不少的pojo,还有mybatis.xml配置文件,若是mapper中定义的方法比较多,那么咱们光写一个mybatis.xml就要花很长时间,更不要说要处理一些其余可能因为失误产生的bug。sql
这个时候,就是mybatis逆向工程出马的时候了,能够根据你的数据库表直接产生mapper,pojo,以及每个mapper对应的xml。数据库
注意一点:逆向工程对于全部的mybatis来讲代码都是通用的。api
首先,就是新建一个最基本的java项目,而后复制两个jar包;mybatis
一个配置文件generatorContext.xml,这里主要配置了几个东西:链接数据库的基本信息,指定生成pojo的包名,指定生成mapper的包名,指定数据库表的表名;因此咱们本身要根据本身的实际状况就是根据前面所说的四个东西本身修改一下就ok了,其余的不用动。oracle
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE generatorConfiguration 3 PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" 4 "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> 5 6 <generatorConfiguration> 7 <context id="testTables" targetRuntime="MyBatis3"> 8 <commentGenerator> 9 <!-- 是否去除自动生成的注释 true:是 : false:否 --> 10 <property name="suppressAllComments" value="true" /> 11 </commentGenerator> 12 <!--数据库链接的信息:驱动类、链接地址、用户名、密码 --> 13 <jdbcConnection driverClass="com.mysql.jdbc.Driver" 14 connectionURL="jdbc:mysql://localhost:3306/myitem" userId="root" 15 password="123456"> 16 </jdbcConnection> 17 18 <!-- <jdbcConnection driverClass="oracle.jdbc.OracleDriver" connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:yycg" 19 userId="yycg" password="yycg"> </jdbcConnection> --> 20 21 <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 22 和 NUMERIC 类型解析为java.math.BigDecimal --> 23 <javaTypeResolver> 24 <property name="forceBigDecimals" value="false" /> 25 </javaTypeResolver> 26 27 <!-- targetProject:生成PO类的位置 --> 28 <javaModelGenerator targetPackage="com.wyq.generator.domain" 29 targetProject=".\src"> 30 <!-- enableSubPackages:是否让schema做为包的后缀 --> 31 <property name="enableSubPackages" value="false" /> 32 <!-- 从数据库返回的值被清理先后的空格 --> 33 <property name="trimStrings" value="true" /> 34 </javaModelGenerator> 35 <!-- targetProject:mapper映射文件生成的位置 --> 36 <sqlMapGenerator targetPackage="com.wyq.generator.mapper" 37 targetProject=".\src"> 38 <!-- enableSubPackages:是否让schema做为包的后缀 --> 39 <property name="enableSubPackages" value="false" /> 40 </sqlMapGenerator> 41 <!-- targetPackage:mapper接口生成的位置 --> 42 <javaClientGenerator type="XMLMAPPER" 43 targetPackage="com.wyq.generator.mapper" targetProject=".\src"> 44 <!-- enableSubPackages:是否让schema做为包的后缀 --> 45 <property name="enableSubPackages" value="false" /> 46 </javaClientGenerator> 47 <!-- 指定数据库表 --> 48 <table tableName="tb_content"></table> 49 <table tableName="tb_content_category"></table> 50 <table tableName="tb_item"></table> 51 <table tableName="tb_item_cat"></table> 52 <table tableName="tb_item_desc"></table> 53 <table tableName="tb_item_param"></table> 54 <table tableName="tb_item_param_item"></table> 55 <table tableName="tb_order"></table> 56 <table tableName="tb_order_item"></table> 57 <table tableName="tb_order_shipping"></table> 58 <table tableName="tb_user"></table> 59 </context> 60 </generatorConfiguration>
而后随便写一个类,类里面只有一个main方法,加载这个generatorContext.xml就能够了。app
1 package com.wyq.generator; 2 3 import java.io.File; 4 import java.util.ArrayList; 5 import java.util.List; 6 7 import org.mybatis.generator.api.MyBatisGenerator; 8 import org.mybatis.generator.config.xml.ConfigurationParser; 9 import org.mybatis.generator.internal.DefaultShellCallback; 10 11 public class MyGenerator { 12 13 public static void main(String[] args) throws Exception { 14 List<String> warnings = new ArrayList<String>(); 15 boolean overwrite = true; 16 File configFile = new File("generatorConfig.xml"); 17 ConfigurationParser cp = new ConfigurationParser(warnings); 18 org.mybatis.generator.config.Configuration config = cp.parseConfiguration(configFile); 19 DefaultShellCallback callback = new DefaultShellCallback(overwrite); 20 MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings); 21 myBatisGenerator.generate(null); 22 System.out.println("heheheheh"); 23 24 } 25 26 }
再运行就能够了,可能控制台啥也没有,最好本身随便添加打印语句能够看到效果!框架
这里注意几点:dom
第一:逆向工程只能运行一次,运行第二次要报错,若是要运行第二次,那么就把刚刚生成的mapper和pojo所有删除,再运行
第二:运行以后目录那里啥也没有,须要你本身去刷新一下才能看到接口和pojo类(右键项目点击ReFresh或者直接F5都行)。
第三:生成的mapper接口会报错,其实这不是问题,缘由是缺乏mybatis的核心依赖jar包,对于咱们的目的没有多大影响。