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

常用注解

基本约定

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

public interface UserMapper extends BaseMapper<User> 

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

常见注解

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

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

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

在这里插入图片描述

条件构造器

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

Wrapper

更新李四的年龄为20

@Service
public class UserService {@Autowiredprivate 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 userset age = age + #{age} ${ew.customSqlSegment}</update>

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python的课后练习总结4(while循环)

for循环用于针对序列中的每个元素的一个代码块。 while循环是不断的运行&#xff0c;直到指定的条件不满足为止。 while 条件&#xff1a; 条件成立重复执行的代码1 条件成立重复执行的代码2 …….. i 1while i < 5:print(i)i i 11、使用wh…

后端中的Dao层、Service层、Impl层、utils层、Controller层

Java Dao层 dao层叫数据访问层&#xff0c;全称为data access object&#xff0c;属于一种比较底层&#xff0c;比较基础的操作&#xff0c;具体到对于某个表、某个实体的增删改查&#xff0c;对外提供稳定访问数据库的方法 Mapper:&#xff08;DAO&#xff09; 访问数据库&am…

工作中人员离岗识别摄像机

工作中人员离岗识别摄像机是一种基于人工智能技术的智能监控设备&#xff0c;能够实时识别员工离岗状态并进行记录。这种摄像机通常配备了高清摄像头、深度学习算法和数据处理系统&#xff0c;可以精准地监测员工的行为&#xff0c;提高企业的管理效率和安全性。 工作中人员离岗…

TDD-LTE TAU流程

目录 1. TAU成功流程 1.1 空闲态TAU 1.2 连接态TAU 2. TAU失败流程 当UE进入一个小区&#xff0c;该小区所属TAI不在UE保存的TAI list内时&#xff0c;UE发起正常TAU流程&#xff0c;分为IDLE和CONNECTED&#xff08;即切换时&#xff09;下。如果TAU accept分配了一个新的…

Java程序设计——GUI设计

一、目的 通过用户图形界面设计&#xff0c;掌握JavaSwing开发的基本方法。 二、实验内容与设计思想 实验内容&#xff1a; 课本验证实验&#xff1a; Example10_6 图 1 Example10_7 图 2 图 3 Example10_15 图 4 设计思想&#xff1a; ①学生信息管理系统&#xff1a…

如何在2024年编写Android应用程序

如何在2024年编写Android应用程序 本文将介绍以下内容&#xff1a; 针对性能进行优化的单活动多屏幕应用程序 &#x1f92b;&#xff08;没有片段&#xff09;。应用程序架构和模块化 → 每个层面。Jetpack Compose 导航。Firestore。应用程序架构&#xff08;模块化特征驱动…

JS 手写 new 函数

工作中我们经常会用到 new 关键字&#xff0c;new 一个构造函数生成一个实例对象&#xff0c;那么new的过程中发生了什么呢&#xff0c;我们今天梳理下 创建一个对象对象原型继承绑定函数this返回对象 先创建一个构造函数&#xff0c;原型上添加一个方法 let Foo function (n…

Python元组与字典的基础介绍

元组(tuple) 在Python中,元组是不可变的有序元素的序列 即创建后不可以被修改 创建方式val_name ([val],[val].....) #----------声明------------ tuple_1 (1,2,3) print(tuple_1)元组的运算 虽然说元组的额元素是不可以更改的,但元组之间可以使用,,*号进行运算,运算后会…

静态网页设计——宠物狗狗网(HTML+CSS+JavaScript)

前言 声明&#xff1a;该文章只是做技术分享&#xff0c;若侵权请联系我删除。&#xff01;&#xff01; 感谢大佬的视频&#xff1a; https://www.bilibili.com/video/BV1nk4y1X74M/?vd_source5f425e0074a7f92921f53ab87712357b 使用技术&#xff1a;HTMLCSSJS&#xff08;…

can/CANFD数据记录仪——冬标神器

冬测案例 新能源电池在冬标中要测试电池的电性能&#xff0c;热管理&#xff0c;充电&#xff0c;SOC的性能电动车的关键组之一是动力电池&#xff0c;动力电池的表现&#xff0c;除了依赖自身的材料&#xff0c;工艺等硬件素质外&#xff0c;还依赖电池管理系统的表现&#xf…

小型洗衣机哪个牌子质量好?五款内衣洗衣机便宜好用的牌子推荐

随着大家工作的压力越来越大&#xff0c;下了班之后只能想躺平&#xff0c;在洗完澡之后看着还需要手洗的内衣裤真的很头疼。有些小伙伴还有会攒几天再丢进去洗衣机里面一起&#xff0c;而且这样子是非常不好的&#xff0c;用过的内衣裤长时间不清洗容易滋生细菌&#xff0c;而…

Java设计模式-享元模式

目录 一、网站项目需求 二、传统方案 三、享元模式 &#xff08;一&#xff09;基本介绍 &#xff08;二&#xff09;原理类图 &#xff08;三&#xff09;内部状态和外部状态 &#xff08;四&#xff09;享元模式解决网站展现项目 &#xff08;五&#xff09;注意事项…

Linux系统安全

作为一种开放源代码的操作系统&#xff0c;linux服务器以其安全、高效和稳定的显著优势而得以广泛应用。 账号安全控制 用户账号是计算机使用者的身份凭证或标识&#xff0c;每个要访问系统资源的人&#xff0c;必须凭借其用户账号 才能进入计算机.在Linux系统中&#xff0c;提…

继电器光耦在微控制器中的应用

继电器是电子系统中的重要组件&#xff0c;用作使用低功率信号控制高功率电路的开关。继电器与微控制器的集成在各种应用中变得越来越普遍。该领域的一个重大进步是继电器光耦合器的使用&#xff0c;这是一种增强基于微控制器的系统的性能和可靠性的关键技术。 继电器光耦概述…

web3d-three.js场景设计器-TransformControls模型控制器

场景设计器-TransformControls 控制器 该控制器可以指定模型进入可控制模式-如图有三种控制方式 translate --移动模式 rotate -- 旋转模式 scale -- 缩放模式 方便布局过程中快捷对模型进行摆放操作。 引入方式 import { TransformControls } from three/examples/jsm/…

2024程序员应对挑战新方式竟然是……

2024年即将来临&#xff0c;无论2023是顺心还是不如意&#xff0c;一切都已经成为了过去式。无论在过去我们是陷入了一时的困窘&#xff0c;还是沉浸在繁花似锦的喜悦&#xff0c;我们都要保持头脑冷静&#xff0c;不被眼前迷障所困&#xff1b;我们任然要勇往直前&#xff0c;…

如何在Linux上部署1Panel面板并远程访问内网Web端管理界面

文章目录 前言1. Linux 安装1Panel2. 安装cpolar内网穿透3. 配置1Panel公网访问地址4. 公网远程访问1Panel管理界面5. 固定1Panel公网地址 前言 1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。高效管理,通过 Web 端轻松管理 Linux 服务器&#xff0c;包括主机监控、…

看CHAT如何判断php Imagick writeImages写入gif已经完毕

CHAT回复&#xff1a;Imagick::writeImages() 是同步执行的&#xff0c;也就是说这个函数会阻塞直到 GIF 文件被完全写出。所以如果这个函数没有报错并成功返回&#xff0c;那么你可以认为 GIF 文件已经被完全写出了。 如果你想要在写出 GIF 文件后立即做一些操作&#xff08;例…

使用Gitea搭建自己的git远程仓库

Gitea 为什么需要自建仓库 原因只有一个&#xff1a;折腾。其实国内的码云加上github已经足够用了。 官方原话 Gitea 的首要目标是创建一个极易安装&#xff0c;运行非常快速&#xff0c;安装和使用体验良好的自建 Git 服务。我们采用 Go 作为后端语言&#xff0c;这使我们…

跟着cherno手搓游戏引擎【3】事件系统和预编译头文件

不多说了直接上代码&#xff0c;课程中的架构讲的比较宽泛&#xff0c;而且有些方法写完之后并未测试。所以先把代码写完。理解其原理&#xff0c;未来使用时候会再此完善此博客。 文件架构&#xff1a; Event.h:核心基类 #pragma once #include"../Core.h" #inclu…