这就是——通用Mapper

简介: image.png什么是通用mapper?通用mapper 可以极大的方便开发人员进行ORM,提供极其方便的单表增删改查。可以按照自己的需要选择通用方法,还能很方便的开发自己的通用方法。
img_3359d23e2d4e5a2fa6203009cd4daf99.png
image.png

什么是通用mapper?

通用mapper 可以极大的方便开发人员进行ORM,提供极其方便的单表增删改查。

可以按照自己的需要选择通用方法,还能很方便的开发自己的通用方法。

为什么要用通用mapper?

原生Mybatis的痛点

1、mapper.xml文件里有大量的sql,当数据库表字段变动,配置文件就要修改

2、需要自己实现sql分页,select * from table where . . . limit 1,3

自己手写分页,除了传参page、pageSize,还需要返回条目总数count。

3、数据库可移植性差:如果项目更换数据库,比如oracle-->mysql,mapper.xml中的sql要重新写,因为Oracle的PLSQL 和mysql 支持的函数是不同的。

4、生成的代码量过大。

5、批量操作,批量插入,批量更新,需要自写。

快速开始

用过 Mybatis Geneator(MBG)都知道,我们可以通过配置generatorConfig.xml,指定一个数据库以及数据库表,可以使用MBG直接生成对应的Java Bean实体类(POJO)、Mapper.java接口(DAO层接口)、Mapper.xml,以及实体类的Example.java。

这就是类似于Hibernate 的逆向工程。逆向从数据库表生成了实体类。

但是这种原生的MBG生成的方式,仍然有一些不足之处。如果再配合使用通用mapper ,会有更多方便之处。下面通过对比原生mybatis生成 和 集成通用mapper后的生成,看看具体有什么区别。

代码对比(原生mybatis生成 VS 通用mapper生成)

以单表person,生成对应的Person实体类为例:

原生mybatis生成:
PersonMapper.xml、Person.java、PersonMapper.java、PersonExample.java
通用mapper生成:
PersonMapper.xml、Person.java、PersonMapper.java

原生mybatis生成的POJO中,纯代码,不包含注解。
通用mapper生成的POJO中,属性加了 (持久化)注解,与数据库字段进行匹配。

原生mybatis生成的PersonMapper.xml中,有很多sql。
通用mapper生成的PersonMapper.xml中,只有一个POJO与数据库字段的映射<resultMap>。

通用mapper生成的PersonMapper.java接口,extends MyMapper<?>。

实际上,MyMapper<?>已经提供常用的 单表CRUD方法的实现。
如果还有其他特殊CRUD需求(如多表连接查询),只需自己在PersonMapper.java接口添加方法,对应在PersonMapper.xml写sql就行了。


img_1f7bd8b5e03d696569f16b76ea993cf2.png
image2.png

原生mybatis生成的PersonExample.java类,是和具体的POJO类关联,生成POJO类时,对应的Example类也生成(生成配置中,可以选择不生成)。

PersonExample example = new PersonExample();
example.createCriteria().andEqualTo("id","1");
personMapper.selectByExample(example);

通用mapper的Example类,是通用的,并不是和具体的POJO绑定。构造时,只需要传入实体类的Class<?>类型。


img_1a1360cbb8d8d21d7b5ee812a8d5d089.png
image3.png

原生mybatis的批量插入,需要写sql,进行for循环。


img_16ce74c7165f178bae1bf1db009519a5.png
image4.png

通用mapper,天然的就支持批量操作。直接调用personMapper.insertList()


img_950d50e98870d4ca41f6d6c1b697e1d5.png
image5.png



A powerful GUI tool for MyBatisGenerator(MBG)

https://github.com/spawpaw/mybatis-generator-gui-extension

