你的位置:首页 > Java教程

[Java教程]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 也需要学习成本,尤其是配置它需要的

它只需要简单配置,即可完成大量的表到 mybatis Java 对象的生成工作,不仅速度快,而且不会出错,可让开发人员真正的专注于业务逻辑的开发。

官方提供的 mybatis generator 功能比较简单,对于稍微复杂但是开发中必然用到的分页功能、批量插入功能等没有实现,但已经有成熟的插件功能支持。

我已经将我们平时用的mybatis生成工具放到 github ,其中已集成了分页、批量插入、序列化功能。可到 这里 查看,已经介绍了使用方法。

mybatis generator 生成的文件结构

生成的文件包含三类:

  1. Model 实体文件,一个数据库表生成一个 Model 实体;
  2. ModelExample 文件,此文件和实体文件在同一目录下,主要用于查询条件构造;
  3. Mapper 接口文件,数据数操作方法都在此接口中定义;
  4. Mapper

在配置文件中配置好文件的生成路径,并设置好对应的包名,即可生成对应的目录结构和文件。我将生成目录设置为 test 目录,实体包名设置为  com.fengzheng.dao.entity   ,接口包名设置为  com.fengzheng.dao.mapper ,然后生成的文件目录结构如下图所示:

如何编写代码呢

 所有的方法调用都来自于生成的接口文件,在 Spring MVC 中,需要在调用方声明,用一个黑名单接口为例,生成的接口文件为 BlackListIPMapper ,所以在调用方要声明此接口,如下:

@Autowiredprivate 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上。

 

天下没有完美的轮子,用不用它,那是你的事儿。