当前位置: 首页 > news >正文

MyBatis Plus基本用法-SpringBoot框架

依赖

使用 Mybatis Plus 框架时,需要添加以下依赖:

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>latest-version</version>
</dependency>

其中,latest-version 为最新版本号,可以在官网或 Maven 仓库中查看。

此外,还需要添加与所使用的数据库连接相关的依赖。例如,如果使用 MySQL 数据库,需要添加以下依赖:

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.26</version>
</dependency>

如果使用 Oracle 数据库,需要添加以下依赖:

<dependency><groupId>com.oracle.database.jdbc</groupId><artifactId>ojdbc8</artifactId><version>19.3.0.0</version>
</dependency>

如果使用 PostgreSQL 数据库,需要添加以下依赖:

<dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId><version>42.2.23</version>
</dependency>

如果使用 SQL Server 数据库,需要添加以下依赖:

<dependency><groupId>com.microsoft.sqlserver</groupId><artifactId>mssql-jdbc</artifactId><version>9.4.0.jre11</version>
</dependency>

这些依赖可以根据实际需要进行选择和配置。

1. XML文件代码注释说明

数据库表生成

首先需要在数据库中创建一个user表,表结构如下:

CREATE TABLE `user` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`name` varchar(20) NOT NULL,`age` int(11) NOT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Mybatis Plus的增删改查

下面是使用XML文件进行增删改查操作的示例代码:

