《深入浅出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调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

mybatis和mybatis-plus设置值为null不起作用问题及解决

《mybatis和mybatis-plus设置值为null不起作用问题及解决》Mybatis-Plus的FieldStrategy主要用于控制新增、更新和查询时对空值的处理策略,通过配置不同的策略类型... 目录MyBATis-plusFieldStrategy作用FieldStrategy类型每种策略的作

golang内存对齐的项目实践

《golang内存对齐的项目实践》本文主要介绍了golang内存对齐的项目实践,内存对齐不仅有助于提高内存访问效率,还确保了与硬件接口的兼容性,是Go语言编程中不可忽视的重要优化手段,下面就来介绍一下... 目录一、结构体中的字段顺序与内存对齐二、内存对齐的原理与规则三、调整结构体字段顺序优化内存对齐四、内

SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤

《SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤》本文主要介绍了SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤,文中通过示例代码介绍的非常详... 目录 目标 步骤 1:确保 ProxySQL 和 mysql 主从同步已正确配置ProxySQL 的

MyBatis-Flex BaseMapper的接口基本用法小结

《MyBatis-FlexBaseMapper的接口基本用法小结》本文主要介绍了MyBatis-FlexBaseMapper的接口基本用法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具... 目录MyBATis-Flex简单介绍特性基础方法INSERT① insert② insertSelec

C++实现封装的顺序表的操作与实践

《C++实现封装的顺序表的操作与实践》在程序设计中,顺序表是一种常见的线性数据结构,通常用于存储具有固定顺序的元素,与链表不同,顺序表中的元素是连续存储的,因此访问速度较快,但插入和删除操作的效率可能... 目录一、顺序表的基本概念二、顺序表类的设计1. 顺序表类的成员变量2. 构造函数和析构函数三、顺序表

python实现简易SSL的项目实践

《python实现简易SSL的项目实践》本文主要介绍了python实现简易SSL的项目实践,包括CA.py、server.py和client.py三个模块,文中通过示例代码介绍的非常详细,对大家的学习... 目录运行环境运行前准备程序实现与流程说明运行截图代码CA.pyclient.pyserver.py参

使用C++实现单链表的操作与实践

《使用C++实现单链表的操作与实践》在程序设计中,链表是一种常见的数据结构,特别是在动态数据管理、频繁插入和删除元素的场景中,链表相比于数组,具有更高的灵活性和高效性,尤其是在需要频繁修改数据结构的应... 目录一、单链表的基本概念二、单链表类的设计1. 节点的定义2. 链表的类定义三、单链表的操作实现四、

MySQL中的MVCC底层原理解读

《MySQL中的MVCC底层原理解读》本文详细介绍了MySQL中的多版本并发控制(MVCC)机制,包括版本链、ReadView以及在不同事务隔离级别下MVCC的工作原理,通过一个具体的示例演示了在可重... 目录简介ReadView版本链演示过程总结简介MVCC(Multi-Version Concurr

Spring Boot统一异常拦截实践指南(最新推荐)

《SpringBoot统一异常拦截实践指南(最新推荐)》本文介绍了SpringBoot中统一异常处理的重要性及实现方案,包括使用`@ControllerAdvice`和`@ExceptionHand... 目录Spring Boot统一异常拦截实践指南一、为什么需要统一异常处理二、核心实现方案1. 基础组件