[Mybatis-plus]

简介

        MyBatis-Plus (简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变。Mybatis-plus官网地址

        注意,在引入了mybatis-plus之后,不要再额外引入mybatis和mybatis-spring,避免因为版本差异导致的问题。

快速上手

1.导入依赖

根据自身环境的版本选择mybatis-plus版本:

springboot3.+和jdk17以上版本选择mybatis-plus-boot3-starter

<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot3-starter</artifactId><version>yourversion</version>
</dependency>

其他老版本选择mybatis-plus-boot-starter

<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-spring-boot3-starter -->
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot-starter</artifactId><version>yourversion</version>
</dependency>

2.编写配置:

jdbc连接配置(username、password、驱动)

Mybatis配置(连接池对象、映射文件所在包等)

编写配置的具体形式看自己使用的是spring还是springboot

3.编写实体类和mapper接口

        plus提供了一系列默认的sql方法,仅测试可以不用额外自己编写。

常用注解

        先看一个示范实体类:

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;@TableName("user")
public class MyUser {@TableId(value = "id", type = IdType.AUTO)private int id;@TableField("name")private String name;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "MyUser{" +"id=" + id +", name='" + name + '\'' +'}';}
}

@TableName

        用于指定当前实体类对应数据库中哪张表

@TableId

        给属性绑定表中的主键,其中type属性是声明主键策略:

IdType.AUTO    数据库自增主键(需数据库支持,如 MySQL 的 AUTO_INCREMENT)

IdType.ASSIGN_ID    雪花算法生成 Long 类型主键(默认策略)

IdType.ASSIGN_UUID    UUID 生成字符串类型主键(需字段类型为 String)

IdType.INPUT    手动输入主键(需在代码中赋值)

IdType.NONE    无策略,依赖数据库默认行为

@TableField

        给属性绑定表中的列

        当然,上述是对应单表的时候。如果你的查询结果对应多张表中的数据,就不再能够用这三个注解了。

        我们在多表查询的语句中使用别名,mybatis会自动匹配查询结果和实体类的数据:

// DTO 类(无需继承任何基类)
public class UserOrderDTO {// 用户表字段private Long userId;private String userName;// 订单表字段private String orderId;private BigDecimal orderAmount;// 其他字段(如关联表的统计信息)private Integer totalOrders;// Getters & Setters
}
<!-- XML 中编写 SQL -->
<select id="selectUserOrders" resultType="com.example.dto.UserOrderDTO">SELECT u.id          AS userId,u.name        AS userName,o.order_id    AS orderId,o.amount      AS orderAmount,COUNT(o.id)   AS totalOrdersFROM user uLEFT JOIN order o ON u.id = o.user_idWHERE u.id = #{userId}GROUP BY u.id
</select>

条件构造器

        条件构造器的相关功能通过一系列Wrapper类实现。

下面是两组示范:

sql语句:select name,email from tb_user where address like 值1 and age>=值2;

QueryWrapper<User> queryWrapper = new QueryWrapper<User>();queryWrapper.select("name","email").like("address","a").gt("age","30");

sql语句:update tb_user set age = age+10 where uid in(1,3,5);

UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();updateWrapper.setSql("age = age+10").in("uid", Arrays.asList(1,3,5));

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

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

相关文章

管理100个小程序-很难吗

20公里的徒步-真难 群里的伙伴发起了一场天目山20公里徒步的活动&#xff0c;想着14公里都轻松拿捏了&#xff0c;思考了30秒后&#xff0c;就借着春风带着老婆孩子就出发了。一开始溪流清澈见底&#xff0c;小桥流水没有人家&#xff1b;青山郁郁葱葱&#xff0c;枯藤老树没有…

大模型工业化元年:GPT-5开启通用AI新纪元,中国技术如何破局?

