本文以Spring整合MyBatis环境下,介绍MyBatis逆向工程自动生成pojo,mapper,dao的Java类。MyBatis的一个主要的特点就是需要程序员自己编写sql,那么如果表太多的话,难免会很麻烦,所以mybatis官方提供了一个逆向工程,可以针对单表自动生成mybatis执行所需要的代码,一般在开发中,常用的逆向工程方式是通过数据库的表生成代码。下图为逆向工程依赖的jar包。

mybatis-generator-core-1.3.6.jar为逆向工程的核心包

mysql-connector-java-8.0.9-rc.jar为连接数据库所需驱动

mybatis-3.4.6.jar为mybatis框架依赖的jar包,到这里就足够了,这里可以添加日志文件,因为不是必须的所以就省略了,我们只需要上面三个包就可以使用mybatis的逆向工程了。下面看一下它依赖的配置文件。

这是配置文件的存放位置,一定要放在项目的根目录下,不要方法src下,因为一会用到File来加载这个配置文件。

下有个

标签,该标签value为true的时候不显示生成pojo里面的注释,这里生成的是英文注释,所以默认选择为true即可。标签需要创建connection对象基本的url,user,password,driverClass四个属性,按照图中格式配置即可。被注释掉的部分是链接oracle数据库的格式

标签用于将数据库中的DECIMAL和NUMERIC在pojo类中解析为java.math.BigDecimal类型,所以我们这里写false,全部解析为Integer类型。

这里的三个标签用于指定生成的mapper,pojo,与mapper接口的包名。和指定项目名,有时候开发中一般都会新建一个java工程来生成,然后将生成的文件拷贝到自己的工程中,这也不麻烦,而且很安全。

最后的table标签用于对哪些表使用逆向工程。注释掉的部分用于指定数据库字段的Java类型。下面我们看一下执行代码。

如图所示,红色框框标识出的为逆向工程配置文件的位置,由于这里使用File构造方法传入路径,所以该配置文件必须放下项目录下,不要放在src/下面,否则读不到,会抛出文件没找到的异常,下面我们执行一下试试。

这是控制台log4j日志打印出的,可以看到它找到数据库中的,字段,类型,长度等信息,到这里说明生成成功了。

我们刷新一下项目发现src/下多少mapper和pojo包,都是刚才逆向工程自己生成的。接下来我们将mapper和pojo拷贝到Spring整合MyBatis环境中测试能否执行SQL语句操作。

这里补充下上一篇Spring整合MyBatis文章中忘记提到的,我们通过配置mybatis的mapper扫描包,能够让Spring将MapperScannerConfigurer装入容器中,MapperScannerConfigurer能够扫描包下所有子孙包中的mapper接口,为我们创建mapper的实现类。图中红色框框部分可以代替已经注释掉的配置。因为没有指定接口的 bean名称,所以我们只能通过传入mapper接口的class对象获取实现类,代码如下。

图中重要代码已经用红色框框标识出,UserExample是逆向工程生成pojoUser时创建的,该类封装了一些条件。Example.createCriteria()这个方法时创建了一个条件查询对象,这里和hibernate的Criteria对象十分相似,通过andSexEqualTo("1");方法,这个方法相当于where sex = “ 1 ”这种限定条件,然后现在调用usermapper中的方法,这里调用的是cunnt方法,传入example对象,由于上一行中example对象已经被我们封装了where sex = “ 1 ”的限定条件,usermapper.countByExample(example);这句代码执行后拼接成的sql语句就是 select count(1) form user where sex = '1';这也就是mybatis被称为半ORM框架的原因,也有了些许面向对象的意为,但功能上还不足以与强大的hibernate相媲美。我们在创建限定条件对象createCriteria()时,后面的条件是可以无限增加的,该对象支持各种复杂查询,功能也还是十分强大的。

以上就是mybatis的逆向工程介绍了,不光能够自己生成sql,pojo,mapper外,也封装了对数据库面向对象的操作,。

[非原创]

