MyBatisPlus学习二:常用注解、条件构造器、自定义sql

news2024/9/21 16:35:40

常用注解

基本约定

MybatisPlus通过扫描实体类,并基于反射获取实体类信息作为数据库表信息。可以理解为在继承BaseMapper 要指定对应的泛型

public interface UserMapper extends BaseMapper<User> 

实体类中,类名驼峰转下划线作为表名、名为id的字段作为主键、变量名驼峰转为下划线作为表的字段名

常见注解

  • @TableName :用于指定表名
  • @TableId:用于指定表中的主键字段信息
  • @TableField:用于指定表中的普通字段信息(变量名与数据库字段名不一致;变量名以is开头,并且是布尔类型;变量名与数据库关键字冲突的)

当实体类中类名和字段名不一致时可以使用上面的注解进行指定。使用时需要使用双引号,单引号好像会有问题

具体用法见官方文档:注解

在这里插入图片描述

条件构造器

mybatis-plus 支持各种复杂的where 条件,可以满足日常开发的所有需求,这里需要使用条件构造器。

Wrapper

更新李四的年龄为20

@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;

    // 查询用户
    public List<User> selectUser() {
        UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
        // 标签好像要用双引号
        updateWrapper.set("age", 20);
        // 条件
        updateWrapper.eq("name", "李四");
        // 更新
        int count = userMapper.update(null, updateWrapper);
        // 查询更新后的数据
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("name", "李四");
        List<User> userList = userMapper.selectList(queryWrapper);
        return userList;
    }
}

查询年龄大于20的男生的名称、年龄

 // 查询条件
 QueryWrapper<User> queryWrapper = new QueryWrapper<>();
 // 查询年龄大于20并且性别为男的用户的姓名、年龄
 queryWrapper
         .select("name", "age")
         .gt("age", 20)
         .eq("sex", 1);
 // 返回结果
 return userMapper.selectList(queryWrapper);

在这里插入图片描述

男生的年龄都加1

 UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
 // 条件
 updateWrapper.eq("sex", 1)
         .setSql("age = age+1");
 // 更新
 userMapper.update(null, updateWrapper);
 // 查询更新后的数据
 QueryWrapper<User> queryWrapper = new QueryWrapper<>();
 queryWrapper.eq("sex", 1);
 List<User> userList = userMapper.selectList(queryWrapper);
 return userList;

或者

public List<User> selectUser() {
    // 查询条件
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.eq("sex", 1);
    // 查询数据
    List<User> userList = userMapper.selectList(queryWrapper);
    for (User user : userList) {
        // 更新年龄
        user.setAge(user.getAge() + 1);
        userMapper.update(user, queryWrapper);
    }

    return userList;
}

查询id为1、2、3的用户

 // 查询条件
 QueryWrapper<User> queryWrapper = new QueryWrapper<>();
 List<Integer> ids = List.of(1, 2, 3);
 queryWrapper.in("id", ids);
 // 查询数据
 List<User> userList = userMapper.selectList(queryWrapper);
 return userList;

在这里插入图片描述

Lambda表达式

上面的操作需要指定字段名称,有时候可能会写错。这里可以使用 Lambda表达式来进行操作

查询年龄大于20的男生的名称、年龄

public List<User> selectUser() {
    // 查询条件
    LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
    queryWrapper
            .select(User::getName, User::getAge)
            .gt(User::getAge, 20);

    // 查询数据
    List<User> userList = userMapper.selectList(queryWrapper);
    return userList;
}

自定义sql

我们可以利用mybatis-pluswrapper 来构建复杂的where条件,然后自己定义sql语句剩下的部分。

基本步骤

  • 基于Wrapper 构建where 条件
// 1、构建条件
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(User::getId, 10);
// 调用自定义方法
userMapper.updateAgeById(queryWrapper, 1);
  • mapper方法参数中使用Param注解声明wrapper变量名称,必须是ew
void updateAgeById(@Param("ew") LambdaQueryWrapper<User> wrapper , @Param("age") int age);
  • 自定义sql,并且使用wrapper条件
 <!--
  相当于 update user set age = age + #{age} where id = #{id}
  只不过where条件是通过wrapper生成的
 -->
 <update id="updateAgeById">
     update user
        set age = age + #{age} ${ew.customSqlSegment}
 </update>

