逆向工程

1.什么是逆向工程

mybaits需要程序员自己编写sql语句,mybatis官方提供逆向工程 可以针对单表自动生成mybatis执行所需要的代码(mapper.java,mapper.xml、po..)

企业实际开发中,常用的逆向工程方式:
由于数据库的表生成java代码。

2.下载逆向工程
mybatis-generator-core-1.3.2-bundle.zip

3.使用方法(会用)

3.1运行逆向工程 
官方文档中提供的运行逆向工程的几种方法
Running MyBatis Generator

MyBatis Generator (MBG) can be run in the following ways:

(1)From the command prompt with an XML configuration
(2)As an Ant task with an XML configuration
(3)As a Maven Plugin
(4)From another Java program with an XML configuration
(5)From another Java program with a Java based configuration
(6)还可以通过eclipse的插件生成代码

建议使用java程序方式(From another Java program with an XML configuration),不依赖开发工具。

下面创建一个生成逆向文件的工程,将自动生成的文件再拷贝到原工程中去(这么做是为了放止直接在源文件中生成会覆盖掉同名文件)
导入的jar包和工程结构截图如下:

如图

3.2生成代码配置文件
generatorConfig.xml:

  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. <generatorConfiguration>
  6. <context id="testTables" targetRuntime="MyBatis3">
  7. <commentGenerator>
  8. <!-- 是否去除自动生成的注释 true:是 : false:否 -->
  9. <property name="suppressAllComments" value="true" />
  10. </commentGenerator>
  11. <!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
  12. <jdbcConnection driverClass="com.mysql.jdbc.Driver"
  13. connectionURL="jdbc:mysql://localhost:3306/mybatis" userId="root"
  14. password="1234">
  15. </jdbcConnection>
  16. <!-- <jdbcConnection driverClass="oracle.jdbc.OracleDriver"
  17. connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:yycg"
  18. userId="yycg"
  19. password="yycg">
  20. </jdbcConnection> -->
  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. <!-- targetProject:生成PO类的位置 -->
  27. <javaModelGenerator targetPackage="cn.edu.hpu.ssm.po"
  28. targetProject=".\src">
  29. <!-- enableSubPackages:是否让schema作为包的后缀 -->
  30. <property name="enableSubPackages" value="false" />
  31. <!-- 从数据库返回的值被清理前后的空格 -->
  32. <property name="trimStrings" value="true" />
  33. </javaModelGenerator>
  34. <!-- targetProject:mapper映射文件生成的位置 -->
  35. <sqlMapGenerator targetPackage="cn.edu.hpu.ssm.mapper"
  36. targetProject=".\src">
  37. <!-- enableSubPackages:是否让schema作为包的后缀 -->
  38. <property name="enableSubPackages" value="false" />
  39. </sqlMapGenerator>
  40. <!-- targetPackage:mapper接口生成的位置 -->
  41. <javaClientGenerator type="XMLMAPPER"
  42. targetPackage="cn.edu.hpu.ssm.mapper"
  43. targetProject=".\src">
  44. <!-- enableSubPackages:是否让schema作为包的后缀 -->
  45. <property name="enableSubPackages" value="false" />
  46. </javaClientGenerator>
  47. <!-- 指定数据库表 -->
  48. <table tableName="items"></table>
  49. <table tableName="orders"></table>
  50. <table tableName="orderdetail"></table>
  51. <table tableName="user"></table>
  52. <!-- <table schema="" tableName="sys_user"></table>
  53. <table schema="" tableName="sys_role"></table>
  54. <table schema="" tableName="sys_permission"></table>
  55. <table schema="" tableName="sys_user_role"></table>
  56. <table schema="" tableName="sys_role_permission"></table> -->
  57. <!-- 有些表的字段需要指定java类型
  58. <table schema="" tableName="">
  59. <columnOverride column="" javaType="" />
  60. </table> -->
  61. </context>
  62. </generatorConfiguration>

3.3执行生成程序
GeneratorSqlmap.java:

  1. import java.io.File;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import org.mybatis.generator.api.MyBatisGenerator;
  5. import org.mybatis.generator.config.Configuration;
  6. import org.mybatis.generator.config.xml.ConfigurationParser;
  7. import org.mybatis.generator.internal.DefaultShellCallback;
  8. public class GeneratorSqlmap {
  9. public void generator() throws Exception{
  10. List<String> warnings = new ArrayList<String>();
  11. boolean overwrite = true;
  12. //加载配置文件
  13. File configFile = new File("generatorConfig.xml");
  14. ConfigurationParser cp = new ConfigurationParser(warnings);
  15. Configuration config = cp.parseConfiguration(configFile);
  16. DefaultShellCallback callback = new DefaultShellCallback(overwrite);
  17. MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,
  18. callback, warnings);
  19. myBatisGenerator.generate(null);
  20. }
  21. public static void main(String[] args) throws Exception {
  22. try {
  23. GeneratorSqlmap generatorSqlmap = new GeneratorSqlmap();
  24. generatorSqlmap.generator();
  25. } catch (Exception e) {
  26. e.printStackTrace();
  27. }
  28. }
  29. }

