Mybatis学习笔记(十五)——逆向工程
2018-03-25 21:41
387 查看
本博客源码下载:戳我一下
Mybatis学习笔记汇总:戳我一下
一、什么是逆向工程
mybaits需要程序员自己编写sql语句,
mybatis官方提供逆向工程 可以针对单表自动生成
mybatis执行所需要的代码(包括
mapper.xml、
mapper.java、
pojo类)
企业实际开发中,常用的逆向工程方式:
由于数据库的表生成java代码。
二、下载逆向工程:戳我一下
三、配置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://localhost:3306/mybatis" userId="root" password="1234"> </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.jiayifan.ssm.po" targetProject=".\src"> <!-- enableSubPackages:是否让schema作为包的后缀 --> <property name="enableSubPackages" value="false" /> <!-- 从数据库返回的值被清理前后的空格 --> <property name="trimStrings" value="true" /> </javaModelGenerator> <!-- targetProject:mapper映射文件生成的位置 --> <sqlMapGenerator targetPackage="com.jiayifan.ssm.mapper" targetProject=".\src"> <!-- enableSubPackages:是否让schema作为包的后缀 --> <property name="enableSubPackages" value="false" /> </sqlMapGenerator> <!-- targetPackage:mapper接口生成的位置 --> <javaClientGenerator type="XMLMAPPER" targetPackage="com.jiayifan.ssm.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>
四、生成mapper.java
、mapper.xml
、pojo
package com.jiayifan.creat; import java.io.File; import java.util.ArrayList; import java.util.List; import org.junit.Test; import org.mybatis.generator.api.MyBatisGenerator; import org.mybatis.generator.config.Configuration; import org.mybatis.generator.config.xml.ConfigurationParser; import org.mybatis.generator.internal.DefaultShellCallback; public class creatMapper { @Test public void generator() 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); } }
五、生成代码展示
六、测试生成的代码
//自定义条件查询 @Test public void testSelectByExample() { ItemsExample itemsExample = new ItemsExample(); //通过criteria构造查询条件 ItemsExample.Criteria criteria = itemsExample.createCriteria(); criteria.andNameEqualTo("笔记本3"); //可能返回多条记录 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 testInsert() { //构造 items对象 Items items = new Items(); items.setName("手机"); items.setPrice(999f); itemsMapper.insert(items); } //更新数据 @Test public void testUpdateByPrimaryKey() { //对所有字段进行更新,需要先查询出来再更新 Items items = itemsMapper.selectByPrimaryKey(1); items.setName("水杯"); itemsMapper.updateByPrimaryKey(items); //如果传入字段不空为才更新,在批量更新中使用此方法,不需要先查询再更新 //itemsMapper.updateByPrimaryKeySelective(record); }
七、逆向工程注意事项
1、Mapper文件内容不覆盖而是追加
XXXMapper.xml文件已经存在时,如果进行重新生成则
mapper.xml文件内容不被覆盖而是进行内容追加,结果导致
mybatis解析失败。
解决方法:删除原来已经生成的
mapper xml文件再进行生成。
Mybatis自动生成的
pojo及
mapper.java文件不是内容而是直接覆盖没有此问题。
2、
Table schema问题
下边是关于针对
oracle数据库表生成代码的
schema问题:
Schma即数据库模式,
oracle中一个用户对应一个
schema,可以理解为用户就是
schema。
当
Oralce数据库存在多个
schema可以访问相同的表名时,使用
mybatis生成该表的
mapper.xml将会出现
mapper.xml内容重复的问题,结果导致
mybatis解析错误。
解决方法:在
table中填写
schema,如下:
<table schema="XXXX" tableName=" " >
XXXX即为一个
schema的名称,生成后将
mapper.xml的
schema前缀批量去掉,如果不去掉当
oracle用户变更了
sql语句将查询失败。
快捷操作方式:
mapper.xml文件中批量替换:
“from XXXX.”为空
Oracle查询对象的
schema可从
dba_objects中查询,如下:
select * from dba_objects
相关文章推荐
- JavaWeb学习笔记-mybatis-26-逆向工程
- Mybatis学习笔记(三)【入门程序一】
- Mybatis 系列(4)——第一天学习笔记(基础知识)
- mybatis学习笔记
- UnityShader入门精要学习笔记(十五):渲染纹理
- Mybatis学习笔记(十四)【延迟加载】
- spring整合系列学习笔记——springBoot整合mybatis
- Spring 、SpringMVC、Mybatis、MySQL、Maven、Tomcat搭建JavaWeb项目流程---学习笔记(一)工具准备及环境配置
- Android 学习笔记(十五):Activity-GalleryView
- nginx 源码学习笔记(十五)—— ngx_master_process_cycle 多进程(一)
- 2、MyBatis.NET学习笔记-之CodeSmith使用
- python学习笔记(十五) - ORM框架(SQLAlchemy)
- Java菜鸟学习笔记--面向对象篇(十五):Wrapper Class包装类
- mybatis-spring 学习笔记之简介与入门
- mybatis学习笔记 (部分资源来自网络)
- Mybatis学习笔记--(一)Mybatis基础
- mybatis学习笔记二(实现数据的增删改查)
- 步步为营 .NET 设计模式学习笔记 十五、Composite(组合模式)
- MyBatis日志之Log4j示例——MyBatis学习笔记之十
- java学习笔记(十五)