这里要注意,后面的条件是用的${}${}获取解析后的值,#{} 是占位符

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1367252.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

若依CRUD搬砖开始,Java小白入门(十)

背景 经过囫囵吞枣的学习若依框架&#xff0c;对于ruoyi-framework&#xff0c;common&#xff0c;安全&#xff0c;代码生成等模块都看了一圈&#xff0c;剩余的调度模块&#xff0c;这个暂时不深入&#xff0c;剩余的是ruoyi-system&#xff0c;就是用mybatis完成的&#xf…

基于算术优化算法优化的Elman神经网络数据预测 - 附代码

基于算术优化算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于算术优化算法优化的Elman神经网络数据预测 - 附代码1.Elman 神经网络结构2.Elman 神经用络学习过程3.电力负荷预测概述3.1 模型建立 4.基于算术优化优化的Elman网络5.测试结果6.参考文献7.Matlab代码 摘要&…

纯血国产:鸿蒙系统与安卓分道扬镳,对低代码开发行业的影响

近日&#xff0c;科技圈迎来了一则震动性的新闻——鸿蒙系统的“独立宣言”。这一举措意味着鸿蒙系统将与安卓、iOS形成三足鼎立之势&#xff0c;为全球科技市场注入新的活力。 据华为内部人士透露&#xff0c;从明年起&#xff0c;HarmonyOS系统将不再兼容安卓应用&#xff0c…

数模学习day08-拟合算法

这里拟合算法可以和差值算法对比 引入 插值和拟合的区别 与插值问题不同&#xff0c;在拟合问题中不需要曲线一定经过给定的点。拟 合问题的目标是寻求一个函数&#xff08;曲线&#xff09;&#xff0c;使得该曲线在某种准则下与所 有的数据点最为接近&#xff0c;即曲线拟…

springCould中的Hystrix【下】-从小白开始【8】

目录 &#x1f9c2;1.熔断机制❤️❤️❤️ &#x1f32d;2.修改8001服务 ❤️❤️❤️ &#x1f95e;3.测试 ❤️❤️❤️ &#x1f953;4. 服务监控hystrixDashboard❤️❤️❤️ &#x1f32d;5.仪表盘❤️❤️❤️ &#x1f9c2;6.仪表盘的使用 ❤️❤️❤️ 1.熔断机…

Linux的Inode号和日志服务管理

目录 一、Inode号 1.inode和block 2.查看inode信息 二、日志服务管理 1.日志的级别 2.日志的种类 3.日志的功能和日志文件的分类 4.日志的格式和分析工具 三、rsyslog日志处理系统 1、使用Rsyslog创建日志优点 2、Rsyslog配置文件解析 3.通过rsyslog将ssh服务的日志…

k8s---pod基础下

k8s的pod与docker重启策略的区别 k8s的重启策略 always deployment的yaml文件只能是always&#xff0c;pod的yaml三种模式都可以。不论正常退出还是非正常退出都重启。OnFailure&#xff1a;正常退出不重启&#xff0c;非正常退出会重启Never&#xff1a;正常退出和非正常退出…

宿舍安全用电监控系统解决方案

摘 要&#xff1a;很多高校宿舍的用电功率存在限制,为此设计了宿舍用电智能监控系统。系统由主控制器、采集部分、通信部分组成。利用STM32作为主控芯片,采集部分采用BL0937芯片采集电压和电流,采集多条线路用电数据,各路数据采集通道均采用隔离保护,通信部采用4G、LoRa无线通信…

系统架构设计师教程(十)软件可靠性基础知识

软件可靠性基础知识 10.1 软件架构演化和定义的关系10.1.1 演化的重要性10.1.2 演化和定义的关系 10.2 面向对象软件架构演化过程10.2.1 对象演化10.2.2 消息演化10.2.3 复合片段演化10.2.4 约束演化 10.3 软件架构演化方式的分类10.3.1 软件架构演化时期10.3.2 软件架构静态演…

Dockerfile基本结构及编写详解

文章目录 1 Dockerfile1.1 Dockerfile的基本结构1.2 Dockerfile文件说明1.3 Dockerfile常见命令1.4 build命令1.5 部署微服务1.6 docker-compose部署 1 Dockerfile ​ Dockerfile其实就是我们用来构建Docker镜像的源码&#xff0c;当然这不是所谓的编程源码&#xff0c;而是一…

