《深入浅出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

相关文章

mybatis映射器配置小结

《mybatis映射器配置小结》本文详解MyBatis映射器配置,重点讲解字段映射的三种解决方案(别名、自动驼峰映射、resultMap),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定... 目录select中字段的映射问题使用SQL语句中的别名功能使用mapUnderscoreToCame

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

mybatis-plus如何根据任意字段saveOrUpdateBatch

《mybatis-plus如何根据任意字段saveOrUpdateBatch》MyBatisPlussaveOrUpdateBatch默认按主键判断操作类型,若需按其他唯一字段(如agentId、pe... 目录使用场景方法源码方法改造首先在service层定义接口service层接口实现总结使用场景my

MyBatis ParameterHandler的具体使用

《MyBatisParameterHandler的具体使用》本文主要介绍了MyBatisParameterHandler的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一、概述二、源码1 关键属性2.setParameters3.TypeHandler1.TypeHa

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired