Mybatis之逆向工程

匿名 (未验证) 提交于 2019-12-03 00:25:02

转载自《mybatis学习笔记(18)-mybatis逆向工程》

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

官网链接

maven中央仓库MyBatis-Generator,下载地址:《mybatis-generator-core》

根据官网说的(Running MyBatis Generator):

Running MyBatis Generator

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

  • From the command prompt with an XML configuration
  • As an Ant task with an XML configuration
  • As a Maven Plugin
  • From another Java program with an XML configuration
  • From another Java program with a Java based configuration

还可以通过eclipse的插件生成代码

建议使用java程序方式,不依赖开发工具。

<?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://localhost:3306/mybatis01"              userId="root"              password="root">         </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="com.zyj.ms.po"             targetProject=".\src">             <!-- enableSubPackages:是否让schema作为包的后缀 -->             <property name="enableSubPackages" value="false" />             <!-- 从数据库返回的值被清理前后的空格 -->             <property name="trimStrings" value="true" />         </javaModelGenerator>         <!-- targetProject:mapper映射文件生成的位置 -->         <sqlMapGenerator targetPackage="com.zyj.ms.mapper"             targetProject=".\src">             <!-- enableSubPackages:是否让schema作为包的后缀 -->             <property name="enableSubPackages" value="false" />         </sqlMapGenerator>         <!-- targetPackage:mapper接口生成的位置 -->         <javaClientGenerator type="XMLMAPPER"             targetPackage="com.zyj.ms.mapper" targetProject=".\src">             <!-- enableSubPackages:是否让schema作为包的后缀 -->             <property name="enableSubPackages" value="false" />         </javaClientGenerator>         <!-- 指定数据库表 -->         <table tableName="items"></table>         <table tableName="orders"></table>         <table tableName="orderdetail"></table>         <table tableName="user"></table>     </context> </generatorConfiguration>

需要注意的位置:

  • javaModelGenerator,生成PO类的位置
  • sqlMapGenerator,mapper映射文件生成的位置
  • javaClientGenerator,mapper接口生成的位置
  • table,指定数据库表
public class Generator {     public static void main(String[] args) throws Exception {         List<String> warnings = new ArrayList<String>();         boolean overwrite = true;         File configFile = new File("config/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);     } } 

需要将生成工程中所生成的代码拷贝到自己的工程中。 

测试ItemsMapper中的方法

public class ItemsMapperTest {      private ApplicationContext applicationContext;     private ItemsMapper itemsMapper;      //在setUp这个方法得到spring容器     @Before     public void setUp() throws Exception {         applicationContext = new ClassPathXmlApplicationContext("spring/applicationContext.xml");         itemsMapper = (ItemsMapper) applicationContext.getBean("itemsMapper");     }      //根据主键删除      @Test     public void testDeleteByPrimaryKey() {      }      //插入     @Test     public void testInsert() {         //构造 items对象         Items items = new Items();         items.setName("手机");         items.setPrice(999f);         items.setCreatetime(new Date());         itemsMapper.insert(items);     }      //自定义条件查询     @Test     public void testSelectByExample() {         ItemsExample itemsExample = new ItemsExample();         //通过criteria构造查询条件         ItemsExample.Criteria criteria = itemsExample.createCriteria();         criteria.andNameEqualTo("笔记本");         //可能返回多条记录         List<Items> list = itemsMapper.selectByExample(itemsExample);          System.out.println(list);      }      //根据主键查询     @Test     public void testSelectByPrimaryKey() {         Items items = itemsMapper.selectByPrimaryKey(1);         System.out.println(items);     }      //更新数据     @Test     public void testUpdateByPrimaryKey() {          //对所有字段进行更新,需要先查询出来再更新         Items items = itemsMapper.selectByPrimaryKey(1);          items.setName("手机");          itemsMapper.updateByPrimaryKey(items);         //如果传入字段不空为才更新,在批量更新中使用此方法,不需要先查询再更新         //itemsMapper.updateByPrimaryKeySelective(record);     } }
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!