Mybatis-实现逆向代理
逆向代理:在数据表结构的基础上,自动生成对应的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-实现逆向代理相关推荐
- Mybatis非mapper代理配置
转: Mybatis非mapper代理配置 2017年04月26日 20:13:48 待长的小蘑菇 阅读数:870 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.cs ...
- Mybatis的mapper代理开发方法
一.开发规范 1.映射文件中的namespase等于mapper接口类路径 2.statement的id与mapper中的方法名一致 3.让mapper的接口方法输入参数类型与statement中的p ...
- 图解 IDEA 中 springboot 项目 MyBatis Generator 逆向生成实体类及 mapper 配置文件
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 一.准备工作: 1. 新建一个 配置文件:generatorConfig.xml . <?xm ...
- 【Java】Mybatis mapper动态代理方式
前言 我们在使用Mybatis的时候,获取需要执行的SQL语句的时候,都是通过调用xml文件来获取,例如:User user = (User) sqlSession.selectOne("c ...
- 02.Mybatis的动态代理方式实现增删改查
动态代理的方式实现增删改查: 通过约定的方式定位sql语句 约定 > 配置文件 > 硬编码 约定的目标是省略掉通过硬编码的方式定位sql的代码,通过接口直接定位出sql语句,以下代码为通过 ...
- Mybatis的Mapper代理
Mybatis通过jdk所提供的代理方案根据给出的mapper接口以及mapper的xml来实现mapper的代理实现. 当Mybatis正在解析xml配置文件的时候,在解析mapper节点的时候会调 ...
- 你有没有想过,在SpringBoot集成下,Mybatis的mapper代理对象究竟是如何生成的?...
作者:青石路 cnblogs.com/youzhibing/p/10486307.html 前情回顾 之前我们讲到了mybatis操作数据库的流程:先创建SqlSessionFactory,然后创建S ...
- Mybatis Mapper动态代理方式 typeAliases 别名的使用
目录结构及配置文件与原始dao方法相比更简便 只需一个UserMapper的接口,放在一起的配置文件,配置文件中namespace的地址确定jdk动态代理的对象 <?xml version=&q ...
- Spring 整合Mybatis Mapper动态代理方法
先看项目目录结构 很清爽了 最重要的Spring的核心配置文件,看一下 <?xml version="1.0" encoding="UTF-8"?> ...
- JavaWeb——Mybatis进阶mapper代理
一.引言 前篇的文章中没有使用mapper代理的方式,调用方法比较麻烦,造成很多代码重复,所以mybatis在输入输出映射的基础上又添加了mapper代理的配置方式方便使用. 先上张图,这张图是说明m ...
最新文章
- pku 1724 ROADS BFS +优先队列
- CentOS 7 安装Apache 2.4.39
- linux目录怎么自动生成,情景linux--如何快速生成大文件?
- 2016 年崛起的 JS 项目
- 把数字随机分成 php,php随机数 微信随机生成红包金额算法php版
- 【正则化】Label Smoothing详解
- Node.js 提升运行效率
- flex向java传递 OBJECT
- linux bt 命令行,linux命令行bt下载工具
- 匿名者黑页html源码,HACK敲代码黑页源码
- Exception Details: System.Data.OleDb.OleDbException: 操作必须使用一个可更新的查询。
- win10服务器显示图标,Win10专业版桌面图标消失的三种情况及相应解决方法
- 以前的java游戏平台_手机游戏平台java游戏经典的五款游戏回顾!
- 启动cartographer_ros进行仿真错误process has died exit code -11
- 透明位图Ron Gery Microsoft 网络开发技术小组
- 太阳能系统容易造成设备短路走火 英研究直流电隔离器为主要原因
- RFID服装资产管理-新导智能
- PAT 甲级 树(二)
- 在使用集合中的contains(),要根据实际情况改写集合中对象的equals(Object obj)方法------改写List集合中equals(Object obj)的方法
- ubuntu训练深度学习模型电脑重启解决方法
热门文章
- [2] 图像处理之----二值化处理
- 图卷积网络(Graph Convolutional Network)
- GitHub超详细图文攻略 - Git客户端下载安装 GitHub提交修改源码工作流程 Git分支 标签 过滤 Git版本工作流
- 7时过2小时是几时_小姐姐花1万7租了一个2小时男友,全程上演偶像剧......
- idhttp返回乱码_node.js http.get请求返回的中文乱码, iconv zlib模块都不好使,求解决!!!...
- latex 引用网页 网址 网站 格式
- 树分解 宽度 如何分解 算法
- 区块链 solidity io密集
- 并发控制中存在问题及解决方案
- 并发性(concurrency)和并行性(parallel)区别