mybatis Generator生成代码及使用方式
本文原创,转载请注明:http://www.cnblogs.com/fengzheng/p/5889312.html
为什么要有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 生成的文件结构
生成的文件包含三类:
- Model 实体文件,一个数据库表生成一个 Model 实体;
- ModelExample 文件,此文件和实体文件在同一目录下,主要用于查询条件构造;
- Mapper 接口文件,数据数操作方法都在此接口中定义;
- 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生成代码及使用方式的更多相关文章
- mybatis Generator生成代码及使用方式(转载)
转载自:http://www.cnblogs.com/fengzheng/p/5889312.html 文章很棒,很不错,转了.
- 用org.mybatis.generator 生成代码
1:引入pom 2:增加生成配置xml: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ...
- 2016.7.12 eclispe使用mybatis generator生成代码时提示project E is not exist
运行mybatis-generator之后,出现错误:project E is not exist 错误原因:使用了项目的绝对路径. http://bbs.csdn.net/topics/3914 ...
- 【MyBatis】MyBatis自动生成代码查询之爬坑记
前言 项目使用SSM框架搭建Web后台服务,前台后使用restful api,后台使用MyBatisGenerator自动生成代码,在前台使用关键字进行查询时,遇到了一些很宝贵的坑,现记录如下.为展示 ...
- mybatis自动生成代码插件mybatis-generator使用流程(亲测可用)
mybatis-generator是一款在使用mybatis框架时,自动生成model,dao和mapper的工具,很大程度上减少了业务开发人员的手动编码时间 坐着在idea上用maven构建spri ...
- Mybatis 自动生成代码,数据库postgresql
最近做了一个项目,使用Mybatis自动生成代码,下面做一下总结,被以后参考: 一.提前准备: 1.工具类:mybatis-generator-core-1.3.2.jar 2.postgresql驱 ...
- MyBatis Generator生成DAO——序列化
MyBatis Generator生成DAO 的时候,生成的类都是没有序列化的. 还以为要手工加入(開始是手工加入的),今天遇到分页的问题,才发现生成的时候能够加入插件. 既然分页能够有插件.序列化是 ...
- springboot mybatis 自动生成代码(maven+IntelliJ IDEA)
1.在pom文件中加入需要的依赖(mybatis-generator-core) 和 插件(mybatis-generator-maven-plugin) <dependency> < ...
- 利用org.mybatis.generator生成实体类
springboot+maven+mybatis+mysql 利用org.mybatis.generator生成实体类 1.添加pom依赖: 2.编写generatorConfig.xml文件 ( ...
随机推荐
- 【每日一linux命令3】参数(或称选项)顺序
一般除了特殊情况,参数是没有顺序的.举例而言,输入"–a –v"与输入"–v –a"以及"–av" 的执行效果是相同的.但若该参数后指定了要 ...
- UWP中实现自定义标题栏
UWP中实现自定义标题栏 0x00 起因 在UWP开发中,有时候我们希望实现自定义标题栏,例如在标题栏中加入搜索框.按钮之类的控件.搜了下资料居然在一个日文网站找到了一篇介绍这个主题的文章: http ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(72)-微信公众平台开发-消息处理
系列目录 前言 Senparc.Weixin.MP SDK提供了MessageHandler消息处理类 在作者的Wiki中也详细说明了如何定义这个类,下面我们来演示,消息的回复,及效果 了解Messa ...
- 微软新神器-Power BI横空出世,一个简单易用,还用得起的BI产品,你还在等什么???
在当前互联网,由于大数据研究热潮,以及数据挖掘,机器学习等技术的改进,各种数据可视化图表层出不穷,如何让大数据生动呈现,也成了一个具有挑战性的可能,随之也出现了大量的商业化软件.今天就给大家介绍一款逆 ...
- 年度巨献-WPF项目开发过程中WPF小知识点汇总(原创+摘抄)
WPF中Style的使用 Styel在英文中解释为”样式“,在Web开发中,css为层叠样式表,自从.net3.0推出WPF以来,WPF也有样式一说,通过设置样式,使其WPF控件外观更加美化同时减少了 ...
- .NET平台和C#编程的总结
第一章 简单认识.NET框架 (1)首先我们得知道 .NET框架具有两个主要组件:公共语言进行时CLR(Common Language Runtime)和框架类库FCL(Framework ...
- java时间
Calendar.getInstance().getTime() 获取当前时间(包括星期和时区 CST China Standard Time): Fri Jan 06 21:03:36 CST 2 ...
- java面向对象六原则一法则
1. 单一职责原则:一类只做它该做的事. 2. 里氏替换原则:子类必须能够替换基类(父类),否则不应当设计为其子类. 3. 依赖倒换原则:设计要依赖于抽象而不是具体化. 4. 接口隔离原则:接口要小而 ...
- [转载]Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
本文对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法进行了详细的总结,需要的朋友可以参考下,希望对大家有所帮助. 详细解读Jquery各Ajax函数: ...
- 纯javaScript、jQuery实现个性化图片轮播
纯javaScript实现个性化图片轮播 轮播原理说明<如上图所示>: 1. 画布部分(可视区域)属性说明:overflow:hidden使得超出画布部分隐藏或说不可见.position: ...