SSM框架整合MyBatis-Plus的步骤和简单用法示例
以下是 SSM框架整合MyBatis-Plus的步骤 和 简单用法示例:
一、SSM整合MyBatis-Plus步骤
1. 添加依赖(Maven)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>hirain-reader</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><repositories><!--创建私服地址--><repository><id>aliyun</id><name>aliyun</name><url>https://maven.aliyun.com/repository/public</url></repository></repositories><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.30</version></dependency><!--freemarker--><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.31</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>5.3.30</version></dependency><!--Jackson--><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.17.2</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.17.2</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.17.2</version></dependency><!--MyBatis--><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.30</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.13</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.7</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.8</version></dependency><!--单元测试依赖--><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.3.30</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version></dependency><!--logback日志组件--><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version></dependency><!--Mybatis-Plus--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus</artifactId><version>3.5.12</version></dependency></dependencies>
</project>
2. 配置数据源(applicationContext.xml
)
<!-- 数据源 -->
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource"><property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/><property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test_db?useSSL=false&serverTimezone=UTC"/><property name="username" value="root"/><property name="password" value="123456"/>
</bean><!-- SqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/><!-- 指定MyBatis配置文件(非必须) --><property name="configLocation" value="classpath:mybatis-config.xml"/><!-- 指定Mapper XML文件位置 --><property name="mapperLocations" value="classpath:mappers/*.xml"/>
</bean><!-- Mapper扫描器 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.example.mapper"/><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
3. 配置MyBatis-Plus(Java Config)
@Configuration
@MapperScan("com.example.mapper") // 指定Mapper接口所在的包
public class MyBatisPlusConfig {// 分页插件配置@Beanpublic PaginationInterceptor paginationInterceptor() {return new PaginationInterceptor();}
}
4. 编写实体类(Lombok简化)
@Data
@TableName("user") // 对应数据库表名
public class User {@TableId(type = IdType.AUTO) // 主键自增private Long id;private String name;private Integer age;private String email;
}
5. 编写Mapper接口
public interface UserMapper extends BaseMapper<User> {// 继承BaseMapper后,直接使用内置的CRUD方法(无需编写XML)
}
6. Service层调用
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {// 直接调用父类方法(如 save, remove, getById 等)
}
二、MyBatis-Plus 用法示例
示例1:基础CRUD操作
// 插入数据
User user = new User();
user.setName("张三");
user.setAge(25);
userService.save(user);// 查询单条
User user = userService.getById(1L);// 更新数据
user.setAge(26);
userService.updateById(user);// 删除数据
userService.removeById(1L);
示例2:条件构造器查询
// 查询年龄大于20的用户
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.gt("age", 20);
List<User> userList = userMapper.selectList(queryWrapper);// 模糊查询(LIKE)
queryWrapper.like("name", "张");
List<User> users = userMapper.selectList(queryWrapper);
示例3:分页查询
// 分页参数:当前页=1,每页=5条
Page<User> page = new Page<>(1, 5);
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.orderByAsc("age");
IPage<User> userPage = userMapper.selectPage(page, queryWrapper);// 获取分页结果
List<User> records = userPage.getRecords();
long total = userPage.getTotal();
示例4:逻辑删除
- 配置全局逻辑删除(
application.yml
):
mybatis-plus:global-config:db-config:logic-delete-field: isDeleted # 逻辑删除字段名logic-delete-value: 1 # 删除时标记值logic-not-delete-value: 0 # 未删除时标记值
- 实体类添加字段:
@TableLogic
private Integer isDeleted;
- 查询时会自动过滤已删除数据:
userMapper.selectList(null); // 自动忽略 isDeleted=1 的记录
示例5:自定义SQL
// 在Mapper接口中定义方法
@Select("SELECT * FROM user WHERE age > #{age}")
List<User> selectByAgeGreaterThan(@Param("age") Integer age);// 或通过XML配置(resources/mappers/UserMapper.xml)
<select id="selectByAgeGreaterThan" resultType="User">SELECT * FROM user WHERE age > #{age}
</select>
三、常见问题解决
-
依赖冲突
检查mybatis-spring
和mybatis-plus-boot-starter
版本是否兼容。 -
分页不生效
确保配置了PaginationInterceptor
,且SQL语句中有LIMIT
关键字。 -
表名或字段名不匹配
使用@TableName
和@TableField
注解显式指定。
通过以上步骤和示例,可以快速上手 SSM 整合 MyBatis-Plus,并利用其简化开发流程。
相关文章:
SSM框架整合MyBatis-Plus的步骤和简单用法示例
以下是 SSM框架整合MyBatis-Plus的步骤 和 简单用法示例: 一、SSM整合MyBatis-Plus步骤 1. 添加依赖(Maven) <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.…...
【LeetCode 热题 100】206. 反转链表
📌 难度:简单 📚 标签:链表、双指针、迭代、递归 🔗 题目链接(LeetCode CN) 🧩 一、题目描述 给你单链表的头节点 head,请你反转链表,并返回反转后的链表。 ✅…...
centos8.5.2111 更换阿里云源
使用前提是服务器可以连接互联网 1、备份现有软件配置文件 cd /etc/yum.repos.d/ mkdir backup mv CentOS-* backup/ 2、下载阿里云的软件配置文件 wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo 3、清理并重建…...

