课程咨询 :186 8716 1620      qq:2066486918

昆明Java培训 > 达内新闻 > java程序员:mybatis Generator生成代码及使用方式
  • java程序员:mybatis Generator生成代码及使用方式

    发布:昆明Java培训      来源:达内新闻      时间:2016-09-22

  • 为什么要有mybatis?今天昆明Java培训班的老师就给大家讲讲。

    mybatis是一个Java的ORM框架,ORM的出现就是为了简化开发。最初的开发方式是业务逻辑和数据库查询逻辑是分开的,或者在程序中编写sql语句,或者调用sql存储过程。这样导致思维需要在语言逻辑和sql逻辑之间切换,导致开发效率 低下。所以出现了一系列的ORM框架,ORM框架将数据库表和Java对象对应起来,当操作数据库时,只需要操作对象的Java对象即可,例如设置几个and条件,只需要设置几个属性即可。

    为什么要有mybatis generator

    虽然说有了mybatis框架,但是学习mybatis也需要学习成本,尤其是配置它需要的XML文件,那也是相当繁琐,而且配置中出现错误,不容易定位。当出现莫名其妙的错误或者有大批量需要生成的对象时,时常会有种生无可恋的感觉在 脑中徘徊。故此,mybatis generator应运而生了。

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

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

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

    mybatis generator生成的文件结构

    生成的文件包含三类:

    Model实体文件,一个数据库表生成一个Model实体;

    ModelExample文件,此文件和实体文件在同一目录下,主要用于查询条件构造;

    Mapper接口文件,数据数操作方法都在此接口中定义;

    Mapper XML配置文件;

    在配置文件中配置好文件的生成路径,并设置好对应的包名,即可生成对应的目录结构和文件。昆明Java培训班的老师将生成目录设置为test目录,实体包名设置为 com.fengzheng.dao.entity  ,接口包名设置为 com.fengzheng.d ao.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上。

    学Java开发就到昆明达内Java培训班!了解详情请登陆昆明达内Java培训官网(km.Java.tedu.cn)!

    推荐文章

上一篇:java设计模式—工厂模式

下一篇:昆明java培训:spring与hibernate整合事务管理的理解

最新开班日期  |  更多

Java--零基础全日制班

Java--零基础全日制班

开班日期:11/30

Java--零基础业余班

Java--零基础业余班

开班日期:11/30

Java--周末提升班

Java--周末提升班

开班日期:11/30

Java--零基础周末班

Java--零基础周末班

开班日期:11/30

  • 网址:http://km .java.tedu.cn      地址:昆明市官渡区春城路62号证券大厦附楼6楼
  • 课程培训电话:186 8716 1620      qq:2066486918    全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56