首页 > 其他分享 >mybatis Generator生成代码及使用方式

mybatis Generator生成代码及使用方式

时间:2023-04-28 17:33:33浏览次数:43  
标签:文件 Generator 代码 example blackListIPList mybatis 生成 pageInfo


为什么要有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

mybatis Generator生成代码及使用方式_Java

如何编写代码呢

 所有的方法调用都来自于生成的接口文件,在 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上。

 

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

人生没有回头路,珍惜当下。



标签:文件,Generator,代码,example,blackListIPList,mybatis,生成,pageInfo
From: https://blog.51cto.com/u_15717245/6235038

相关文章

  • Python用RNN神经网络:LSTM、GRU、回归和ARIMA对COVID19新冠疫情人数时间序列预测|附代
    全文下载链接: http://tecdat.cn/?p=27042最近我们被客户要求撰写关于新冠疫情的研究报告,包括一些图形和统计输出。在本文中,该数据根据世界各国提供的新病例数据提供。获取时间序列数据df=pd.read_csv("C://global.csv")探索数据此表中的数据以累积的形式呈现,为了找出每天......
  • Python rangelib.RangeSet类代码示例
    https://vimsky.com/examples/detail/python-ex-rangelib-RangeSet---class.htmlPythonrangelib.RangeSet类代码示例本文整理汇总了Python中rangelib.RangeSet类的典型用法代码示例。如果您正苦于以下问题:PythonRangeSet类的具体用法?PythonRangeSet怎么用?PythonRangeSet使......
  • 二维数组在代码中的应用
    在做人岗架时,最初在需求拟定时,客户信誓旦旦的说一个用户只会属于一个部门的一个岗位,所以设计数据库如下:同时也有用户角色关系表角色表以及用户码表。仅仅隔了半年突然就出现了特殊情况,有多个部门多个岗位为一个用户的情况,主职和兼职的情况。用户唯一标识是手机号,用户也只有......
  • 淘宝店铺商品详情接口代码-获取淘宝商品详情 API 接口返回值说明示例
    ​现在某宝的规则越来越严,想要入驻某宝需要审核的特别严格,不然就会被封店,那么大家知道某宝店铺商品详情接口吗?下面是我整理的关于某宝店铺商品详情接口的相关内容,大家可以来了解下! 目前提供的接口有:商品详情、商品详情原数据、商品评论、商品快递费用、淘宝分类详情、关键字搜......
  • 二分查找算法讲解及其C++代码实现
    二分查找算法是一种常用的查找算法,也被称为折半查找。它可以在有序的数组或列表中快速查找需要的元素。算法描述:首先确定数组的中间位置mid=(left+right)/2;然后将要查找的值key与中间位置的值进行比较;如果key等于中间位置的值,则查找成功,返回mid;如果key小于中间位置的值,则在......
  • 1.代码发送钉钉警报
    1.yml配置:alert:dingdingToken:b77968b5ac150902f2a23858ecd1ba3e822521b3f21a47f047b07ef2ea9c5a86//机器人生成的群codeservices:groupMessage://执行的方法别名owners:-13616546418......
  • 写代码犹如写文章: “大师级程序员把系统当故事来讲,而不是当做程序来写” | 如何架构
    “大师级程序员把系统当故事来讲,而不是当做程序来写”写代码犹如写文章好的代码应该如好文章一样表达思想,被人读懂。中心思想:突出明确程序是开发者用编程语言写成的一本书,首先应该是记录开发者对业务需求分析、系统分析,最终用软件实现所思所想的知识的记录与传承。然后再是完成程......
  • Mybatis总体框架设计
    Mybatis架构概览Mybatis架构整体设计如下:接口层和数据库交互的方式Mybatis和数据库的交互方式有两种使用传统的MyBatis提供的API;使用Mapper接口使用传统的MyBatis提供的API这是传统的传递StatementId和查询参数给SqlSession对象,使用SqlSession对象完成和数据库的交......
  • redisson-2.10.4源代码分析
       redis学习问题总结http://aperise.iteye.com/blog/2310639ehcachememcachedredis缓存技术总结http://aperise.iteye.com/blog/2296219redis-stat离线安装http://aperise.iteye.com/blog/2310254redis cluster非ruby方式启动http://aperise.iteye.com/blog/2310254re......
  • 如何实现Spring中服务关闭时对象销毁执行代码
    spring提供了两种方式用于实现对象销毁时去执行操作1.实现DisposableBean接口的destroy2.在bean类的方法上增加@PreDestroy方法,那么这个方法会在DisposableBean.destory方法前触发3.实现SmartLifecycle接口的stop方法packagecom.wyf.service;importorg.springframework.be......