<!-- UserMapper.xml --><mapper namespace="com.example.mapper.UserMapper"><!-- 新增数据 --><insert id="insertUser" parameterType="com.example.entity.User">INSERT INTO user(name, age) VALUES (#{name}, #{age})</insert><!-- 根据id查询数据 --><select id="selectUserById" resultType="com.example.entity.User">SELECT * FROM user WHERE id = #{id}</select><!-- 更新数据 --><update id="updateUser" parameterType="com.example.entity.User">UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id}</update><!-- 根据id删除数据 --><delete id="deleteUserById">DELETE FROM user WHERE id = #{id}</delete><!-- 多表关联分组查询 --><select id="selectUserOrderCount" resultType="com.example.entity.UserOrderCount">SELECT u.name, u.age, COUNT(o.id) as order_count FROM user uLEFT JOIN `order` o ON u.id = o.user_idGROUP BY u.id</select><!-- 视图查询 --><select id="selectUserViewList" resultType="com.example.entity.UserView">SELECT * FROM user_view</select><!-- 存储过程查询 --><select id="callGetUserCount" statementType="CALLABLE" parameterType="java.util.Map">{CALL getUserCount(#{age, mode=IN, jdbcType=INTEGER}, #{count, mode=OUT, jdbcType=INTEGER})}</select></mapper>

2. Mapper文件代码注释

下面是使用Mapper文件调用上述方法的示例代码:

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;import java.util.List;
import java.util.Map;@Mapper
public interface UserMapper {// 新增数据void insertUser(User user);// 根据id查询数据User selectUserById(Long id);// 更新数据void updateUser(User user);// 根据id删除数据void deleteUserById(Long id);// 多表关联分组查询List<UserOrderCount> selectUserOrderCount();// 视图查询List<UserView> selectUserViewList();// 调用存储过程查询void callGetUserCount(Map<String, Object> paramMap);
}

3. SQL脚本

下面是提供相关建表、建视图、建存储过程和数据插入的SQL脚本:

-- 创建user表
CREATE TABLE `user` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`name` varchar(20) NOT NULL,`age` int(11) NOT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;-- 创建order表
CREATE TABLE `order` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`order_no` varchar(50) NOT NULL,`user_id` bigint(20) NOT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;-- 创建user_view视图
CREATE VIEW `user_view` AS 
SELECT u.name, u.age, COUNT(o.id) as order_count FROM user u 
LEFT JOIN `order` o ON u.id = o.user_id 
GROUP BY u.id;-- 创建存储过程getUserCount
CREATE PROCEDURE `getUserCount`(IN age INT, OUT count INT)
BEGINSELECT COUNT(*)INTO countFROM userWHERE age = age;
END;-- 插入测试数据
INSERT INTO user(name, age) VALUES ('张三', 18);
INSERT INTO user(name, age) VALUES ('李四', 20);
INSERT INTO user(name, age) VALUES ('王五', 22);INSERT INTO `order`(order_no, user_id) VALUES ('202201010001', 1);
INSERT INTO `order`(order_no, user_id) VALUES ('202201010002', 1);
INSERT INTO `order`(order_no, user_id) VALUES ('202201010003', 2);
INSERT INTO `order`(order_no, user_id) VALUES ('202201010004', 3);

4. YML文件代码注释说明

下面是使用YML文件进行Mybatis Plus的详细全面的配置的示例代码:

mybatis-plus:# mapper文件的路径mapper-locations: classpath:/mapper/*.xml# 实体类的包路径typeAliasesPackage: com.example.entityconfiguration:# 配置驼峰命名规则map-underscore-to-camel-case: true# 配置缓存cache-enabled: true# 配置多数据源# dataSource: com.baomidou.mybatisplus.spring.boot.starter.jdbc.MybatisPlusProperties$Druidglobal-config:# 配置逻辑删除字段db-config:logic-delete-field: deletedlogic-delete-value: 1logic-not-delete-value: 0# 配置分页插件page-helper:auto-dialect: truereasonable: truesupport-methods-arguments: true

5. Java文件代码注释

下面是使用Java文件进行实体类的示例代码:

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;@Data
@TableName("user")
public class User {@TableId(value = "id", type = IdType.AUTO)private Long id;@TableField("name")private String name;@TableField("age")private Integer age;}
import lombok.Data;@Data
public class UserOrderCount {private String name;private Integer age;private Integer orderCount;}
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;@Data
public class UserView {@TableField("name")private String name;@TableField("age")private Integer age;@TableField("order_count")private Integer orderCount;}

下面是使用Java文件进行Service和Controller的示例代码:

import com.baomidou.mybatisplus.extension.service.IService;public interface UserService extends IService<User> {void addUser(User user);User getUserById(Long id);void updateUser(User user);void deleteUserById(Long id);List<UserOrderCount> getUserOrderCount();List<UserView> getUserViewList();Integer getUserCountByAge(Integer age);}
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {@Overridepublic void addUser(User user) {baseMapper.insertUser(user);}@Overridepublic User getUserById(Long id) {return baseMapper.selectUserById(id);}@Overridepublic void updateUser(User user) {baseMapper.updateUser(user);}@Overridepublic void deleteUserById(Long id) {baseMapper.deleteUserById(id);}@Overridepublic List<UserOrderCount> getUserOrderCount() {return baseMapper.selectUserOrderCount();}@Overridepublic List<UserView> getUserViewList() {return baseMapper.selectUserViewList();}@Overridepublic Integer getUserCountByAge(Integer age) {Map<String, Object> paramMap = new HashMap<>();paramMap.put("age", age);paramMap.put("count", null);baseMapper.callGetUserCount(paramMap);return (Integer) paramMap.get("count");}}
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;@PostMapping("/add")public String addUser(@RequestBody User user) {userService.addUser(user);return "添加成功";}@GetMapping("/{id}")public User getUserById(@PathVariable Long id) {return userService.getUserById(id);}@PutMapping("/update")public String updateUser(@RequestBody User user) {userService.updateUser(user);return "更新成功";}@DeleteMapping("/{id}")public String deleteUserById(@PathVariable Long id) {userService.deleteUserById(id);return "删除成功";}@GetMapping("/orderCount")public List<UserOrderCount> getUserOrderCount() {return userService.getUserOrderCount();}@GetMapping("/viewList")public List<UserView> getUserViewList() {return userService.getUserViewList();}@GetMapping("/countByAge")public Integer getUserCountByAge(@RequestParam Integer age) {return userService.getUserCountByAge(age);}}

以上代码仅供参考,具体实现方式根据实际情况而定。

