热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【效率专精系列】善用插件提升MyBatis开发效率

团队使用Mybatis作为数据库访问框架。不同于Hibernate这种采用经典面向对象思想设计的ORM框架,Mybatis是面向过程的,它只做了过程到SQL语句的映射。两者的性能在

团队使用Mybatis作为数据库访问框架。不同于Hibernate这种采用经典面向对象思想设计的ORM框架,Mybatis是面向过程的,它只做了过程到SQL语句的映射。两者的性能在绝大多数场景下是差不多的,因此理论上可以互相替代使用。由于Mybatis可以直接控制底层SQL,因此对于码农来说,学习成本更低、优化起来更容易;不过也带来了首次配置繁琐、样板代码较多等缺点。

比如是对于单表的、简单的查询,为了符合JavaWeb网络开发模型的Web、Service、Dao的三层模型,不得不在Dao层、Service接口、Service实现类中添加功能几乎重复的代码,所做的也不过是透传,这里就存在可以优化的点。

本文的目的是优化工具链支持,减少手动开发Mybatis样板代码的时间。

  1. 通过Intillij Idea插件更优雅地生成DAO MapperXML Statement的样板代码
  2. 通过Mybatis插件不污染XML Statement地实现优雅分页。

Mybatis分页插件:Mybatis PageHelper

实现原理基于Mybatis的QueryInterceptor机制,能动态拦截sql语句并根据对应的数据库类型加上分页语句。无需修改底层的SQL。

  1. 使用步骤

    1. 引入Maven依赖,在mybatis或spring的配置xml中进行配置。
    2. DAO Mapper方法中增加入参@Param("pageNum") int pageNum, @Param("pageSize") int pageSize即可。

> 插件还有多种调用方法。[Mybatis-PageHelper][Mybatis-PageHelper]

Mybatis代码生成插件

Fin. 总结

  1. 插件生成样板代码的方式大致有三种:根据数据库连接、根据POJO、根据建表sql,用户根据实际情况选择。
  2. MyBatisCodeHelper提供了声明式的Statement开发方法,在编写自定义Dao方法时可省去部分对应SQL的编写时间。
  3. MyBatisCodeHelper、Mybatis Plugin提供XML语法提示、自动补全、错误提示、导航功能。

1. MyBatisCodeHelper

  • 代码生成流程

    1. 在IDE中开发持久化对象(POJO
    2. 在可视化界面配置表名、主键、类型、索引、默认值、注释等,自动生成建表SQL语句、DAO MapperMapper XML

> 默认生成的DAO中包含了`insert`、`insertSelective`、`insertList`、`update`方法
> `POJO`示例和DAO Mapper示例
```java
public class UserPO {
private Integer id;
private String name;
private String age;
private Date addTime;
private Date updateTime;
private Boolean isDelete;
//getter/setter
}
```
```java
int insert(@Param("userPO") UserPO userPO);
int insertSelective(@Param("userPO") UserPO userPO);
int insertList(@Param("userPOs") List userPOs);
int update(@Param("userPO") UserPO userPO);
```
> 可视化UI ![clipboard.png](/img/bVUk7g)

  • 其他功能

    1. 根据DAO方法名推断生成XML Statement的实现

> `Spring Data Jpa`(基于`Hibernate`)提供了一种类SQL的**声明式的开发方法**,能根据符合特定规则的接口方法名在运行时自动生成字节码。该插件提供了类似的功能,根据接口的方法名推断含义,然后在`Mapper XML`中直接生成对应的SQL。比如`findByStartDateBetween`方法会被翻译成这样的SQL`… where x.startDate between ?1 and ?2`。
> 具体的推断规则可以参考`Spring Data Jpa`文档,也可以见脚注:方法名推断之约束条件[^方法名推断之约束条件],方法名推断之比较符[^方法名推断之比较符]。

2. Codehelper.generater

  • 代码生成流程

    1. 在IDE中开发持久化对象(POJO
    2. 在配置文件中设置路径(或者使用默认配置),自动生成建表SQL语句、DAO MapperMapper XML
  • 其他功能

    1. 代码补全(AutoCoding Mode)。按AutoCoding键一次会生成Java Bean的所有Setter方法。按AutoCoding键两次则会为Setter方法生成默认值。对于字段很多的POJO,可以防止批量的Set操作漏掉某些字段。

3. Mybatis Plugin

  • 代码生成流程

    1. 配置数据库
    2. 配置样板代码生成路径
    3. 生成样板代码(POJODAO MapperMapper XML
  • 其他功能

    1. Xml Statement和对应方法导航,ResultMap和对应POJO导航
    2. DAO Mapper、Xml代码提示和补全
    3. 代码检查及XML语法错误提示
    4. 集成了Mybatis Generater,可生成mybatis-config.xmlmybatis-generater-config.xml模板
    5. 根据Mapper对象(必须以Mapper结尾)自动生成Mapper Xml、其中的方法生成对应的Statement(只包含外层元素)

> 例如:根据`int countById(@Param("id") Integer id);`就会生成``

4. MybatisGenerator、Swords、AutoCurd、GetCode、foilvora、Mybatis Maven Plugin

  1. 代码生成流程

    1. 配置数据库
    2. 配置样板代码生成路径
    3. 生成样板代码(POJODAO MapperMapper XML

foilvora:通过建表sql生成样板代码

Mybatis Maven Plugin:在
mybatis-generater-config.xml配置数据库连接,生成对应的
Mapper Xml、Mapper类、
POJO,可配置性最强

Swords配置图
1

MybatisGenerator配置图
2

Reference

  1. Spring Data Jpa – Query creation
  2. MyBatisCodeHelper-Pro
  3. Free Mybatis plugin
  4. MybatisGenerator
  5. AutoCurd
  6. Free Mybatis plugin
  7. CodeHelper Generator
  8. Mybatis Plugin – Document
  1. Swords配置 《【效率专精系列】善用插件提升MyBatis开发效率》↩
  2. MybatisGenerator配置入口 《【效率专精系列】善用插件提升MyBatis开发效率》↩

推荐阅读
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 数字账号安全与数据资产问题的研究及解决方案
    本文研究了数字账号安全与数据资产问题,并提出了解决方案。近期,大量QQ账号被盗事件引起了广泛关注。欺诈者对数字账号的价值认识超过了账号主人,因此他们不断攻击和盗用账号。然而,平台和账号主人对账号安全问题的态度不正确,只有用户自身意识到问题的严重性并采取行动,才能推动平台优先解决这些问题。本文旨在提醒用户关注账号安全,并呼吁平台承担起更多的责任。令牌云团队对此进行了长期深入的研究,并提出了相应的解决方案。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • 如何查询zone下的表的信息
    本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
author-avatar
炽热冰菊66
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有