MyBatis Generator生成代码及使用方式详解
为什么要有mybatis
mybatis 是一个 java 的 orm 框架,orm 的出现就是为了简化开发。最初的开发方式是业务逻辑和数据库查询逻辑是分开的,或者在程序中编写 sql 语句,或者调用 sql 存储过程。这样导致思维需要在语言逻辑和 sql 逻辑之间切换,导致开发效率低下。所以出现了一系列的 orm 框架,orm 框架将数据库表和 java 对象对应起来,当操作数据库时,只需要操作对象的 java 对象即可,例如设置几个 and 条件,只需要设置几个属性即可。
为什么要有mybatis generator
虽然说有了 mybatis 框架,但是学习 mybatis 也需要学习成本,尤其是配置它需要的 xml 文件,那也是相当繁琐,而且配置中出现错误,不容易定位。当出现莫名其妙的错误或者有大批量需要生成的对象时,时常会有种生无可恋的感觉在脑中徘徊。故此, mybatis generator 应运而生了。
它只需要简单配置,即可完成大量的表到 mybatis java 对象的生成工作,不仅速度快,而且不会出错,可让开发人员真正的专注于业务逻辑的开发。
官方提供的 mybatis generator 功能比较简单,对于稍微复杂但是开发中必然用到的分页功能、批量插入功能等没有实现,但已经有成熟的插件功能支持。
我已经将我们平时用的mybatis生成工具放到 github ,其中已集成了分页、批量插入、序列化功能。可到 这里 查看,已经介绍了使用方法。
mybatis generator 生成的文件结构
生成的文件包含三类:
1.model 实体文件,一个数据库表生成一个 model 实体;
2.modelexample 文件,此文件和实体文件在同一目录下,主要用于查询条件构造;
3.mapper 接口文件,数据数操作方法都在此接口中定义;
4.mapper xml 配置文件;
在配置文件中配置好文件的生成路径,并设置好对应的包名,即可生成对应的目录结构和文件。我将生成目录设置为 test 目录,实体包名设置为 com.fengzheng.dao.entity ,接口包名设置为 com.fengzheng.dao.mapper ,然后生成的文件目录结构如下图所示:
如何编写代码呢
所有的方法调用都来自于生成的接口文件,在 spring mvc 中,需要在调用方声明,用一个黑名单接口为例,生成的接口文件为 blacklistipmapper ,所以在调用方要声明此接口,如下:
@autowired private blacklistipmapper blacklistipmapper;
数据库查询
查询是最常用功能,如下方法是查询 ip 为某值的记录,如果知道主键的话,可以用 selectbyprimarykey 方法。
public blacklistip get(string ip){ blacklistipexample example = new blacklistipexample(); example.createcriteria().andipequalto(ip); list<blacklistip> blacklistiplist = blacklistipmapper.selectbyexample(example); if(blacklistiplist!=null && blacklistiplist.size()>0){ return blacklistiplist.get(0); } return null; }
更新、添加、删除方法调用方法类似,具体可查看相关文档介绍。
排序
public blacklistip get(string ip){ blacklistipexample example = new blacklistipexample(); example.setorderbyclause("create_time desc"); //按创建时间排序 example.createcriteria().andipequalto(ip); list<blacklistip> blacklistiplist = blacklistipmapper.selectbyexample(example); if(blacklistiplist!=null && blacklistiplist.size()>0){ return blacklistiplist.get(0); } return null; }
分页
public pageinfo list(account account, pageinfo pageinfo,string starttime,string endtime) { account.setisdel(sysparamdetailconstant.is_del_false); accountexample example = getcondition(account,starttime,endtime); if (null != pageinfo && null != pageinfo.getpagestart()) { example.setlimitclausestart(pageinfo.getpagestart()); example.setlimitclausecount(pageinfo.getpagecount()); } example.setorderbyclause(" create_time desc "); list<account> list = accountmapper.selectbyexample(example); int totalcount = accountmapper.countbyexample(example); pageinfo.setlist(list); pageinfo.settotalcount(totalcount); return pageinfo; }
实现 a=x and (b=xx or b=xxx)这样的查询条件
虽然自动生成代码很方便,但凡事有利即有弊,mybatis generator 没有办法生成表联查(join)功能,只能手动添加。如下实现了a=x and (b=xx or b=xxx)这样的条件拼接。
accountexample accountexample = new accountexample(); accountexample.criteria criteria = accountexample.createcriteria().andtypeequalto("4"); criteria.addcriterion(string.format(" (id=%d or id=%d) ",34,35)); list<account> accounts = accountmapper.selectbyexample(accountexample); return accounts;
但是需要修改一点代码,修改 org.mybatis.generator.codegen.mybatis3.model包下的examplegenerator的第524行代码,将 method.setvisibility(javavisibility.protected); 改为 method.setvisibility(javavisibility.public);
改动已同步到github上。
以上所述是小编给大家介绍的mybatis generator生成代码及使用方式,希望对大家有所帮助
上一篇: 浅谈Java 对于继承的初级理解
下一篇: php数值转换时间及时间转换数值用法示例
推荐阅读
-
MyBatis Generator生成代码及使用方式详解
-
使用mybatis-generator生成的Example,快速分页查询魔板代码
-
详解在springboot中使用Mybatis Generator的两种方式
-
Mybatis逆向生成使用扩展类的实例代码详解
-
详解使用MyBatis Generator自动创建代码
-
mybatis使用generator自动生成代码时的类型转换
-
Idea使用Mybatis Generator 自动生成代码
-
idea使用generator自动生成mybatis代码
-
详解在IDEA中使用MyBatis Generator逆向工程生成代码
-
详解在IDEA中使用MyBatis Generator逆向工程生成代码