前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MyBatis高级应用之逆向工程自动生成SQL语句

MyBatis高级应用之逆向工程自动生成SQL语句

作者头像
用户5546570
发布2020-11-24 15:44:43
9400
发布2020-11-24 15:44:43
举报

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

MyBatis高级应用之逆向工程自动生成SQL语句

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

MyBatis高级应用之逆向工程自动生成SQL语句

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

MyBatis高级应用之逆向工程自动生成SQL语句

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

MyBatis高级应用之逆向工程自动生成SQL语句

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

MyBatis高级应用之逆向工程自动生成SQL语句

<context 标签,id随便取,目前用不到。 targetRuntime运行环境,目前2018年4月30号Mybatis最新的版本为3.4.6,所以这里写3就好,再过几年有可能会变成4。<commentGenerator>下有个

<property name="suppressAllComments" value="true" />

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

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

MyBatis高级应用之逆向工程自动生成SQL语句

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

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

MyBatis高级应用之逆向工程自动生成SQL语句

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

MyBatis高级应用之逆向工程自动生成SQL语句

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

MyBatis高级应用之逆向工程自动生成SQL语句

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

MyBatis高级应用之逆向工程自动生成SQL语句

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

MyBatis高级应用之逆向工程自动生成SQL语句

图中重要代码已经用红色框框标识出,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外,也封装了对数据库面向对象的操作。

来源:https://www.tuicool.com/articles/vaIn2y7

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档