过去一周&#xff0c;AI领域的焦点无疑是OpenAI发布的GPT-5预览版&#xff0c;以及全球大模型技术从实验室迈向工业化的关键转折。这场变革不仅标志着通用人工智能&#xff08;AGI&#xff09;的进一步逼近&#xff0c;更掀起了全球产业链的竞争与反思。本文将从技术突破、产业…

软考【网络工程师】2023年5月上午题答案解析

1、固态硬盘的存储介质是()。 A 光盘 B 闪存 C 软盘 D 磁盘 答案是 B。 固态硬盘(Solid State Drive),简称 SSD,是用固态电子存储芯片阵列制成的硬盘,其存储介质是闪存(Flash Memory)。闪存具有非易失性,即在断电后仍能保留存储的数据,且读写速度快、抗震性强、能…

【速写】钩子与计算图

文章目录 前向钩子反向钩子的输入反向钩子的输出 前向钩子 下面是一个测试用的计算图的网络&#xff0c;这里因为模型是自定义的缘故&#xff0c;可以直接把前向钩子注册在模型类里面&#xff0c;这样会更加方便一些。其实像以前BERT之类的last_hidden_state以及pool_output之…

高级电影感户外街拍人像摄影后期Lr调色教程,手机滤镜PS+Lightroom预设下载!

调色介绍 高级电影感户外街拍人像摄影后期 Lr 调色&#xff0c;是运用 Adobe Lightroom 软件&#xff0c;对户外街拍的人像照片进行后期处理&#xff0c;以塑造出具有电影质感的独特视觉效果。此调色过程借助 Lr 丰富的工具与功能&#xff0c;从色彩、光影、对比度等多维度着手…

16.QT-Qt窗口-菜单栏|创建菜单栏|添加菜单|创建菜单项|添加分割线|添加快捷键|子菜单|图标|内存泄漏(C++)

Qt窗⼝是通过QMainWindow类来实现的。 QMainWindow是⼀个为⽤⼾提供主窗⼝程序的类&#xff0c;继承⾃QWidget类&#xff0c;并且提供了⼀个预定义的布局。QMainWindow包含⼀个菜单栏&#xff08;menu bar&#xff09;、多个⼯具栏(tool bars)、多个浮动窗⼝&#xff08;铆接部…

【kafka初学】启动执行命令

接上篇&#xff0c;启动&#xff1a;开两个cdm窗口 注意放的文件不要太深或者中文&#xff0c;会报命令行太长的错误 启动zookeeper bin\windows\zookeeper-server-start.bat config\zookeeper.properties2. 启动kafka-serve bin\windows\kafka-server-start.bat config\serv…

利用 Claw Cloud Run 免费应用部署前端网页

一、注册 使用注册180天的github账户注册Claw Cloud账户&#xff0c;可获得每月5$的免费配额官网链接 - https://run.claw.cloud/ &#xff08;ps&#xff1a;直接github账号登录应该就不用写了吧&#xff09; 二、创建应用 打开App Launchpad 点击Create AppCPU选0.1即可&a…

豆瓣图书数据采集与可视化分析(三)- 豆瓣图书数据统计分析

文章目录 前言一、数据读取与保存1. 读取清洗后数据2. 保存数据到CSV文件3. 保存数据到MySQL数据库 二、不同分类统计分析1. 不同分类的图书数量统计分析2. 不同分类的平均评分统计分析3. 不同分类的平均评价人数统计分析4. 不同分类的平均价格统计分析5. 分类综合分析 三、不同…

网络原理 - 3(UDP 协议)

目录 协议 应用层 xml json protobuffer 传输层 端口号&#xff08;Port&#xff09; UDP 协议 UDP 协议端格式 完&#xff01; 协议 网络通信中&#xff0c;协议是一个非常重要的概念。我们前面在网络原理中&#xff0c;就已经介绍了&#xff0c;为了统一各方网络&…

Java Agent 注入 WebSocket 篇