再度深入理解PLC的输入输出接线
本文再次重新梳理: 两线式/三线式传感器的原理及接线、PLC的输入和输出接线,深入其内部原理,按照自己熟悉的方式去理解该知识 在此之前,需要先统一几个基础知识点: 在看任何电路的时候,需要有高低电压差&…...

k8s(11) — 探针和钩子
钩子和探针的区别: 在 Kubernetes(k8s)中,钩子(Hooks)和探针(Probes)是保障应用稳定运行的重要机制,不过它们的用途和工作方式存在差异,以下为你详细介绍&…...

使用jmeter对数据库进行压力测试
🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 前言 很多人提到 jmeter时,只会说到jmeter进行接口自动化或接口性能测试,其实jmeter还能对数据库进行自动化操作。个人常用的场景有以下&…...
Scala与Go的异同教程
当瑞士军刀遇到电锯:Scala vs Go的相爱相杀之旅 各位准备秃头的程序猿们(放心,用Go和Scala不会加重你的发际线问题),今天我们来聊聊编程界的"冰与火之歌"——Scala和Go的异同。准备好瓜子饮料,我…...
LeetCode 热题 100 138. 随机链表的复制
LeetCode 热题 100 | 138. 随机链表的复制 大家好,今天我们来解决一道经典的链表问题——随机链表的复制。这道题在 LeetCode 上被标记为中等难度,要求深拷贝一个带有随机指针的链表。 问题描述 给你一个长度为 n 的链表,每个节点包含一个额…...

Kubernetes生产实战(十四):Secret高级使用模式与安全实践指南
一、Secret核心类型解析 类型使用场景自动管理机制典型字段Opaque (默认)自定义敏感数据需手动创建data字段存储键值对kubernetes.io/dockerconfigjson私有镜像仓库认证kubelet自动更新.dockerconfigjsonkubernetes.io/tlsTLS证书管理Cert-Manager可自动化tls.crt/tls.keykube…...

05 mysql之DDL
一、SQL的四个分类 我们通常可以将 SQL 分为四类,分别是: DDL(数据定义语言)、DML(数据操作语言)、 DCL(数据控制语言)和 TCL(事务控制语言)。 DDL 用于创建…...

电池热管理CFD解决方案,为新能源汽车筑安全防线
在全球能源结构加速转型的大背景下,新能源汽车产业异军突起,成为可持续发展的重要驱动力。而作为新能源汽车 “心脏” 的电池系统,其热管理技术的优劣,直接决定了车辆的安全性、续航里程和使用寿命。电池在充放电过程中会产生大量…...
使用互斥锁保护临界
Linux线程互斥及相关概念解析 1. 临界资源(Critical Resource) 定义:被多个线程共享的资源(如变量、文件、内存区域等),需通过互斥访问确保数据一致性。特点: 共享性:多个线程可能…...
Android第三次面试总结之网络篇补充
一、网络模型:OSI 七层 vs TCP/IP 四层(必考点) 1. 分层模型对比 OSI 七层模型TCP/IP 四层模型核心功能Android 相关场景应用层(7 层)应用层定义数据格式(HTTP/HTTPS/FTP/API)OkHttp/Retrofit…...
网络世界的“快递站”:深入浅出OSI七层模型
网络世界的“快递站”:OSI七层模型的奇妙旅程 为什么需要OSI七层模型? 想象一下,你正在给朋友寄一份生日礼物。你需要先包装礼物、贴上地址标签、选择快递公司、支付运费,最后把包裹交给快递员。这个过程看似简单,但…...
使用 Apache POI 生成包含文本和图片的 Word 文档
一、概述 在实际开发场景中,我们经常需要自动生成包含文本和图片的 Word 文档。本示例借助 Apache POI 库,实现了向 Word 文档中插入文本和图片的功能。代码会循环插入多次文本和同一张图片,并且对图片进行等比缩放处理,以保证图片…...

TransmittableThreadLocal:穿透线程边界的上下文传递艺术
文章目录 前言一、如何线程上下文传递1.1 ThreadLocal单线程1.2 InheritableThreadLocal的继承困境1.3 TTL的时空折叠术 二、TTL核心设计解析2.1 时空快照机制2.2 装饰器模式2.3 采用自动清理机制 三、设计思想启示四、实践启示录结语 前言 在并发编程领域,线程上下…...

