逆向代理:在数据表结构的基础上,自动生成对应的Pojo.java,Mapper.java和Mapper.xml文件。

实现步骤:

1.在pom.xml中添加dependence

1 <!--mybatis.generator-->
2 <dependency>
3     <groupId>org.mybatis.generator</groupId>
4     <artifactId>mybatis-generator-core</artifactId>
5     <version>1.3.5</version>
6 </dependency>    

2.在util包下创建OverIsMergeablePlugin.java

MybatisGenerator插件是Mybatis官方提供的,这个插件存在一个固有的Bug,即当第一次生成了Mapper.xml之后,再次运行会导致Mapper.xml生成重复内容,而影响正常的运行。故创建一插件类来解决此问题。

 1 public class OverIsMergeablePlugin extends PluginAdapter {
 2     @Override
 3     public boolean validate(List<String> warnings) {
 4         return true;
 5     }
 6
 7     @Override
 8     public boolean sqlMapGenerated(GeneratedXmlFile sqlMap, IntrospectedTable introspectedTable) {
 9         try {
10             Field field = sqlMap.getClass().getDeclaredField("isMergeable");
11             field.setAccessible(true);
12             field.setBoolean(sqlMap, false);
13         } catch (Exception e) {
14             e.printStackTrace();
15         }
16         return true;
17     }
18 }

3.在resouces下创建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
 7     <context id="DB2Tables" targetRuntime="MyBatis3">
 8         <!--避免生成重复代码的插件-->
 9         <plugin type="com.juzileon.util.OverIsMergeablePlugin"/>
10
11         <!--是否在代码中显示注释-->
12         <commentGenerator>
13             <property name="suppressDate" value="true"/>
14             <property name="suppressAllComments" value="true"/>
15         </commentGenerator>
16
17         <!--数据库链接地址账号密码-->
18         <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost/yourdatabase"
19                         userId="root" password="root">
20         </jdbcConnection>
21
22         <javaTypeResolver>
23             <property name="forceBigDecimals" value="false"/>
24         </javaTypeResolver>
25
26         <!--生成pojo类存放位置-->
27         <javaModelGenerator targetPackage="com.juzileon.pojo" targetProject="src/main/java">
28             <property name="enableSubPackages" value="true"/>
29             <property name="trimStrings" value="true"/>
30         </javaModelGenerator>
31
32         <!--生成xml映射文件存放位置-->
33         <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
34             <property name="enableSubPackages" value="true"/>
35         </sqlMapGenerator>
36
37         <!--生成mapper类存放位置-->
38         <javaClientGenerator type="XMLMAPPER" targetPackage="com.juzileon.mapper" targetProject="src/main/java">
39             <property name="enableSubPackages" value="true"/>
40         </javaClientGenerator>
41
42         <!--生成对应表及类名-->
43         <table tableName="user_" domainObjectName="User" enableCountByExample="false"
44                enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="true"
45                selectByExampleQueryId="false">
46             <property name="my.isgen.usekeys" value="true"/>
47             <property name="useActualColumnNames" value="true"/>
48             <generatedKey column="id" sqlStatement="JDBC"/>
49         </table>
50
51     </context>
52 </generatorConfiguration>

4.生成MybatisGenerator

 1 public class MybatisGenerator {
 2
 3     public static void main(String[] args) throws Exception {
 4         String today = "2018-05-23";
 5
 6         SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd");
 7         Date now =sdf.parse(today);
 8         Date d = new Date();
 9
10         if(d.getTime()>now.getTime()+1000*60*60*24){
11             System.err.println("——————未成成功运行——————");
12             System.err.println("——————未成成功运行——————");
13             System.err.println("本程序具有破坏作用,应该只运行一次,如果必须要再运行,需要修改today变量为今天,如:" + sdf.format(new Date()));
14             return;
15         }
16
17         if(false)
18             return;
19         List<String> warnings = new ArrayList<String>();
20         boolean overwrite = true;
21         InputStream is= MybatisGenerator.class.getClassLoader().getResource("generatorConfig.xml").openStream();
22         ConfigurationParser cp = new ConfigurationParser(warnings);
23         Configuration config = cp.parseConfiguration(is);
24         is.close();
25         DefaultShellCallback callback = new DefaultShellCallback(overwrite);
26         MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
27         myBatisGenerator.generate(null);
28
29         System.out.println("生成代码成功,只能执行一次,以后执行会覆盖掉mapper,pojo,xml 等文件上做的修改");
30
31     }
32 }

5.运行MybatisGenerator

执行会覆盖掉mapper,pojo,xml 等文件上做的修改。必须把today变量修改为今天才可以执行,以免不小心运行了MybatisGenerator 导致原有代码被覆盖。

转载于:https://www.cnblogs.com/leirocks/p/9075479.html

