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

相关文章

虚拟机Centos7安装MySQL数据库实践

《虚拟机Centos7安装MySQL数据库实践》用户分享在虚拟机安装MySQL的全过程及常见问题解决方案,包括处理GPG密钥、修改密码策略、配置远程访问权限及防火墙设置,最终通过关闭防火墙和停止Net... 目录安装mysql数据库下载wget命令下载MySQL安装包安装MySQL安装MySQL服务安装完成

SpringBoot整合(ES)ElasticSearch7.8实践

《SpringBoot整合(ES)ElasticSearch7.8实践》本文详细介绍了SpringBoot整合ElasticSearch7.8的教程,涵盖依赖添加、客户端初始化、索引创建与获取、批量插... 目录SpringBoot整合ElasticSearch7.8添加依赖初始化创建SpringBoot项

Zabbix在MySQL性能监控方面的运用及最佳实践记录

《Zabbix在MySQL性能监控方面的运用及最佳实践记录》Zabbix通过自定义脚本和内置模板监控MySQL核心指标(连接、查询、资源、复制),支持自动发现多实例及告警通知,结合可视化仪表盘,可有效... 目录一、核心监控指标及配置1. 关键监控指标示例2. 配置方法二、自动发现与多实例管理1. 实践步骤

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口

MySQL 迁移至 Doris 最佳实践方案(最新整理)

《MySQL迁移至Doris最佳实践方案(最新整理)》本文将深入剖析三种经过实践验证的MySQL迁移至Doris的最佳方案,涵盖全量迁移、增量同步、混合迁移以及基于CDC(ChangeData... 目录一、China编程JDBC Catalog 联邦查询方案(适合跨库实时查询)1. 方案概述2. 环境要求3.

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

MyBatis中$与#的区别解析

《MyBatis中$与#的区别解析》文章浏览阅读314次,点赞4次,收藏6次。MyBatis使用#{}作为参数占位符时,会创建预处理语句(PreparedStatement),并将参数值作为预处理语句... 目录一、介绍二、sql注入风险实例一、介绍#(井号):MyBATis使用#{}作为参数占位符时,会

全面掌握 SQL 中的 DATEDIFF函数及用法最佳实践

《全面掌握SQL中的DATEDIFF函数及用法最佳实践》本文解析DATEDIFF在不同数据库中的差异,强调其边界计算原理,探讨应用场景及陷阱,推荐根据需求选择TIMESTAMPDIFF或inte... 目录1. 核心概念:DATEDIFF 究竟在计算什么?2. 主流数据库中的 DATEDIFF 实现2.1

mybatis执行insert返回id实现详解

《mybatis执行insert返回id实现详解》MyBatis插入操作默认返回受影响行数,需通过useGeneratedKeys+keyProperty或selectKey获取主键ID,确保主键为自... 目录 两种方式获取自增 ID:1. ​​useGeneratedKeys+keyProperty(推

Spring WebFlux 与 WebClient 使用指南及最佳实践

《SpringWebFlux与WebClient使用指南及最佳实践》WebClient是SpringWebFlux模块提供的非阻塞、响应式HTTP客户端,基于ProjectReactor实现,... 目录Spring WebFlux 与 WebClient 使用指南1. WebClient 概述2. 核心依