《深入浅出mybatis技术原理与实践》读后心得

2024-03-02 10:32

本文主要是介绍《深入浅出mybatis技术原理与实践》读后心得,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

昨天看到有朋友免积分分享的《深入浅出mybatis技术原理与实践》这本书,就下载来大致看了一下。因为之前项目中一直都在用mybatis,当时是跟技术总监学习了一下大致的用法,上手之后确实感觉简单好用。遇到问题的时候,都是上度娘来解决,一直没有系统的了解过。看完这本书的介绍之后,有些以前一直拎不清的地方,一下就豁然开朗了。

1.比如下面这个查询的参数类型,我有时用java.util.HashMap,有时候用hashmap,没有报错也没有深究过。看了书才知道,这是系统默认定义的别名(Alisa),对象类型直接全部小写,比如HashMap对应hashmap(ResultSet除外,它没变),基础数据类型则是前面加下划线,比如int对应_int。

<select id="selectUser" resultType="com.system.vo.TUserInfo" parameterType="hashmap">
select *
from t_user_info
where v_user_name=#{username} and v_password=#{password}
</select>

2.另外对于没有定义返回值的sql,比如insert,update方法,可以用参数对象,接收底层悄悄返回的内容。最常见的,比如我们insert一个User对象,User的id在表中是自增的,我们不需要insert完之后,再select才能取到id,只需要在insert完之后,访问之前作为参数的User对象,系统已经把id回填进去了。

3.另外看到mybatis也有缓存机制,想到之前项目中由于使用大表关联,频繁导致数据库崩溃的问题,可以自己实现一套缓存机制:对于大表关联查询的结果,插入一张缓存表中,下一次查询到缓存表中查找,没有再启动大表查询。更进一步,提前根据业务把大部分需要查询的结果都放到缓存表中(应该不会太多),提高缓存命中率,避免在用户访问的高峰期启动大表查询。另外对于一些常用的结果,可以引入Redis内存缓存,用一台性能比较差的部署大型应用比较吃力的那种服务器,作为缓存服务器,辅助正式应用的工作。

4.最近写mybatis的动态sql,使用if test条件时,使<if test="id=='1'"> 明明id传过来是个1,就是不相等。后来搜了一下小伙伴的经验,这种情况下,'1'被当做字符(char),与"1"进行equals操作是返回false的。解决办法就是修改单双引号:改成<if test='id=="1"'> 。

5.查询一个列表,返回一组对象,列表明明显示有条数,但是里面的对象属性都是null。显然是字段和属性没有映射上。彷徨了2天,最后给每一个返回对象写一个resultMap,问题解决。最诡异的是,之前的代码都不用写resultMap,返回类型用resultType,直接用对象就可以映射,到我这突然就不行了。我只能当做这是老天对我的一次考验,历经九九八十一难我就可以入化境了。

使用resultMap又出一个问题,表里的字段是oracle number类型,java类里面定义成了integer类型,查询时一直报错oracle.sql.NUMBER._fromLnxFmt。浪费很多时间一个字段一个字段定位。最后把标字段改成integer或者把类属性改成double,问题解决。


这篇关于《深入浅出mybatis技术原理与实践》读后心得的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/765816

相关文章

Java Optional的使用技巧与最佳实践

《JavaOptional的使用技巧与最佳实践》在Java中,Optional是用于优雅处理null的容器类,其核心目标是显式提醒开发者处理空值场景,避免NullPointerExce... 目录一、Optional 的核心用途二、使用技巧与最佳实践三、常见误区与反模式四、替代方案与扩展五、总结在 Java

Spring Boot循环依赖原理、解决方案与最佳实践(全解析)

《SpringBoot循环依赖原理、解决方案与最佳实践(全解析)》循环依赖指两个或多个Bean相互直接或间接引用,形成闭环依赖关系,:本文主要介绍SpringBoot循环依赖原理、解决方案与最... 目录一、循环依赖的本质与危害1.1 什么是循环依赖?1.2 核心危害二、Spring的三级缓存机制2.1 三

C#中async await异步关键字用法和异步的底层原理全解析

《C#中asyncawait异步关键字用法和异步的底层原理全解析》:本文主要介绍C#中asyncawait异步关键字用法和异步的底层原理全解析,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录C#异步编程一、异步编程基础二、异步方法的工作原理三、代码示例四、编译后的底层实现五、总结C#异步编程

Python 中的 with open文件操作的最佳实践

《Python中的withopen文件操作的最佳实践》在Python中,withopen()提供了一个简洁而安全的方式来处理文件操作,它不仅能确保文件在操作完成后自动关闭,还能处理文件操作中的异... 目录什么是 with open()?为什么使用 with open()?使用 with open() 进行

Go 语言中的select语句详解及工作原理

《Go语言中的select语句详解及工作原理》在Go语言中,select语句是用于处理多个通道(channel)操作的一种控制结构,它类似于switch语句,本文给大家介绍Go语言中的select语... 目录Go 语言中的 select 是做什么的基本功能语法工作原理示例示例 1:监听多个通道示例 2:带

鸿蒙中@State的原理使用详解(HarmonyOS 5)

《鸿蒙中@State的原理使用详解(HarmonyOS5)》@State是HarmonyOSArkTS框架中用于管理组件状态的核心装饰器,其核心作用是实现数据驱动UI的响应式编程模式,本文给大家介绍... 目录一、@State在鸿蒙中是做什么的?二、@Spythontate的基本原理1. 依赖关系的收集2.

Spring Boot项目中结合MyBatis实现MySQL的自动主从切换功能

《SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能》:本文主要介绍SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能,本文分步骤给大家介绍的... 目录原理解析1. mysql主从复制(Master-Slave Replication)2. 读写分离3.

Mybatis 传参与排序模糊查询功能实现

《Mybatis传参与排序模糊查询功能实现》:本文主要介绍Mybatis传参与排序模糊查询功能实现,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、#{ }和${ }传参的区别二、排序三、like查询四、数据库连接池五、mysql 开发企业规范一、#{ }和${ }传参的

基于SpringBoot+Mybatis实现Mysql分表

《基于SpringBoot+Mybatis实现Mysql分表》这篇文章主要为大家详细介绍了基于SpringBoot+Mybatis实现Mysql分表的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录基本思路定义注解创建ThreadLocal创建拦截器业务处理基本思路1.根据创建时间字段按年进

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N