目录
相关文章
|
10月前
|
移动开发 小程序 前端开发
小程序开发平台有哪些?哪个好
小程序项目落地的第一步,也是最关键的一步,就是开发平台的精准选型。它不仅影响项目的开发周期与成本投入,更直接决定了后续业务的适配度和运营上限。企业需结合自身技术能力、预算区间、功能需求等核心要素综合权衡。本文将对主流小程序开发平台进行分类拆解,通过详细对比和场景化推荐,帮助不同类型的企业找到最契合的解决方案。
863 9
|
存储 JSON 安全
Token泄露引发的问题
Token泄露引发的问题
2074 0
|
2月前
|
缓存 人工智能 JSON
最新版通义千问(Qwen3.8‑Flash)功能介绍
在AI应用大规模落地的阶段,很多业务场景不再一味追求单轮推理的极致能力,而是更加看重综合指标,包括响应速度、推理吞吐、使用成本、长文本处理、多模态理解以及智能体任务执行能力。很多企业搭建AI应用的时候,会陷入两难选择:选用旗舰模型,推理成本高、并发承载有限,难以支撑大规模线上流量;选用轻量化小模型,又会损失复杂推理、工具调用、长文档分析的能力,无法完成真实业务当中复杂任务。Qwen3.8‑Flash作为通义千问序列主打高性价比的多模态MoE大模型,正是为了解决这一矛盾而生,它采用全新自研模型架构,用较低的激活参数量实现接近高阶模型的综合效果,同时把训练与推理开销大幅压缩,同时原生支持图文视频多
539 1
|
2月前
|
人工智能 编解码 弹性计算
SenseNova-U1.5:一句话生成 4K 商用级大图,理解、推理、生成一体的 AI 视觉创作工作站
商汤SenseNova-U1.5-8B-MoT是原生多模态统一模型,基于NEO-unify架构,实现理解、推理与生成一体化;支持文生图、图像编辑、文字渲染与复杂版式编排,原生4K直出,轻量高效,已适配ComfyUI并支持阿里云一键部署。
|
Shell 网络安全 开发工具
Qt实用技巧:QtCreator使用git(gitHub)管理项目代码笔记
Qt实用技巧:QtCreator使用git(gitHub)管理项目代码笔记
Qt实用技巧:QtCreator使用git(gitHub)管理项目代码笔记
|
4月前
|
人工智能 前端开发 安全
我受够了在四个 AI 编程工具之间当"复制粘贴工程师",于是写了 Roundtable
Roundtable 是一款零依赖、纯本地的 AI 编程助手协作框架。让 Claude Code、Codex、Reasonix、ZCode 自动组队分工——发任务、认领、交付,全靠共享文件看板与轻量 CLI。不联网、不上传、不设服务器,1000 行 Python 实现 AI 团队自治。你,只管喝茶。
|
7月前
|
消息中间件 弹性计算 监控
在阿里云上搭建低延迟行情监控系统(WebSocket实战)
本文详解如何在阿里云ECS(Ubuntu 22.04)上用Python构建生产级WebSocket行情客户端:支持自动重连、心跳保活、多市场(股票/加密货币)实时订阅,并通过消息队列解耦处理,显著提升稳定性与低延迟。
|
人工智能 运维 数据处理
创新场景丨大模型初创公司出海,云计算护航
开启全球化征程的企业需要的不仅是优秀的技术产品,还有成熟的服务体系,让企业更专注业务突围,无后顾之忧。
|
传感器 算法 定位技术
【四轴飞行器的位移控制】控制四轴飞行器的姿态和位置设计内环和外环PID控制回路(Simulink仿真实现)
【四轴飞行器的位移控制】控制四轴飞行器的姿态和位置设计内环和外环PID控制回路(Simulink仿真实现)
358 0
|
Oracle Java 关系型数据库
2023年震撼!Java在TIOBE排行榜滑坡至历史最低!
自2023年6月起,Java在TIOBE编程语言排行榜中跌至历史最低的第4位,与C#的差距缩小至1.2%。Java受欢迎程度下降的主要原因是Oracle在Java 8后引入付费许可模式,导致用户流失。尽管如此,Java仍是一门成熟、稳定且跨平台的语言,拥有庞大的用户群和丰富的生态系统。Oracle通过推出Java 17免费版及Java 21的新特性,努力保持其竞争力。未来,Java将继续与其他编程语言竞争并发展。
655 1

热门文章

最新文章