大家好,我是程序员500佰,技术宅男
目前正在前往独立开发路线,我会在这里分享关于编程技术
、独立开发
、技术资讯
以及编程感悟
等内容。 如果本文能给你提供启发和帮助,还请留下你的一健三连,给我一些鼓励,谢谢。
此篇内容精简 无累赘内容,我不会用过于复杂的语言 让大家看不懂
今天看到程序员xx城东说好的代码或文章是给人看的,因此好文章 一定很普通和干练
MyBatis 无论中厂、小厂我想大家都在用的吧,当然毫无疑问大厂也在使用,很多伙伴每天重复性的写curd,觉得无任何技术痛点,认为大厂的人不会用这么低级的开发程序,真的不必惊讶,大厂无疑都在使用这一套,大家都一样,只用小、老黄牛的区别!
今日我是在医院给大家总结这篇文章,总结一些mybatis避 “坑” 指南,今天就从浅入深,分享 10 个让人眼前一亮的 MyBatis 开发技巧,每一个都配上具体的场景和代码示例,务求通俗易懂,希望对你会有所帮助。
优化代码、加速循环 go go go
开整
1.@Mapper接口简化代码
当你认为一个简易sql不需要写XML时,@Mapper注解
就起到效果了,非常方便:
2.动态切换表名
场景:相同结构的数据存了多张表,这种业务场景,一般是在多租户、多部门、等业务查询,这个mybatis是支持动态传入表名的,例:
3.动态SQL灵活使用
大家在拼接sql,是不是喜欢用拼接字符串的方式进行拼接,栗:
这种写法上不存在性能问题,但是存在一定的安全漏洞(如:sql注入问题)
mybatis动态SQL支持if
、choose
、foreach
来编写动态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传入页数和每页大小,例如:
getUserListByPage(id,userAccount,userRole,vipRole,current * 10, size,sortField,sortOrder)
mybatis-plus提供一个分页类Page,可轻松完成分页操作,例如:
7.二级缓存
缓存、缓存想必一定是从内存中获取数据,可见查询性能一定得到大幅度优化。
为毛能得到性能优化?- 数据查询直接命中缓存。
例:开启二级缓存
8.日志分析
优秀的程序员知道,系统从不说谎,借助日志排查sql执行(运行)时的异常,好用的不得了
当然更好用的还有LogInterceptor封装日志组件aop
开启日志:
<configuration>
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
</configuration>
日志打印:
==> Preparing: SELECT * FROM t_user WHERE user_role= ?
==> Parameters: 1(Integer)
<== Total: 1
9.自定义 TypeHandler
在数据库表设计字段类型为数值类型,但想返回布尔类型时可使用TypeHandler
注册TypeHandler实现:类型转换
例如:1/0 -> ture/false
@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.多数据库支持
当业务系统需要查询多个数据库时,可通过配置多数据源,支持连接多数据库,实现无缝跨库整合业务
@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 的魅力在于简单、高效,但很多时候我们用得太guo“基础”,没有发挥它的全部潜力。这些技巧,不是 checklist,也不是排行榜, 可让你的代码看起来更“惊艳”。
优秀从来不是一蹴而就,而是一次又一次的主动选择。
愿你在这条路上,越走越轻松,也越走越有信心。
我是程序员500佰
,我正在前往独立开发路线,我会在这里分享编程技术、编程感悟。