用通俗易懂的方式讲解:2024 检索增强生成技术(RAG)研究进展

本篇内容1w字左右&#xff0c;稍微有点长&#xff0c;相对不容易理解&#xff0c;喜欢可以收藏、关注、点赞。 一、前言 在过去的一两年里&#xff0c;人工智能领域目睹了检索增强生成技术&#xff08;RAG&#xff09;的迅猛发展&#xff0c;这种技术结合了强大的语言模型与信…

百倍潜力股Aleo即将上线,布局正当时!牛市来时,你得有币!

前言 在加密货币市场&#xff0c;2024年被众多市场专家预测为迎来新一轮牛市的关键年份。这一预测背后&#xff0c;潜藏着多种可能推动牛市的因素。其中&#xff0c;下一次比特币&#xff08;BTC&#xff09;的减半事件&#xff0c;以及2024年 BTC 现货ETF的推出&#xff0c;都…

python统计分析——直方图(sns.histplot)

使用seanborn.histplot()函数绘制直方图 from matplotlib.pyplot as plt import seaborn as snsdata_setnp.array([2,3,3,4,4,4,4,5,5,6]) plt.hist(fish_data) &#xff08;1&#xff09;dataNone, 表示数据源。 &#xff08;2&#xff09;xNone, 表示直方图的分布垂直与x轴…

UG装配-爆炸图

当我们将零件装配成总成的时候&#xff0c;通常需要绘制爆炸图来说明总成零件组成&#xff0c;需要用到爆炸图命令&#xff0c;首先点击新建爆炸&#xff0c;然后为爆炸图命名 然后我们可以选择编辑爆炸或者自动爆炸&#xff1a; 编辑爆炸是通过手动的方式选择部件&#xff0c…

岁月匆匆,技术之光

岁月匆匆&#xff0c;技术之光 博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客&#x1f466;&#x1f3fb; 《java 面试题大全》 &#x1f369;惟余辈才疏学浅&#xff0c;临摹之作或有不妥之处&#xff0c;还请读者海涵指正。☕&#x1f36d; 《MYSQL从入门到精…

【洛谷学习自留】p9226 糖果

解题思路&#xff1a; 简单的计算题&#xff0c;用n对k取余&#xff0c;如果余数为0&#xff0c;则输出k的值&#xff0c;否则输出&#xff08;k-余数&#xff09;的值。 代码实现&#xff1a; import java.util.Scanner;public class p9226 {public static void main(Strin…

2024年如何借用电商新零售破局?新型商业模式——乐享甄选竞拍模式

2024年如何借用电商新零售破局&#xff1f;新型商业模式——乐享甄选竞拍模式 背景&#xff1a;经历疫情三年的黑天鹅&#xff0c;消费者对未来收入预期和不自信等悲观情绪&#xff0c;从而使得“勒紧腰带&#xff0c;少消费&#xff0c;不消费”&#xff0c;以简单实用成为了新…

全栈自动化测试面试题含答案和学习路线(适合各级软件测试人员)

在面试战场上&#xff0c;我们需要像忍者一样灵活&#xff0c;像侦探一样聪明&#xff0c;还要像无敌铁金刚一样坚定。只有掌握了这些技巧&#xff0c;我们才能在面试的舞台上闪耀光芒&#xff0c;成为那个令HR们心动的测试人 前言&#xff1a; 我相信大多测试开发的或多或少经…

图像去噪——CBDNet网络训练自己数据集及推理测试,模型转ONNX模型(详细图文教程)

CBDNet 主要由两个子网络组成&#xff1a;噪声估计子网络和去噪子网络。噪声估计子网络用于估计图像的噪声水平&#xff0c;而去噪子网络用于去除图像中的噪声。 CBDNet 的优势在于&#xff1a; 它采用了更真实的噪声模型&#xff0c;既考虑了泊松-高斯模型&#xff0c;还考虑…

01.Typora1.7.6安装以及更换主题方法

重所周知&#xff0c;程序员的笔记资料有多么重要&#xff0c;不仅是自我提升也是加强记忆 那么一定少不了Typora这个软件 今天就来感受一下它应该如何打开正确的安装的方法。 双击文件夹以后&#xff0c;里面会有这样两个文件 我们双击后缀为.exe的文件 更改安装位置&#…