首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

SpringCloud 系列教程:微服务的未来(二)Mybatis-Plus的条件构造器、自定义SQL、Service接口基本用法

  • 25-01-18 13:22
  • 2358
  • 7183
blog.csdn.net

本篇博客将深入探讨 MyBatis-Plus 的三个核心功能:条件构造器、自定义 SQL 和 Service 接口的基本用法。通过对这些功能的学习和掌握,开发者能够更加高效地使用 MyBatis-Plus 进行业务开发。

目录

前言

条件构造器

 自定义SQL

 Service接口基本用法

总结


前言

在现代 Java 开发中,MyBatis-Plus(简称 MP)作为 MyBatis 的增强工具,已经成为了开发者提高开发效率的利器。它通过简化 MyBatis 的操作,提供了多种便捷的功能,如自动生成 SQL、内置条件构造器、分页查询等。与 MyBatis 相比,MyBatis-Plus 更加简洁和高效,尤其适用于快速开发场景。

本篇博客将深入探讨 MyBatis-Plus 的三个核心功能:条件构造器、自定义 SQL 和 Service 接口的基本用法。通过对这些功能的学习和掌握,开发者能够更加高效地使用 MyBatis-Plus 进行业务开发。


条件构造器

MyBatisPlus支持各种复杂的where条件,可以满足日常开发的所有需求。

查询名字中带o的,存款大于等于1000猿的人的id、username、info、balance字段

select id,username,info,balance from user where username like ? and balance >= ?
  1. @Test
  2. void testQueryUser() {
  3. //构造查询条件
  4. QueryWrapper wrapper = new QueryWrapper()
  5. .select("id","username","info","balance")
  6. .like("username","o")
  7. .ge("balance",1000);
  8. //查询
  9. List userList = userMapper.selectList(wrapper);
  10. userList.forEach(System.out::println);
  11. }

 

更新用户名为jack的用户的余额为2000

update user set balance = 2000 where username = "jack"
  1. @Test
  2. void testUpdateByQueryMapper() {
  3. //需要更新的数据
  4. User user = new User();
  5. user.setBalance(2000);
  6. //更新的条件
  7. QueryWrapper wrapper = new QueryWrapper()
  8. .eq("username","jack");
  9. //执行更新
  10. userMapper.update(user,wrapper);
  11. }
  1. @Test
  2. void testUpdateByQueryMapper() {
  3. //更新的条件
  4. UpdateWrapper wrapper = new UpdateWrapper()
  5. .set("balance",20)
  6. .eq("username","Jack");
  7. //执行更新
  8. userMapper.update(null,wrapper);
  9. }

 

 更新id为1,2,4的用户的余额,扣200

update user set balance = balance - 200 where id in (1,2,4);
  1. @Test
  2. void testUpdateWrapper(){
  3. List ids = List.of(1L, 2L, 4L);
  4. UpdateWrapper wrapper = new UpdateWrapper()
  5. .setSql("balance = balance - 200")
  6. .in("id",ids);
  7. userMapper.update(null,wrapper);
  8. }

查询表中username模糊匹配o和balance >= 100的user中id、username、info、balance。

  1. @Test
  2. void testLambdaWrapper(){
  3. //构造查询条件
  4. LambdaQueryWrapper wrapper = new LambdaQueryWrapper()
  5. .select(User::getId,User::getUsername,User::getInfo,User::getBalance)
  6. .like(User::getUsername,"o")
  7. .ge(User::getBalance,100);
  8. List users = userMapper.selectList(wrapper);
  9. users.forEach(System.out::println);
  10. }

 

条件构造器的用法:

  • QueryWrapper和LambdaQueryWrapper通常用来构建select、delete、update的where条件部分
  • UpdateWrapper和LambdaUpdateWrapper通常只有在set语句比较特殊才使用
  • 尽量使用LambdaQueryWrapper和LambdaUpdateWrapper避免硬编码 

 自定义SQL

我们可以利用MyBatisPlus的Wrapper来构建复杂的Where条件,然后自己定义SQL语句中剩下的部分。

将id在指定范围内的用户(例如1,2,4)的余额扣减指定值。

  1. <update id = "updateBalanceByIds">
  2. update user set balance = balance - #{amount}
  3. where id in
  4. "ids" separator=",",item="id" open="(" close=")">
  5. #{id}