生成后的代码:

如图

3.4使用生成的代码

需要将生成工程中所生成的代码拷贝到自己的工程中。我们这里吧ItemsMapper.java和ItemsMapper.xml、Items、ItemsExample类拷入我们的原工程。

测试ItemsMapper中的方法

  1. package cn.edu.hpu.ssm.test;
  2. import static org.junit.Assert.fail;
  3. import java.util.Date;
  4. import java.util.List;
  5. import org.junit.Before;
  6. import org.junit.Test;
  7. import org.springframework.context.ApplicationContext;
  8. import org.springframework.context.support.ClassPathXmlApplicationContext;
  9. import cn.edu.hpu.ssm.mapper.ItemsMapper;
  10. import cn.edu.hpu.ssm.po.Items;
  11. import cn.edu.hpu.ssm.po.ItemsExample;
  12. public class ItemsMapperTest {
  13. private ApplicationContext applicationContext;
  14. private ItemsMapper itemsMapper;
  15. //注解Before是在执行本类所有测试方法之前先调用这个方法
  16. @Before
  17. public void setup() throws Exception{
  18. applicationContext=new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");
  19. itemsMapper=(ItemsMapper)applicationContext.getBean("itemsMapper");
  20. }
  21. //根据主键删除
  22. @Test
  23. public void testDeleteByPrimaryKey() {
  24. fail("Not yet implemented");
  25. }
  26. //插入
  27. @Test
  28. public void testInsert() {
  29. Items items=new Items();
  30. items.setName("iPhone-5S");
  31. items.setPrice(3999f);
  32. items.setDetail("正品行货");
  33. items.setPic("sdasd.jpg");
  34. items.setCreatetime(new Date());
  35. itemsMapper.insert(items);
  36. }
  37. //自定义条件来查询
  38. @Test
  39. public void testSelectByExample() {
  40. ItemsExample itemsExample=new ItemsExample();
  41. //通过Criteria构造查询条件
  42. ItemsExample.Criteria criteria=itemsExample.createCriteria();
  43. criteria.andNameEqualTo("电视机");
  44. //可能返回多条记录
  45. List<Items> list=itemsMapper.selectByExample(itemsExample);
  46. for (int i = 0; i < list.size(); i++) {
  47. Items it=list.get(i);
  48. System.out.println(it.getId()+":"+it.getName());
  49. }
  50. }
  51. //根据主键来查询
  52. @Test
  53. public void testSelectByPrimaryKey() {
  54. Items items=itemsMapper.selectByPrimaryKey(1);
  55. System.out.println(items.getName());
  56. }
  57. //更新数据
  58. @Test
  59. public void testUpdateByPrimaryKey() {
  60. //对所有字段进行更新,需要先查询出来再更新
  61. Items items = itemsMapper.selectByPrimaryKey(1);
  62. items.setName("iPhone");
  63. itemsMapper.updateByPrimaryKey(items);
  64. //如果传入字段不空为才更新,在批量更新中使用此方法,不需要先查询再更新
  65. //itemsMapper.updateByPrimaryKeySelective(record);
  66. }
  67. }

逆向工程的创建和使用就讲解到这里

转载请注明出处:http://blog.csdn.net/acmman/article/details/46906871

最新文章

  1. ThreadLocal 源码剖析
  2. Java 的设计模式之一装饰者模式
  3. 【mysql】关于乐观锁
  4. 第一零五天上课 PHP TP框架下分页
  5. 【Xamarin报错】 COMPILETODALVIK : UNEXPECTED TOP-LEVEL error java.lang.OutOfMemoryError: Java heap space
  6. Contiki学习入门之概览
  7. .htaccess文件的详解以及404页面的设置
  8. ffmpeg编解码音频AAC
  9. Swift中可能失败的构造器的传播(调用)和重写
  10. Oracle EBS-SQL (SYS-22):sysadmin_用户职责查询.sql
  11. 07_jquery入门第一天
  12. 元组tuple插入字符串的方式
  13. java.sql.SQLException: Access denied for user &#39;scott&#39;@&#39;localhost&#39; (using password: YES)
  14. 2019-03-06-day005-字典操作
  15. HDU - 5201 :The Monkey King (组合数 &amp; 容斥)
  16. bzoj千题计划201:bzoj1820: [JSOI2010]Express Service 快递服务
  17. 微信小程序 - 超出文字省略组件
  18. Bootstrap3-文字样式
  19. SNMP学习笔记之SNMP TRAP简介、流程以及使用Python实现接受Trap信息
  20. 使用for in循环遍历json对象的数据

热门文章

  1. jQuery和AngularJS的区别
  2. UVa437,The Tower of Babylon
  3. C#使用互斥量(Mutex)实现多进程并发操作时进程间的同步操作(进程同步)
  4. js 关于性能的数据存储
  5. visual studio no editoroptiondefinition export found for the given option nam
  6. Vue和React对比
  7. Azure环境中Nginx高可用性和部署架构设计
  8. Python数据库查询之组合条件查询-F&amp;Q查询
  9. 关于docker使用的几个小问题(一)
  10. CTS/GTS 常见问题解答