基于STM32的甲醛检测
一、制作目标 以正点原子的miniSTM32F103RCT6开发板为主控,使用甲醛传感器检测环境空气中的甲醛含量(以mg/m^3为单位)、C02含量(以ppm为单位)和总有机挥发物含量TVOC(以mg/m^3为单位)在OLED显示…...

洛图报告中的 FSHD 是什么?—— 解密九天画芯推动的三色光源显示技术
目录 一、洛图报告新焦点:FSHD 为何成为显示产业重要突破方向? (一)洛图报告核心结论:从技术突围到产业重构 二、技术解析:FSHD 如何重构显示底层逻辑? (一)物理架构…...
含锡电镀废水深度净化技术体系解析化利用的全流程优化
一、含锡电镀废水的产生机理与污染特征 含锡电镀废水主要形成于三个关键生产环节:镀槽液定期置换排放、镀件后处理清洗水以及车间地面冲洗水。其中,清洗水作为电镀工艺的附属产物,承担着清除镀层表面残留镀液的重要功能;冲刷废水则…...

【MySQL】事务(重点)
目录 一、什么是事务: 二、事务的前置知识了解 引擎是否支持事务 事务的提交方式 事务操作的前置准备: 三、事务回滚: 四、事务崩溃: 原子性: 持久性: 五、自动提交和手动提交: 六、…...

Linux:线程同步与互斥
目录 线程互斥 锁 初始化 销毁 加锁 解锁 线程同步 条件变量 初始化 销毁 等待条件满足 唤醒等待 pthread_cond_signal pthread_cond_broadcast 生产者消费者模型 3种关系 2种角色 1个交易场所 POSIX信号量 初始化 销毁 等待 发布 线程互斥 互斥相关…...

每天五分钟机器学习:拉格朗日对偶函数
本文重点 在数学优化领域,拉格朗日对偶函数作为连接原始约束问题与对偶问题的核心纽带,展现了将复杂约束优化转化为无约束优化的方式。 数学表达 原始问题建模 拉格朗日函数构造 此时的目标就是: 先假设w为常数,让拉格朗日函数对橙子变量λ求极大值,消掉λ之后,在对λ求…...

AutoGen 框架解析:微软开源的多人 Agent 协作新范式
一、引言 在大语言模型(LLM)快速发展的今天,复杂任务的自动化协作需求日益增长。微软开源的AutoGen 框架(GitHub Star 超 10 万)提供了一种基于多智能体对话的协作范式,通过自然语言交互实现多角色 Agent …...

【bibtex4word】在Word中高效转换bib参考文献,Texlive环境安装bibtex4word插件
前言 现已退出科研界,本人水货一个。希望帮到有缘人 本篇关于如何将latex环境中的参考文献bib文件转化为word,和一些踩坑记录。 可以看下面的资料进行配置,后面的文字是这些资料的补充说明。 参考文章:https://blog.csdn.net/g…...
Listremove数据时报错:Caused by: java.lang.UnsupportedOperationException
看了二哥的foreach陷阱后,自己也遇见了需要循环删除元素的情况,立马想到了当时自己阴差阳错的避开所有坑的解决方式:先倒序遍历,再删除。之前好使,但是这次不好使了,报错Caused by: java.lang.UnsupportedO…...
k8s node 报IPVS no destination available
在 Kubernetes 集群中,IPVS no destination available 错误通常表示 kube-proxy(IPVS 模式)无法为 Service 找到可用的后端 Pod。这会导致流量无法正确转发,影响服务可用性。以下是详细的排查和解决方法: 一、错误原因…...

单片机-STM32部分:10-2、逻辑分析仪
飞书文档https://x509p6c8to.feishu.cn/wiki/VrdkwVzOnifH8xktu3Bcuc4Enie 安装包如下:根据自己的系统选择,目前这个工具只有window版本哦 安装方法比较简单,都按默认下一步即可,注意不要安装到中文路径哦。 其余部分参考飞书文档…...

计算机网络基础科普
IP地址是计算机网络中标识设备的唯一地址 IPv4(32位)IPv6(128位) 1.IPv4(32位) 简介:IPv4(Internet Protocol version 4)是互联网协议(IP)的…...

阿里云CDN的源站配置:权重的详解
在阿里云CDN中为静态资源域名cdn.example.com配置源站时,权重设置需根据实际架构和目标灵活调整。以下是具体建议和配置步骤: 一、权重的核心作用 在阿里云CDN中,源站权重用于控制多个源站之间的流量分配比例,适用于以下场景&…...
《Python星球日记》 第37天:向量与矩阵进阶
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏:《Python星球日记》,限时特价订阅中ing 目录 一、特征值与特征向量1. 基本概念2. 如何找到特征值和特征向量3. 特征值和特征向量的几何意义二…...