我们可以利用MvBatis Plus的包装器来构建复杂的Where条件,然后自己定义SOL语句中剩下的部分。

(1)基于包装器构建其中条件

  1. List ids = List.of(1L, 2L, 4L);
  2. //构建条件
  3. LambdaQueryWrapper wrapper = new LambdaQueryWrapper()
  4. .in(User::getId,ids);
  5. //自定义SQL方法调用
  6. userMapper.updateBalanceByIds(wrapper,amount);

(2)在mapper方法参数中用Param注解声明wrapper变量名称,必须是ew

void updateBalanceByIds(@Param("ew") LambdaQueryWrapper wrapper,@Param("amount") int amount);

(3)自定义SQL,并使用Wrapper条件

  1. "updateBalanceByIds">
  2. update user set balance = balance - #{amount} ${ew.customSqlSegment}

userMapper类

  1. package com.itheima.mp.mapper;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  4. import com.baomidou.mybatisplus.core.toolkit.Constants;
  5. import com.itheima.mp.domain.po.User;
  6. import org.apache.ibatis.annotations.Param;
  7. public interface UserMapper extends BaseMapper {
  8. void updateBalanceByIds(@Param(Constants.WRAPPER)LambdaQueryWrapper wrapper, @Param("amount") int amount);
  9. }

测试方法

  1. @Test
  2. void testCustomSqlUpdate(){
  3. //更新条件
  4. List ids = List.of(1L, 2L, 4L);
  5. int amount = 200;
  6. //定义条件
  7. LambdaQueryWrapper wrapper = new LambdaQueryWrapper()
  8. .in(User::getId,ids);
  9. //自定义方法
  10. userMapper.updateBalanceByIds(wrapper,amount);
  11. }

 Service接口基本用法

自定义接口需要去继承IService接口,实现类需要继承ServiceImpl

IUserService接口

  1. package com.itheima.mp.service;
  2. import com.baomidou.mybatisplus.extension.service.IService;
  3. import com.itheima.mp.domain.po.User;
  4. import org.springframework.stereotype.Service;
  5. public interface IUserService extends IService {
  6. }

UserServiceImpl类

  1. package com.itheima.mp.service.impl;
  2. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  3. import com.itheima.mp.domain.po.User;
  4. import com.itheima.mp.mapper.UserMapper;
  5. import com.itheima.mp.service.IUserService;
  6. import org.springframework.stereotype.Service;
  7. @Service
  8. public class UserServiceImpl extends ServiceImpl implements IUserService {
  9. }

 测试类

  1. package com.itheima.mp.service;
  2. import com.itheima.mp.domain.po.User;
  3. import org.junit.jupiter.api.Test;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.boot.test.context.SpringBootTest;
  6. import java.time.LocalDateTime;
  7. @SpringBootTest
  8. class IUserServiceTest {
  9. @Autowired
  10. private IUserService userService;
  11. @Test
  12. void testsaveUser(){
  13. User user = new User();
  14. user.setUsername("XiaoHong");
  15. user.setPassword("123456");
  16. user.setPhone("18688990982");
  17. user.setBalance(1500);
  18. user.setInfo("{\"age\": 23, \"intro\": \"英文老师\", \"gender\": \"female\"}");
  19. user.setCreateTime(LocalDateTime.now());
  20. user.setUpdateTime(LocalDateTime.now());
  21. userService.save(user);
  22. }
  23. }

 


总结

通过本篇博客的讲解,开发者应该对 MyBatis-Plus 的三个核心功能有了一个清晰的认识:

  1. 条件构造器(QueryWrapper)使得查询条件构建更加简洁,极大减少了编写 SQL 语句的复杂度。
  2. 自定义 SQL 使得在复杂的业务需求下能够灵活应对,提供了更大的自由度。
  3. Service 接口基本用法 通过继承 ServiceImpl,大大简化了 CRUD 操作的实现,提升了开发效率。

这些功能不仅能够帮助我们提高开发效率,还能够减少代码冗余,提升代码的可读性和维护性。在实际的开发中,MyBatis-Plus 提供的这些工具将是日常工作中的好帮手。

希望通过本篇博客,读者能够更好地理解 MyBatis-Plus,提升自己的开发技能,快速构建高效、优雅的业务系统。

注:本文转载自blog.csdn.net的程序猿零零漆的文章"https://blog.csdn.net/m0_63267251/article/details/144717253"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

103
后端
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top