开发神器Mybatis-Plus:少写代码,多摸鱼!
目录一 首先添加相关的依赖二 在Mapper层面对BaseMapper的继承同时泛型类型填写数据库对应的实体类三 数据库映射实体类的定义四 对应的方法一 首先添加相关的依赖dependency groupIdcom.baomidou/groupId artifactIdmybatis-plus-boot-starter/artifactId version3.5.3/version !-- 替换为最新版本 -- /dependency二 在Mapper层面对BaseMapper的继承同时泛型类型填写数据库对应的实体类Mapper public interface UserDao extends BaseMapperUser { }三 数据库映射实体类的定义相关注解的必要性1 TableName这个注解是用于指定表名的如果说数据库当中的表名与类名相同则不需要指定。2 TableField这个注解是用于指定类的成员变量与字段之间的映射关系如果说与字段相同则不需要指定。3 TableFeild注解当中填写exist false是当这个成员变量在数据库表中没有对应的字段时。4 TableId注解主要是针对主键如果说主键是id则不需要标注否则需要将这个主键表上指明主键Data NoArgsConstructor AllArgsConstructor TableName(demo_data1) public class User { /** * 主键 姓名 */ TableId(value name) TableField(name) private String name; /** * 年龄 */ TableField(age) private String age; /** * 性别 */ TableField(sex) private String sex; /** * 地址 */ TableField(address) private String address; /** * 备注 */ TableField(exist false) private String remark; //构造方法 public User(String name, String age, String sex, String address) { this.name name; this.age age; this.sex sex; this.address address; } }四 对应的方法Autowired private UserMapper userMapper; Test void insert() { // 插入 int insert userMapper.insert(new User(小明, 10, 123456, 123456)); System.out.println(插入 insert 条数据); } Test void query() { // 1 查询单条 LambdaQueryWrapperUser wrapper new LambdaQueryWrapper(); wrapper.eq(User::getAge, 10).eq(User::getName, 小明); User user userMapper.selectOne(wrapper); System.out.println(user); // 2 查询多个符合条件的数据 ListUser users userMapper.selectList(wrapper); System.out.println(users); } Test void update() { // 根据条件去查询对应的数据 LambdaUpdateWrapperUser wrapper new LambdaUpdateWrapper(); wrapper.eq(User::getName, 小安).eq(User::getAge, 10); User user userMapper.selectOne(wrapper); // 1 根据id去寻找对应的实体数据将数据修改 user.setAge(66); int i userMapper.updateById(user); System.out.println(修改 i 条数据); // 2 按照某个条件批量(批量数据完全一样最好重新设置主键) // 新数据 User user3 new User(小安, 10, 男, 山东); // wrapper、老数据的查询标准查询到的去修改 int update userMapper.update(user3, wrapper); System.out.println(修改 update 条数据); // 3 直接使用条件更新不需要处理主键 LambdaUpdateWrapperUser wrappers new LambdaUpdateWrapper(); wrappers.eq(User::getAddress, active) .set(User::getName, 统一新名字) .setSql(age age 1); int result userMapper.update(null, wrappers); System.out.println(修改 result 条数据); } Test void delete() { LambdaQueryWrapperUser wrapper4 new LambdaQueryWrapper(); wrapper4.eq(User::getName, 小明).eq(User::getAge, 10); int delete userMapper.delete(wrapper4); System.out.println(删除 delete 条数据); }上述这种是先声明Wapper再借助Mapper进行调用的还有一种方式是直接使用类似LambdaQuery.eq().List;这种但是这种情况是属于在impl层的方法需要在impl当中去继承Mapper,Entity才可以Controller层 ↓ Service接口层 (UserService extends IServiceUser) ↓ ServiceImpl实现层 (UserServiceImpl extends ServiceImplUserMapper, User) ↓ Mapper接口层 (UserMapper extends BaseMapperUser) ↓ MyBatis-Plus框架 ↓ 数据库链式调用// 链式调用 // 1. 链式查询 ListUser result userService.lambdaQuery() .eq(User::getAge, 20) .like(User::getName, 张) .list(); // 2. 链式更新 boolean updated userService.lambdaUpdate() .eq(User::getStatus, 0) .set(User::getStatus, 1) .update();五 Mybatis的复习1 在使用Mybatis的使用过程当中Mybatis的功能是非常强大的这段代码。我们的传参是LastworkRequest类型的一个实体参数的名为param这里推荐都加上Param注解去指定变量名2 进入到Mybatis内部的编写resultMap指的是返回结果的类型这里也可以自定义而parameterType指的是传入参数的类型通常都是不写的框架自身会去进行识别select idceshi resultMap parameterType /selecteg 这种方法去自定义映射的关系 column是数据库字段名property是实体类的对应成员变量这种是较为复杂的时候自定义resultMap如果说是平时简单的映射直接去使用as别名去实现resultMap idCustomMethod typeorg.example.mybatis01.bean.Customer id propertyid columnid/ result propertycustomerName columncustomer_name/ result propertyphone columnphone/ collection propertyorders ofTypeorg.example.mybatis01.bean.Order id propertyid columno_id/ result propertyaddress columnaddress/ result propertyamount columnamount/ result propertycustomerId columncustomer_id/ /collection /resultMap select idgetCustomerByOrderId resultMapCustomMethod select c.*, o.* from orders o left join customer c on c.id o.customer_id where c.id 1; /select传参一种是传递的是对象直接获取集合当中的字段进行传参即可where if testname ! null and name ! name #{name}/if if testage ! nullAND age #{age}/if /where另一种是传递的是集合集合当中存储多个对象where if testparamList ! null and not paramList.isEmpty() foreach collectionparamList itemparam separatorOR ( if testparam.name ! null and param.name ! name #{param.name}/if if testparam.age ! nullAND age #{param.age}/if ) /foreach /if if testparamList null or paramList.isEmpty()12/if /whereforeach一对多这个主要是用于传参的一个指定。foreach collection集合参数名 item每个元素的变量名 index索引变量名 open开始符符号 close结束符号 separator分隔符 #{item变量名} /foreach返回返回对象构成的集合一对多!-- 客户的ResultMap关联一对多的订单复用你原有的resultMap仅修正字段别名 -- resultMap idCustomerWithOrdersResultMap typeorg.example.mybatis01.bean.Customer id propertyid columnc_id/ result propertycustomerName columncustomer_name/ result propertyphone columnphone/ !-- collection一对多关联订单客户→订单 -- collection propertyorders ofTypeorg.example.mybatis01.bean.Order id propertyid columno_id/ result propertyaddress columnaddress/ result propertyamount columnamount/ result propertycustomerId columncustomer_id/ /collection /resultMap返回元素构成的对象一对一!-- 订单的ResultMap关联一对一的客户 -- resultMap idOrderWithCustomerResultMap typeorg.example.mybatis01.bean.Order id propertyid columno_id/ result propertyaddress columnaddress/ result propertyamount columnamount/ result propertycustomerId columncustomer_id/ !-- association一对一关联客户订单→客户 -- association propertycustomer javaTypeorg.example.mybatis01.bean.Customer id propertyid columnc_id/ result propertycustomerName columncustomer_name/ result propertyphone columnphone/ /association /resultMap总结传集合借助foreach返回集合association处理 “一对一”关联的是单个对象比如 “一个订单属于一个用户”订单对象里有一个User类型的属性。collection处理 “一对多”关联的是多个对象的集合比如 “一个用户有多个订单”用户对象里有一个ListOrder类型的属性。

相关新闻

麒麟v10安装mysql8

麒麟v10安装mysql8

麒麟v10安装mysql8(以arm架构为例) 1.查询Linux版本及架构 # 查看Linux架构 uname -m # 查看gblic版本,按照该版本下载mysql安装包 ldd --version2.准备mysql安装包 mysql安装包 3.安装环境检查 # 麒麟V10 sp3默认安装mariadb的&#x…

2026/7/7 3:04:36 阅读更多 →
前端高频面试总结--HTML CSS

前端高频面试总结--HTML CSS

####自用#### ...持续更新 目录 1、块级元素行内元素 2、HTML5 3、CSS3 4、定位 5、CSS权重 6、BFC 7、CSS SCSS Less 1、块级元素行内元素 块:h,p,ul,form,table,容器元素 行:span,a,img,input,button,select,textarea,strong,i,b 对比维度块…

2026/7/6 14:56:15 阅读更多 →
LFTP高级配置:自定义书签、别名与服务器特定设置指南

LFTP高级配置:自定义书签、别名与服务器特定设置指南

LFTP高级配置:自定义书签、别名与服务器特定设置指南 【免费下载链接】lftp sophisticated command line file transfer program (ftp, http, sftp, fish, torrent) 项目地址: https://gitcode.com/gh_mirrors/lf/lftp LFTP是一款功能强大的命令行文件传输程…

2026/7/7 5:15:28 阅读更多 →

最新新闻

Okbiye AI|科研发刊不用反复折腾,全等级期刊论文智能创作体系详解

Okbiye AI|科研发刊不用反复折腾,全等级期刊论文智能创作体系详解

okbiye-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/期刊论文期刊论文 - Okbiye智能写作https://www.okbiye.com/ai/qklw 一、独立期刊论文专属功能入口,细分普刊 / 核心 / SCI 三大发文赛道 Okbiye AI 写作平台左侧功能导航栏做了精细化学术分类&a…

2026/7/7 8:24:15 阅读更多 →
PHP 5.4-8.x RCE漏洞防御:从Pikachu靶场看4类关键安全编码实践

PHP 5.4-8.x RCE漏洞防御:从Pikachu靶场看4类关键安全编码实践

PHP 5.4-8.x RCE漏洞防御:从Pikachu靶场看4类关键安全编码实践在Web应用开发中,远程代码执行(RCE)漏洞始终是悬在开发者头顶的达摩克利斯之剑。Pikachu靶场通过精心设计的实验场景,揭示了PHP应用中常见的RCE漏洞成因与…

2026/7/7 8:24:15 阅读更多 →
Claude Code+GLM-4.7+VSCode:AI编程协作者的工程化落地实践

Claude Code+GLM-4.7+VSCode:AI编程协作者的工程化落地实践

1. 为什么这组组合正在悄悄取代 Cursor——一个一线开发者的实测观察最近三个月,我彻底停用了 Cursor,不是因为功能不好,而是它在真实项目节奏里开始“卡顿”:写一个中等复杂度的 Vue 组件要反复切换上下文,调试时 AI …

2026/7/7 8:20:14 阅读更多 →
Cloudreve安全加固实战:Nginx安全响应头配置详解与避坑指南

Cloudreve安全加固实战:Nginx安全响应头配置详解与避坑指南

1. 项目概述:为什么Cloudreve的安全加固刻不容缓?如果你正在公网环境运行Cloudreve,并且只是简单地用Nginx做了个反向代理,那你的文件服务可能正暴露在诸多安全风险之下。我见过太多案例,管理员只关心功能是否跑通&…

2026/7/7 8:18:14 阅读更多 →
上下文腐化:当大模型的长窗口变成“认知负担”

上下文腐化:当大模型的长窗口变成“认知负担”

上下文腐化:当大模型的长窗口变成“认知负担” 引言 从最初的4K、8K到如今的1M甚至10M,大模型的上下文窗口正在以惊人的速度膨胀。每一次窗口长度的刷新都被当作技术进步的标志来庆祝——仿佛更大的窗口就意味着更强的能力、更高的智能。 但一个残酷的…

2026/7/7 8:16:13 阅读更多 →
microG Services深度解析:实现无Google生态的Android应用兼容性

microG Services深度解析:实现无Google生态的Android应用兼容性

microG Services深度解析:实现无Google生态的Android应用兼容性 【免费下载链接】GmsCore Free implementation of Play Services 项目地址: https://gitcode.com/GitHub_Trending/gm/GmsCore microG Services是一个开源的Google Play Services替代框架&…

2026/7/7 8:16:13 阅读更多 →

日新闻

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

图片浏览是移动应用中最高频的场景之一。从社交应用的照片流到电商平台的商品图集,从旅游应用的景点相册到摄影作品展示——用户对图片浏览的体验要求不断提高:流畅的切换动画、直观的缩略图导航、便捷的收藏操作、自动播放模式。HarmonyOS NEXT ArkUI 虽…

2026/7/7 0:05:16 阅读更多 →
24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V稳压芯片完整选型指南 PW8600 PW75XX PW2815 PW2312B LDODC/DC全方案 一、24V稳压方案概述 24V直流电源在工业自动化、门禁系统、电梯控制、汽车电子、LED驱动、监控设备等场景中应用极广,是最常见的中压直流母线电压。要将24V母线稳定降压至下游MCU、传感器…

2026/7/7 0:05:16 阅读更多 →
RAG+知识图谱混合检索与Graph RAG核心对比

RAG+知识图谱混合检索与Graph RAG核心对比

做企业RAG落地的团队,往往容易卡在一容易踩坑的选型难题: 当需求单纯靠向量RAG搞不定、单纯靠知识图谱也搞不定,必须同时依赖「文本语义理解 实体关系推理」时,到底是做「向量图谱混合检索」就够了,还是必须上「Grap…

2026/7/7 0:07:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