Mybatis-实现逆向代理相关推荐

  1. Mybatis非mapper代理配置

    转: Mybatis非mapper代理配置 2017年04月26日 20:13:48 待长的小蘑菇 阅读数:870 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.cs ...

  2. Mybatis的mapper代理开发方法

    一.开发规范 1.映射文件中的namespase等于mapper接口类路径 2.statement的id与mapper中的方法名一致 3.让mapper的接口方法输入参数类型与statement中的p ...

  3. 图解 IDEA 中 springboot 项目 MyBatis Generator 逆向生成实体类及 mapper 配置文件

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 一.准备工作: 1. 新建一个 配置文件:generatorConfig.xml . <?xm ...

  4. 【Java】Mybatis mapper动态代理方式

    前言 我们在使用Mybatis的时候,获取需要执行的SQL语句的时候,都是通过调用xml文件来获取,例如:User user = (User) sqlSession.selectOne("c ...

  5. 02.Mybatis的动态代理方式实现增删改查

    动态代理的方式实现增删改查: 通过约定的方式定位sql语句 约定 > 配置文件 > 硬编码 约定的目标是省略掉通过硬编码的方式定位sql的代码,通过接口直接定位出sql语句,以下代码为通过 ...

  6. Mybatis的Mapper代理

    Mybatis通过jdk所提供的代理方案根据给出的mapper接口以及mapper的xml来实现mapper的代理实现. 当Mybatis正在解析xml配置文件的时候,在解析mapper节点的时候会调 ...

  7. 你有没有想过,在SpringBoot集成下,Mybatis的mapper代理对象究竟是如何生成的?...

    作者:青石路 cnblogs.com/youzhibing/p/10486307.html 前情回顾 之前我们讲到了mybatis操作数据库的流程:先创建SqlSessionFactory,然后创建S ...

  8. Mybatis Mapper动态代理方式 typeAliases 别名的使用

    目录结构及配置文件与原始dao方法相比更简便 只需一个UserMapper的接口,放在一起的配置文件,配置文件中namespace的地址确定jdk动态代理的对象 <?xml version=&q ...

  9. Spring 整合Mybatis Mapper动态代理方法

    先看项目目录结构 很清爽了 最重要的Spring的核心配置文件,看一下 <?xml version="1.0" encoding="UTF-8"?> ...

  10. JavaWeb——Mybatis进阶mapper代理

    一.引言 前篇的文章中没有使用mapper代理的方式,调用方法比较麻烦,造成很多代码重复,所以mybatis在输入输出映射的基础上又添加了mapper代理的配置方式方便使用. 先上张图,这张图是说明m ...

最新文章

  1. pku 1724 ROADS BFS +优先队列
  2. CentOS 7 安装Apache 2.4.39
  3. linux目录怎么自动生成,情景linux--如何快速生成大文件?
  4. 2016 年崛起的 JS 项目
  5. 把数字随机分成 php,php随机数 微信随机生成红包金额算法php版
  6. 【正则化】Label Smoothing详解
  7. Node.js 提升运行效率
  8. flex向java传递 OBJECT
  9. linux bt 命令行,linux命令行bt下载工具
  10. 匿名者黑页html源码,HACK敲代码黑页源码
  11. Exception Details: System.Data.OleDb.OleDbException: 操作必须使用一个可更新的查询。
  12. win10服务器显示图标,Win10专业版桌面图标消失的三种情况及相应解决方法
  13. 以前的java游戏平台_手机游戏平台java游戏经典的五款游戏回顾!
  14. 启动cartographer_ros进行仿真错误process has died exit code -11
  15. 透明位图Ron Gery Microsoft 网络开发技术小组
  16. 太阳能系统容易造成设备短路走火 英研究直流电隔离器为主要原因
  17. RFID服装资产管理-新导智能
  18. PAT 甲级 树(二)
  19. 在使用集合中的contains(),要根据实际情况改写集合中对象的equals(Object obj)方法------改写List集合中equals(Object obj)的方法
  20. ubuntu训练深度学习模型电脑重启解决方法

热门文章

  1. [2] 图像处理之----二值化处理
  2. 图卷积网络(Graph Convolutional Network)
  3. GitHub超详细图文攻略 - Git客户端下载安装 GitHub提交修改源码工作流程 Git分支 标签 过滤 Git版本工作流
  4. 7时过2小时是几时_小姐姐花1万7租了一个2小时男友,全程上演偶像剧......
  5. idhttp返回乱码_node.js http.get请求返回的中文乱码, iconv zlib模块都不好使,求解决!!!...
  6. latex 引用网页 网址 网站 格式
  7. 树分解 宽度 如何分解 算法
  8. 区块链 solidity io密集
  9. 并发控制中存在问题及解决方案
  10. 并发性(concurrency)和并行性(parallel)区别