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

MyBatis 写法

MyBatis 高效使用技巧

常见 MyBatis 使用技巧,这些技巧有助于简化数据库操作,提高开发效率,并增强系统的性能。

1. 动态 SQL

动态 SQL 让开发者能够依据参数灵活地构建 SQL 语句,避免了手动拼接字符串带来的复杂性和错误风险。

<select id="selectUsersByCondition" parameterType="map" resultType="User">SELECT * FROM users WHERE 1=1<if test="username != null">AND username = #{username}</if><if test="age != null">AND age = #{age}</if><if test="status != null">AND status = #{status}</if>
</select>
2. 批量操作

通过 <foreach> 标签可以轻松实现批量插入或更新,减少多次调用造成的性能损失。

<insert id="batchInsert" parameterType="list">INSERT INTO users (username, age)VALUES<foreach collection="list" item="user" separator=",">(#{user.username}, #{user.age})</foreach>
</insert>
3. 结果集映射 (resultMap)

当查询结果与实体类字段不匹配时,resultMap 可以帮助进行精确映射,适用于复杂的关联关系。

<resultMap id="userResultMap" type="User"><id property="id" column="user_id"/><result property="username" column="user_name"/><result property="age" column="user_age"/>
</resultMap>
4. 分页查询

利用分页插件(如 MyBatis-Plus 或 PageHelper)简化分页逻辑,无需手动处理 LIMITOFFSET

Page<User> page = new Page<>(1, 10); // 第一页,每页10条记录
List<User> users = userMapper.selectPage(page, new QueryWrapper<>());
5. 一对多关系映射

collection 标签用于处理一对多的关系,自动将子表数据封装到父对象中。

<resultMap id="userWithOrders" type="User"><!-- 省略主表映射 --><collection property="orders" ofType="Order"><id property="id" column="order_id"/><result property="amount" column="order_amount"/></collection>
</resultMap>
6. 注解与 XML 配合使用

结合 @Mapper 注解和 XML 映射文件,既保持了接口配置的简洁性,又实现了 SQL 的外部化管理。

@Mapper
public interface UserMapper {List<User> selectUsersByCondition(Map<String, Object> params);
}
7. 批量更新

同样可以通过 <foreach> 实现批量更新,减少数据库交互次数。

<update id="batchUpdateUsers" parameterType="list"><foreach collection="list" item="user" separator=";">UPDATE users SET username = #{user.username}, age = #{user.age} WHERE id = #{user.id}</foreach>
</update>
8. 复杂表达式处理

bind 标签允许在 SQL 中直接处理复杂的表达式,使代码更整洁。

<bind name="pattern" value="'%' + keyword + '%'"/>
<select id="selectUsersByKeyword" resultType="User">SELECT * FROM users WHERE username LIKE #{pattern}
</select>
9. 自定义类型处理器

为了解决 Java 类型与数据库类型的不一致问题,可以创建自定义类型处理器。

@MappedJdbcTypes(JdbcType.VARCHAR)
@MappedTypes(CustomType.class)
public class CustomTypeHandler extends BaseTypeHandler<CustomType> { /* ... */ }
10. 逻辑删除

逻辑删除是一种保留历史数据的删除方式,它只是标记记录为已删除状态。

<update id="deleteUser" parameterType="int">UPDATE users SET deleted = 1 WHERE id = #{id}
</update>
11. 分表策略

对于海量数据场景,分表策略能显著提升查询性能。注意防范 SQL 注入风险。

<select id="selectFromTable" resultType="User">SELECT * FROM ${tableName} WHERE id = #{id}
</select>
12. SQL 片段复用

使用 <sql> 标签定义可复用的 SQL 片段,减少重复代码。

<sql id="baseUserColumns">id, username, age, email
</sql>
13. 枚举类型映射

枚举类型处理器简化了枚举值与数据库字段间的映射,增强了代码的可读性。

@EnumTypeHandler(EnumTypeHandler.class)
public enum UserStatus {ACTIVE, INACTIVE;
}
14. 多数据源配置

多数据源配置有助于分离不同类型的数据,满足微服务架构下的需求。

@Configuration
public class MyBatisConfig {@Beanpublic SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();factoryBean.setDataSource(dataSource);return factoryBean.getObject();}
}
15. 延迟加载

延迟加载特性可以在需要时才加载关联数据,从而优化性能。

<settings><setting name="lazyLoadingEnabled" value="true"/>
</settings>

相关文章:

MyBatis 写法

