说到 MyBatis,很多小伙伴都会用,但未必用得“惊艳”。
实际上,这个轻量级的持久层框架还有很多隐藏的“宝藏技巧”。
如果你能掌握这些技巧,不但能让开发更高效,还能避免掉入一些常见的“坑”。
今天就从浅入深,分享 10 个让人眼前一亮的 MyBatis 开发技巧,每一个都配上具体的场景和代码示例,务求通俗易懂,希望对你会有所帮助。
基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
-
项目地址:https://github.com/YunaiV/ruoyi-vue-pro
-
视频教程:https://doc.iocoder.cn/video/
很多小伙伴在写 SQL 的时候,喜欢直接用拼接字符串的方式,比如:
String sql = "SELECT * FROM user WHERE 1=1";
if (name != null) {
sql += " AND name = '" + name + "'";
}
这种写法不仅麻烦,而且安全性很差(容易引发 SQL 注入)。
MyBatis 的动态 SQL 是专门为解决这种问题设计的,你可以用
if
、
choose
、
foreach
等标签来动态构造 SQL。
示例:动态条件查询
<select id="findUser" resultType="User">
SELECT * FROM user
WHERE 1=1
<if test="name != null and name != ''">
AND name = #{name}
if>
<if test="age != null">
AND age = #{age}
if>
select>
这个代码的好处是,SQL 逻辑清晰,不会因为某个参数为空就导致整个 SQL 报错。
基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
-
项目地址:https://github.com/YunaiV/yudao-cloud
-
视频教程:https://doc.iocoder.cn/video/
有些小伙伴会遇到这样的问题:数据库表字段是下划线命名,但 Java 对象是驼峰命名。比如
user_name
对应
userName
。如果直接用默认的
resultType
,MyBatis 是无法自动映射的。
这个时候,用
resultMap
就能完美解决。
示例:自定义结果映射
<select id="getUserById" resultMap="userResultMap">
SELECT id, user_name, age FROM user WHERE id = #{id}
select>
有了
resultMap
,再复杂的字段映射都可以轻松搞定。
有些小伙伴可能会遇到这种需求:传入一个 ID 列表,查询所有匹配的用户信息。如果用拼接字符串的方式生成
IN
条件,不但代码丑,还容易踩坑。
MyBatis 提供了
foreach
标签,可以优雅地处理这种场景。
示例:批量查询