mysql逆向工程封装_MyBatis高级应用之逆向工程自动生成SQL语句相关推荐

  1. mysql 下 计算 两点 经纬度 之间的距离 含具体sql语句

    mysql取字段逗号分隔的第一个 cover字段为:(admin/LUpiEMD1Pk6U6B,admin/LUpiEMD1Pk6U6B,admin/LUpiEMD1Pk6U6B) 取逗号分隔第一个词 ...

  2. springboot集成mybatis 使用逆向工程 生成sql语句

    软件环境 :IDEA.mysql .mybatis.maven 首先在pom.xml导入所需要的jar包和插件 <plugin><groupId>org.springframe ...

  3. 【SQL高级】,不得不掌握的SQL语句,SQLserver MySQL

    一.SQL SELECT TOP, LIMIT, ROWNUM 子句 SELECT TOP 子句用于指定要返回的记录数量. SELECT TOP子句在包含数千条记录的大型表上很有用.返回大量记录会影响 ...

  4. MySQL在大数据、高并发场景下的SQL语句优化

    转载自:https://segmentfault.com/a/1190000007311574 本文主要针对中小型应用或网站,重点探讨日常程序开发中SQL语句的优化问题,所谓"大数据&quo ...

  5. mysql左对齐原则_Mysql学习,这21个SQL语句优化规范方法你知道吗

    前言 每一个好习惯都是一笔财富,本文分SQL后悔药, SQL性能优化,SQL规范优雅三个方向,分享写SQL的21个好习惯,谢谢阅读,加油哈~ github地址,感谢每颗star  github.com ...

  6. Bootstrap4+MySQL前后端综合实训-Day04-PM【PowerDesigner 图形化数据库设计软件(设置依赖关系、自动增长主键、生成sql语句)、SQLyog软件(备份数据库)】

    [Bootstrap4前端框架+MySQL数据库]前后端综合实训[10天课程 博客汇总表 详细笔记] 目   录 PowerDesigner软件 5张数据表之间的依赖关系图 设置数据表的自动增长主键 ...

  7. mysql对所有列的数据进行修改6_MySQL的SQL语句 - 数据定义语句(6)- ALTER TABLE 语句 (3)...

    添加和删除列 使用ADD向表中添加新列,使用DROP删除现有列.DROP col_name是对标准SQL的MySQL扩展. 若要在表行的特定位置添加列,请使用FIRST col_name 或者 AFT ...

  8. mysql host %s_python mysql:虽然%s和列匹配,但并非SQL语句中使用的所有参数

    PythonMySQL.connector一直给我错误不是SQL语句中使用的所有参数.这是我的代码:import mysql.connector con = mysql.connector.Conne ...

  9. MySQL中将多行查询结果合并为一行展示SQL语句书写

    写在前面 最近开发过程中,遇到一个需求是要将所查询的多条结果汇总成一条结果展示,由于之前没有接触过这方面的业务,所以经过一番折腾之后,解决了需求,这里特此记录一下,以供后续参考! 1.问题复现 这里以 ...

最新文章

  1. Web前端小例子——简单导航栏
  2. 【华为云技术分享】opensuse使用zypper安装软件
  3. 利用pandas,matplotlib画饼图
  4. 数据库连接池种类及性能
  5. Codeforces 948D Perfect Security
  6. Uva 10557 XYZZY
  7. ie选项 由于该计算机受到限制 本次操作已被取消,IE“Internet 选项”无法打开提示“由于该计算机受到限制本次操作已被取消”...
  8. 牛客NOIP暑期七天营-普及组1 解题报告
  9. matlab绘制正弦波
  10. java 前端及后台轮询方法总结
  11. 想多赚钱!程序员如何把副业搞得风生水起?
  12. 浅谈浏览器的编码与解码过程
  13. 【连载之一】那些公众号不会告诉你的职业真相
  14. Facet Kernel详解、Random Walk随机游走算法详解
  15. 今日巨大福利,1元体验京东云服务器,附云服务器用法的完整教程
  16. 网站建设安全隐患有哪些,网站如何确保安全性?
  17. 怎么上永久免费的GPU与TPU服务器colab
  18. 这件物品不能添加到您的库中,因为他在你所在的地区不可用
  19. 在python中 0oa1是合法_在Python中0oa1是合法的八进制数字表示形式。
  20. 测试新人到测试专家的进阶之路

热门文章

  1. 第903期机器学习日报(2017-03-09)
  2. Android 文本,软键盘使用指南
  3. 宅急送项目的第九天笔记!( 角色--权限管理)
  4. 编译GPU版本Matconvnet
  5. el-checkbox状态值修改而样式不修改的原因
  6. 计算机毕业设计Java居家养老系统(源码+系统+mysql数据库+lw文档)
  7. GB/T 8323.2塑料 烟生成 第2 部分:单室法测定烟密度试验方
  8. matlab绘图:将图导出在ppt上使用的三维矢量图
  9. [洛谷P4707]重返现世
  10. mysql数据表去重合并_MySQL数据表合并(两表字段相同)以及数据去重(抄)