MyBatis 高效使用技巧 常见 MyBatis 使用技巧&#xff0c;这些技巧有助于简化数据库操作&#xff0c;提高开发效率&#xff0c;并增强系统的性能。 1. 动态 SQL 动态 SQL 让开发者能够依据参数灵活地构建 SQL 语句&#xff0c;避免了手动拼接字符串带来的复杂性和错误风险。…...

Three城市引擎地图插件Geo-3d

一、简介 基于Three开发&#xff0c;为Three 3D场景提供GIS能力和城市底座渲染能力。支持Web墨卡托、WGS84、GCJ02等坐标系&#xff0c;支持坐标转换&#xff0c;支持影像、地形、geojson建筑、道路&#xff0c;植被等渲染。支持自定义主题。 二、效果 三、代码 //插件初始化…...

【贪心算法】洛谷P1106 - 删数问题

2025 - 01 - 22 - 第 46 篇 【洛谷】贪心算法题单 - 【贪心算法】 - 【学习笔记】 作者(Author): 郑龙浩 / 仟濹(CSND账号名) 目录 文章目录 目录P1106 删数问题题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示思路代码 P1106 删数问题 题目描述 键盘输入一个高…...

WPS计算机二级•幻灯片的页面布局

听说这是目录哦 设置PPT页面尺寸&#x1f5bc;️PPT母版怎么用&#x1f3a8;巧用PPT母版统一修改 字体颜色与背景&#x1f3a1;如何快速更改应用 幻灯片中的不同母版&#x1f451;能量站&#x1f61a; 设置PPT页面尺寸&#x1f5bc;️ 在制作PPT时&#xff0c;我们需要先选定一…...

从入门到精通:HttpClient深度剖析与实战指南

一、引言 1.1 背景引入 在当今数字化时代&#xff0c;网络编程已成为软件开发中不可或缺的一部分。而 HTTP 通信作为网络编程的核心&#xff0c;承担着客户端与服务器之间数据传输的重任。无论是 Web 应用、移动应用&#xff0c;还是分布式系统&#xff0c;HTTP 协议都扮演着…...

IoTDB 2025 春节值班与祝福

2025 春节快乐 瑞蛇迎吉庆&#xff0c;祥光映华年&#xff0c;2025 春节已近在眼前。社区祝福 IoTDB 的所有关注者、支持者、使用者 2025 新年快乐&#xff0c;“蛇”来运转&#xff01; IoTDB 团队的春节放假时间为 2025 年 1 月 27 日至 2 月 4 日&#xff0c;1 月 25 日、26…...

Java 大视界 -- Java 大数据中的隐私增强技术全景解析(64)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…...

【2024年华为OD机试】 (A卷,100分)- 整理扑克牌(JavaScriptJava PythonC/C++)

一、问题描述 题目描述 给定一组数字,表示扑克牌的牌面数字,忽略扑克牌的花色,请按如下规则对这一组扑克牌进行整理: 步骤1:分组形成组合牌 炸弹:当牌面数字相同张数大于等于4时。葫芦:3张相同牌面数字 + 2张相同牌面数字,且3张牌与2张牌不相同。三张:3张相同牌面数…...

周末总结(2024/01/25)

工作 人际关系核心实践&#xff1a; 要学会随时回应别人的善意&#xff0c;执行时间控制在5分钟以内 坚持每天早会打招呼 遇到接不住的话题时拉低自己&#xff0c;抬高别人(无阴阳气息) 朋友圈点赞控制在5min以内&#xff0c;职场社交不要放在5min以外 职场的人际关系在面对利…...

Apache Flink 概述学习笔记

一、引言 在大数据处理领域&#xff0c;Apache Flink 是一个极具影响力的开源流批一体化计算框架&#xff0c;它以其独特的架构和强大的功能&#xff0c;为大规模数据处理提供了高效、灵活的解决方案。 二、基本概念 Flink 是什么&#xff1a;Flink 是一个分布式流批处理框架…...

双足机器人开源项目

双足机器人&#xff08;也称为人形机器人或仿人机器人&#xff09;是一个复杂的领域&#xff0c;涉及机械设计、电子工程、控制理论、计算机视觉等多个学科。对于想要探索或开发双足机器人的开发者来说&#xff0c;有许多开源项目可以提供帮助。这些项目通常包括硬件设计文件、…...

Linux 部署 Java 项目:Tomcat、Redis、MySQL 教程

在 Linux 服务器上部署 Java 项目通常需要配置应用服务器&#xff08;如 Tomcat&#xff09;、数据库&#xff08;如 MySQL&#xff09;和缓存服务器&#xff08;如 Redis&#xff09;。本文将详细介绍如何在 Linux 环境中部署一个 Java 项目&#xff0c;涵盖 Tomcat、Redis 和…...

