前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >我总结了MyBatis中的十点宝藏技巧,如何跨库查询 程序员必收藏

我总结了MyBatis中的十点宝藏技巧,如何跨库查询 程序员必收藏

原创
作者头像
500佰
修改2025-05-31 16:33:27
修改2025-05-31 16:33:27
11700
代码可运行
举报
运行总次数:0
代码可运行

大家好,我是程序员500佰,技术宅男 目前正在前往独立开发路线,我会在这里分享关于编程技术独立开发技术资讯以及编程感悟等内容。 如果本文能给你提供启发和帮助,还请留下你的一健三连,给我一些鼓励,谢谢。

此篇内容精简 无累赘内容,我不会用过于复杂的语言 让大家看不懂 今天看到程序员麻城东说好的代码或文章是给人看的,因此好文章 一定很普通和干练

MyBatis 无论中厂、小厂我想大家都在用的吧,当然毫无疑问大厂也在使用,很多伙伴每天重复性的写curd,觉得无任何技术痛点,认为大厂的人不会用这么低级的开发程序,真的不必惊讶,大厂无疑都在使用这一套,大家都一样,只用小、老黄牛的区别!

今日我是在医院给大家总结这篇文章,总结一些mybatis避 “坑”指南,今天就从浅入深,分享 10 个让人眼前一亮的 MyBatis 开发技巧,每一个都配上具体的场景和代码示例,务求通俗易懂,希望对你会有所帮助。

优化代码、加速循环 go go go

开整

1.@Mapper接口简化代码

当你认为一个简易sql不需要写XML时,@Mapper注解就起到效果了,非常方便:

2.动态切换表名

场景:相同结构的数据存了多张表,这种业务场景,一般是在多租户、多部门、等业务查询,这个mybatis是支持动态传入表名的,例:

3.动态SQL灵活使用

大家在拼接sql,是不是喜欢用拼接字符串的方式进行拼接,栗:

这种写法上不存在性能问题,但是存在一定的安全漏洞(如:sql注入问题)

mybatis动态SQL支持ifchooseforeach 来编写动态SQL, 栗:

4.利用foreach实现批量操作

关于批量in(11,22,33)条件子查询,使用foreach非常实用,例如:(一看都懂哈)

传入的 idList 是一个 List 或数组,MyBatis 会自动帮你展开为 IN (1, 2, 3) 这样的格式,完全不用担心语法问题

5.善用resultMap

场景:在遇到java变量命名是小驼峰命名规则,而很多朋哟在数据库表设计时变量命名规范使用如user_name进行命名,这个时候就需要使用resultMap标签进行映射。

6.Mybatis-plus分页查询

是不是习惯性的使用limit进行分页查询呢?使用current、size传入页数和每页大小,例如:

代码语言:javascript
代码运行次数:0
运行
复制
getUserListByPage(id,userAccount,userRole,vipRole,current * 10, size,sortField,sortOrder)

mybatis-plus提供一个分页类Page,可轻松完成分页操作,例如:

7.二级缓存

缓存、缓存想必一定是从内存中获取数据,可见查询性能一定得到大幅度优化。

为毛能得到性能优化?- 数据查询直接命中缓存。

例:开启二级缓存

8.日志分析

优秀的程序员知道,系统从不说谎,借助日志排查sql执行(运行)时的异常,好用的不得了

当然更好用的还有LogInterceptor封装日志组件aop

开启日志:

代码语言:javascript
代码运行次数:0
运行
复制
<configuration>
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
</configuration>

日志打印:

代码语言:javascript
代码运行次数:0
运行
复制
==> Preparing: SELECT * FROM t_user WHERE user_role= ?
==> Parameters: 1(Integer)
<==   Total: 1

9.自定义 TypeHandler

在数据库表设计字段类型为数值类型,但想返回布尔类型时可使用TypeHandler

注册TypeHandler实现:类型转换

例如:1/0 -> ture/false

代码语言:javascript
代码运行次数:0
运行
复制
@MappedTypes(Boolean.class)
public class BooleanTypeHandler extends BaseTypeHandler<Boolean> {
​
    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, Boolean parameter, JdbcType jdbcType) throws SQLException {
        ps.setInt(i, parameter ? 1 : 0);
}

10.多数据库支持

当业务系统需要查询多个数据库时,可通过配置多数据源,支持连接多数据库,实现无缝跨库整合业务

代码语言:javascript
代码运行次数:0
运行
复制
@Configuration
@MapperScan(basePackages = "com.wubai.mapper", sqlSessionTemplateRef = "sqlSessionTemplate1")
public class DataSourceConfig1 {
    @Bean(name = "dataSource1")
    public DataSource dataSource() {
        return DataSourceBuilder.create().build();
    }
​
    @Bean(name = "sqlSessionFactory1")
    public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSource1") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        return bean.getObject();
    }
​
    @Bean(name = "sqlSessionTemplate1")
    public SqlSessionTemplate sqlSessionTemplate(@Qualifier("sqlSessionFactory1") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

MyBatis 的魅力在于简单、高效,但很多时候我们用得太“基础”,没有发挥它的全部潜力。这些技巧,不是 checklist,也不是排行榜,

可让你的代码看起来更“惊艳”。

优秀从来不是一蹴而就,而是一次又一次的主动选择

愿你在这条路上,越走越轻松,也越走越有信心

我是程序员500佰,我正在前往独立开发路线,我会在这里分享编程技术、编程感悟。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.@Mapper接口简化代码
  • 2.动态切换表名
  • 3.动态SQL灵活使用
  • 4.利用foreach实现批量操作
  • 5.善用resultMap
  • 6.Mybatis-plus分页查询
  • 7.二级缓存
  • 8.日志分析
  • 9.自定义 TypeHandler
  • 10.多数据库支持
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档