相关文章:

MyBatis Plus基本用法-SpringBoot框架

依赖 使用 Mybatis Plus 框架时&#xff0c;需要添加以下依赖&#xff1a; <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>latest-version</version> </dependency…...

指针--指针变量的定义和初始化

存放变量的地址需要一种特殊类型的变量&#xff0c;这种特殊的数据类型就是指针&#xff08;Pointer&#xff09;。 具有指针类型的变量&#xff0c;称为指针变量&#xff0c;它时专门用于存储变量的地址值和变量。 其定义形式如下&#xff1a; 类型关键字 * 指针变量名&#x…...

Web基本概念

一、前言 World Wide Web的简称&#xff0c;是一个由许多互相链接的超文本组成的系统&#xff0c;通过互联网访问 &#xff08;为用户提供信息&#xff09; 静态网页 仅适用于不能经常更改内容的网页&#xff1b; 动态网页 网络编程技术创建的页面&#xff1b;通过在传统的静态…...

Niagara—— Texture Sample 与 Particle Subuv 区别

目录 一&#xff0c;Texture Sample 二&#xff0c;Particle Subuv 一&#xff0c;Texture Sample 此节点是最基本的采样节点&#xff0c;依据UV坐标来采样Texture&#xff1b; MipValueMode&#xff0c;设置采样的Mipmap Level&#xff1b; None&#xff0c;根据当前Texture…...

如何在食品行业运用IPD?

食品是我国重要的民生产业之一&#xff0c;是保障和满足人民群众不断增长消费需求的重要支撑。食品指各种供人食用或者饮用的成品和原料以及按照传统既是食品又是药品的物品&#xff0c;包括加工食品&#xff0c;半成品和未加工食品&#xff0c;不包括烟草或只作药品用的物质。…...

如何用pandas进行条件分组计算?

Pandas提供了强大的分组聚合功能&#xff0c;可以轻松进行条件分组计算和统计。本文通过一个例子&#xff0c;展示如何使用Pandas的.groupby()和.agg()方法进行条件分组计算。 准备数据 假设有这样一个字典数据: dict { 姓名: [张三&#xff0c;李四&#xff0c;王五&#x…...

tomcat如何调优,涉及哪些参数?

Tomcat是一个流行的开源Java Servlet容器&#xff0c;用于部署和管理Java Web应用程序。调优Tomcat可以提高性能、并发处理能力和稳定性。以下是一些常见的Tomcat调优参数和技巧&#xff1a; 1.调整内存参数&#xff1a; -Xms&#xff1a;指定Tomcat启动时的初始堆内存大小。 -…...

java培训机构学校教学教务选课管理平台springboot+vue

近年来&#xff0c;随着培训机构机构规模的逐渐增大&#xff0c;人工书写的方式已经不能满足如此庞大的数据。为了更好的适应信息时代的高效性&#xff0c;一个利用计算机来实现培训机构教务管理工作的系统将必然诞生。基于这一点&#xff0c;设计了一个培训机构教务管理系统&a…...

半导体(TSS)放电管的两大选购注意事项及选型小策略

固体放电管&#xff0c;是以半导体工艺制作而成的&#xff0c;因此我们也称为半导体&#xff08;TSS&#xff09;放电管&#xff0c;它常在电路中并联使用&#xff0c;具备伏安特性。 TSS放电管在电路中类似开关&#xff0c;在正常工作时不动作&#xff0c;但一般被保护电路受到…...

05-使用Vue3 + Vue CLI 实现前端模块的搭建

1、环境准备 流程:安装node得到npm,使用npm安装vue cli(脚手架),使用vue cli创建项目。 Vue CLI版本和Node版本有关,用Node V12只能下载到Vue CLI V4.X,必须用Node V18才能下载到Vue CLI V5.X IDEA支持配置多个版本的Node,类似配置多个JDK。 node.js安装 1、官网下载…...

3.1 增加多进程执行playwright