Django 多环境配置实战指南

在现代 Web 开发中,一个项目通常需要在多个环境中运行,例如开发环境、测试环境和生产环境。每个环境的配置可能不同,比如数据库连接、调试模式、密钥等。为了确保项目在不同环境中的灵活性和安全性,我们需要合理地管理多环境配置。 本文将详细介绍如何在 Django 项目中实现…...

【C++高并发服务器WebServer】-6:信号

本文目录 信号的概念1.1 core文件1.2 kill命令1.3 alarm函数1.4 setitimer调用1.5 signal捕捉信号1.6 信号集1.7 内核实现信号捕捉的过程1.8 sigaction1.9 sigchld 信号的概念 信号是 Linux 进程间通信的最古老的方式之一&#xff0c;是事件发生时对进程的通知机制&#xff0c…...

HBase的原理

一、什么是HBase HBase是一个分布式&#xff0c;版本化&#xff0c;面向列的数据库&#xff0c;依赖Hadoop和Zookeeper &#xff08;1&#xff09;HBase的优点 提供高可靠性、高性能、列存储、可伸缩、实时读写的数据库系统 (2) HBase 表的特性 Region包含多行 列族包含多…...

[b01lers2020]Life on Mars1

打开题目页面如下 看了旁边的链接&#xff0c;也没有什么注入点&#xff0c;是正常的科普 利用burp suite抓包&#xff0c;发现传参 访问一下 http://5edaec92-dd87-4fec-b0e3-501ff24d3650.node5.buuoj.cn:81/query?searchtharsis_rise 接下来进行sql注入 方法一&#xf…...

Go学习:常量

变量&#xff1a;程序运行期间&#xff0c;可以改变的量&#xff0c;变量声明需要使用 var 常量&#xff1a;程序运行期间&#xff0c;不可以改变的量&#xff0c;常量声明需要使用 const 目录 1. 常量不允许修改 2. 常量赋值不使用 : 3. 常量能够自动推导类型 1. 常量不允许…...

Python 爬虫——爬取Web页面图片

从网页页面上批量下载jpg格式图片&#xff0c;并按照数字递增命名保存到指定的文件夹。 Web地址&#xff1a;http://p.weather.com.cn/2017/06/2720826.shtml#p1 import urllib import urllib.request import re #正则表达式#解析页面 def load_page(url):requesturllib.reque…...

微信小程序1.1 微信小程序介绍

1.1 微信小程序介绍 内容提要 1.1 什么是微信小程序 1.2 微信小程序的功能 1.3 微信小程序使用场景 1.4 微信小程序能取代App吗 1.5 微信小程序的发展历程 1.6微信小程序带来的机会...

记录备战第十六届蓝桥杯的过程

1.学会了原来字符串也有比较方法&#xff0c;也就是字符串987 > 98 等等&#xff0c;可以解决拼最大数问题 题目链接&#xff1a;5.拼数 - 蓝桥云课 (lanqiao.cn) 2.今天又复习了一下bfs&#xff0c;感觉还是很不熟练&#xff0c;可能是那个过程我些许有点不熟悉&#xff…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06&#xff08;十亿美元&#xff09;。漏洞扫描服务市场行业预计将从 2024 年的 3.48&#xff08;十亿美元&#xff09;增长到 2032 年的 9.54&#xff08;十亿美元&#xff09;。预测期内漏洞扫描服务市场 CAGR&#xff08;增长率&…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 &#x1f37a; 最新版brew安装慢到怀疑人生&#xff1f;别怕&#xff0c;教你轻松起飞&#xff01; 最近Homebrew更新至最新版&#xff0c;每次执行 brew 命令时都会自动从官方地址 https://formulae.…...

关于easyexcel动态下拉选问题处理

前些日子突然碰到一个问题&#xff0c;说是客户的导入文件模版想支持部分导入内容的下拉选&#xff0c;于是我就找了easyexcel官网寻找解决方案&#xff0c;并没有找到合适的方案&#xff0c;没办法只能自己动手并分享出来&#xff0c;针对Java生成Excel下拉菜单时因选项过多导…...

实战三:开发网页端界面完成黑白视频转为彩色视频

​一、需求描述 设计一个简单的视频上色应用&#xff0c;用户可以通过网页界面上传黑白视频&#xff0c;系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观&#xff0c;不需要了解技术细节。 效果图 ​二、实现思路 总体思路&#xff1a; 用户通过Gradio界面上…...