Agent 如果要对其进行Agent注入的编写&#xff0c;需要先理解三个名字premain&#xff0c;agentmain&#xff0c;Instrumentation premain方法在 JVM 启动阶段调用&#xff0c;一般维持权限的时候不会使用 agentmain方法在 JVM 运行时调用 常用的 Instrumentation实例为代理…

【深度强化学习 DRL 快速实践】近端策略优化 (PPO)

PPO&#xff08;2017&#xff0c;OpenAI&#xff09;核心改进点 Proximal Policy Optimization (PPO)&#xff1a;一种基于信赖域优化的强化学习算法&#xff0c;旨在克服传统策略梯度方法在更新时不稳定的问题&#xff0c;采用简单易实现的目标函数来保证学习过程的稳定性 解决…

笔试强训:Day2

一、字符串中找出连续最长的数字串(双指针) 字符串中找出连续最长的数字串_牛客题霸_牛客网 #include <iostream> #include <string> #include <cctype> using namespace std;int main() {//双指针string str;cin>>str;int nstr.size();int begin-1,l…

MySQL 详解之 InnoDB:核心特性深度剖析 (ACID, 事务, 锁, 外键, 崩溃恢复)

在 MySQL 的世界里,存储引擎是数据库管理系统的核心组成部分,它负责数据的存储和提取。MySQL 支持多种存储引擎,如 MyISAM, Memory, CSV 等,但自 MySQL 5.5 版本以来,InnoDB 成为了默认的存储引擎,也是绝大多数应用场景的首选。 为什么 InnoDB 如此重要并被广泛采用?因…

Java中正则表达式使用方法

1. 正则表达式概述 正则表达式&#xff08;Regular Expression&#xff0c;简称 Regex&#xff09;是一种用于匹配字符串的模式工具。在 Java 中&#xff0c;正则表达式通过 java.util.regex 包实现&#xff0c;主要涉及以下两个类&#xff1a; Pattern&#xff1a;表示一个编…

使用浏览器的Clipboard API实现前端复制copy功能

在前端开发中&#xff0c;复制文本到剪贴板的功能通常使用浏览器的 Clipboard API 实现。比如 navigator.clipboard.writeText 方法。以下是一个简单的案例&#xff0c;展示如何使用 Clipboard API 实现复制文本的功能。 基本用法 首先&#xff0c;你需要创建一个按钮&#x…

【因果推断】(二)CV中的应用

文章目录 因果表征学习因果图 (Causal Diagram)“后门准则”&#xff08;backdoor criterion&#xff09;和“前门准则”&#xff08;frontdoor criterion&#xff09;后门调整Visual Commonsense R-CNNCausal Intervention for Weakly-Supervised Semantic SegmentationCausal…

【iOS】alloc init new底层原理

目录 前言 alloc alloc核心操作 cls->instanceSize(extraBytes) calloc obj->initInstanceIsa init 类方法&#xff1a; 实例方法&#xff1a; new 前言 笔者最近在进行对OC语言源码的学习&#xff0c;学习源码的过程中经常会出现一些从来没有遇见过的函数&…

QT窗口相关控件及其属性

widget&#xff0c;PushButton&#xff0c;lineEdit等都是基于QWidget延展出来的 并不是完整的窗口&#xff0c;而是作为窗口的一部分 真正的窗口是QMainWindow 菜单栏 Qt中的菜单栏是通过QMenuBar这个类来实现的&#xff0c;一个主窗口最多只有一个菜单栏&#xff0c;位于主…

day47—双指针-平方数之和(LeetCode-633)

题目描述 给定一个非负整数 c &#xff0c;你要判断是否存在两个整数 a 和 b&#xff0c;使得 a^2 b^2 c 。 示例 1&#xff1a; 输入&#xff1a;c 5 输出&#xff1a;true 解释&#xff1a;1 * 1 2 * 2 5示例 2&#xff1a; 输入&#xff1a;c 3 输出&#xff1a;f…