增加了多进程的方式执行测试代码&#xff0c;对代码改动比较大 1、case case目录依然是自动生成 2、config dir_collection.py新增了配置 mkdir_collections [case,log,img, ] del_collections [results,report ] del_regex temp3、data/img/log/resource/video data/im…...

关于单片机的时钟浅谈及STM32F103/F030单片机的内外时钟切换问题

绪论 本文主要讲解单片机的时钟系统的相关知识&#xff0c;并进行超频测试&#xff0c;同时介绍如何在STM32F0单片机上进行内外时钟的切换&#xff0c;在不使用外部晶振或者外部晶振不启动时自动切换内部时钟的方法。 一、杂谈 问题来源于群里的一次问答&#xff1a; 诚然&…...

centos6.10环境下安装php7.4(基于WLNMP包)

centos6系统已经被官网停止维护&#xff0c;要安装软件必须用第三方的RPM包&#xff0c;下面使用yum安装php7.4正式版&#xff0c;当前基于WLNMP提供的一键安装包来安装 1、添加epel源 yum install epel-release yum install epel-release 2、添加WLNMP一键安装包源 rpm -iv…...

Qt使用第三方库openssl进行RSA加密解密操作详解

一、openssl库的编译,可以参考文档: https://blog.csdn.net/liang19890820/article/details/51658574/ 因为我这里使用的是windows操作系统,可以直接下载exe格式的安装文件,直接安装即可,就包含了我们需要的头文件和库文件,省去了编译操作。exe安装文件下载地址: htt…...

激发数学思维:GPT-4实证研究探索挑战性数学问题

深度学习自然语言处理 原创作者&#xff1a;wkk 考虑到自然语言在许多科学和工程领域表达的数学问题的丰富性&#xff0c;使用大语言模型(LLM)来解决数学问题是一项有趣的研究工作。今天给大家介绍一篇微软研究院联合欧美高校关于如何使用GPT-4解决数学问题的研究论文。 之前的…...

如何配置IP地址

一.自动获取IP 1.dhclient 2.ifconfig 通过这个命令可以查看系统有几块网卡和网卡的IP。 如果您的Linux有多块网卡&#xff0c;那么在Linux中它会显示成eth1, eth2 依此类推 二.手动配置IP 如果您的虚拟机不能自动获取IP&#xff0c;那么只能手动配置&#xff0c;配置方法为&am…...

CentOS + Nginx 环境自动申请和部署Let‘s Encrypt免费SSL证书教程

文章目录 步骤 1&#xff1a;安装Certbot工具步骤 2&#xff1a;配置Nginx服务器步骤 3&#xff1a;生成SSL证书步骤 4&#xff1a;配置Nginx以使用SSL证书步骤 5&#xff1a;重新加载Nginx配置步骤 6&#xff1a;自动续期证书 本文介绍如何在 CentOS Nginx 环境下&#xff0c…...

浅谈对BI工具价值的看法

浅谈对BI工具价值的看法 BI的定义看法 百度百科的定义&#xff1a; 商业智能&#xff08;Business Intelligence&#xff0c;简称&#xff1a;BI&#xff09;&#xff0c;又称商业智慧或商务智能&#xff0c;指用现代数据仓库技术、线上分析处理技术、数据挖掘和数据展现技术…...

创建定时任务

import schedule import timedef task():print("Im working...")if __name__ __main__:schedule.every(10).seconds.do(task) # 每10秒一次schedule.every(10).minutes.do(task) # 10分钟一次schedule.every().hour.do(task) # 每小时schedule.every().day.at(&q…...

MyBatis的使用、Spring AOP、Spring事务

一、MyBatis 的使用 1、环境配置 1.1、建库建表 -- 创建数据库 drop database if exists mycnblog; create database mycnblog DEFAULT CHARACTER SET utf8mb4;-- 使⽤数据数据 use mycnblog;-- 创建表[⽤户表] drop table if exists userinfo; create table userinfo(id in…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...

push [特殊字符] present

push &#x1f19a; present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中&#xff0c;push 和 present 是两种不同的视图控制器切换方式&#xff0c;它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...