当前位置: 首页 > news >正文

MyBatis高频问题-自动映射与缓存解析

如何配置自动映射?

  • 自动映射配置autoMappingBehavior包含三个值:
  1. NONE:取消自动映射。
  2. PARTIAL:只会自动映射,没有定义嵌套结果集映射的结果集(默认值)。
  3. FULL:会自动映射任意复杂的结果集(无论是否嵌套)。
  • 自动映射配置mybatis-config.xml

<settings>

<settingname="autoMappingBehavior"value="PARTIAL"/>

<settingname="mapUnderscoreToCamelCase"value="true"/>

</settings>

  • 【解释】必须配置mapUnderscoreToCamelCase=true,否则失效。
  • 自动映射结果返回用resultType;手动映射返回结果用resultMap

手动映射

手动映射操作步骤:

①使用<resultMap>标签配置映射关系

②将<select>标签中使用resultMap作为结果集类型

自动映射配置演示——mybatis-config.xml<resultMap

ID自动回填

useGeneratedKeys="true",keyProperty="id"指定主键赋值的字段名

接口定义用int类型接收

#和$区别及sql注入攻击

  • #{}:参数占位符,即:预编译;在预处理时,会把参数用占位符"?"代替变成:selectfromuserwherename:?;
  • ${}:字符串替换符,即:SOL拼接;只是简单的字符串替换,在动态解析时变成:select*fromuserwherename='muse';
  • SOL注入:即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查认语句的结尾上添加额外的SOL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。

缓存机制。二级缓存怎么读取

  • 【开启一级缓存】默认是开启的,即:同一个SqlSession对象调用同一个Mapper的方法,如果没有声明需要刷新,并且缓存没超时的情况下,一般只执行一次SQL,其他的 DQL(查询语句)SqlSession都只会取出当前缓存的数据。
  • 【开启二级缓存】在xxxMapper.xml中添加<cache/>标签或者在对应的Dao类上面增加@CacheNamespace(blocking=true)注解以开启二级缓存。并且执行sqlSession.commit()使得二级缓存生效,其中,POJOJO必须实现Serializable接口。

二级缓存也叫做全局缓存,基于namespace级别的缓存。使用的是mapper的作用域,不同的sqlSession只要访问的同一个mapper.xml文件,则共享二级缓存作用域。范围是SqlSessionFactory。需要在全局配置文件中设置<settingname="cacheEnabled"value="true"/>,然后在具体的mapper.xml中添加<cache/>即可。

查询流程:查询时先到二级缓存查,如果没有再去一级localCache查,再没有则查询数据库,再放缓存一份,再返回客户端。下次再查询的时候直接从缓存返回,不再访问数据库,如果数据库中发生commit()操作,则清空缓存。

1、如果在mapper映射文件中的CRUD标签中加入flushCache="true",会导致一二级缓存机制都消失

2、也可以在测试类中直接手动清理缓存。

3、也可以在全局配置文件设置<settingsname="localCacheScope"value="STATEMENT"/>这样会使一级缓存失效,二级缓存不受影响。

foreach

concatbind

mybatisgenerator

源码

底层还是JDBC去执行

获取mapper动态代理(JDK动态代理)

执行invoke方法,获取一个被缓存到的mapperMathod

级联association&collection

  • mybatis中的标签association主要用于解决“hasone”类型的关系,它表示一个对象至多有一个关联对象(一对一或多对一)。比如一般情况下,每个消息都对应一个消息详情,消息和消息详情之间的关系就可以使用association表示。
  • mybatis中的标签collection主要用于解决“hasmany”类型的关系,它表示一个对象有多个关联对象。比如一般情况下,每个人都有多个联系方式,人和联系方式之间的关系就可以使用collection表示。

下篇讲延迟加载,分页,动态sql 及源码解析吧😍


文章转载自:

http://YEvXCqZR.krkwh.cn
http://IfVSTX36.krkwh.cn
http://SJyM0YsJ.krkwh.cn
http://kZZ4pGkB.krkwh.cn
http://FUeO55nu.krkwh.cn
http://GvdF7mEL.krkwh.cn
http://cXoINQto.krkwh.cn
http://UqUf1ric.krkwh.cn
http://UmlFfVv0.krkwh.cn
http://P9rC5Xyv.krkwh.cn
http://nkIM5bg9.krkwh.cn
http://6o2549k6.krkwh.cn
http://FIo5cKGx.krkwh.cn
http://PN75tyQo.krkwh.cn
http://NE6PlBLw.krkwh.cn
http://csDP4VqQ.krkwh.cn
http://MFNz0H6N.krkwh.cn
http://IYmcIPH2.krkwh.cn
http://cLAv5NKV.krkwh.cn
http://MFIWYJH6.krkwh.cn
http://JyKLEB44.krkwh.cn
http://vkZAwoJS.krkwh.cn
http://sFkK1stK.krkwh.cn
http://bHYH5HVf.krkwh.cn
http://nQk6xtcC.krkwh.cn
http://INJomeek.krkwh.cn
http://E5dLO8wr.krkwh.cn
http://B32ALelJ.krkwh.cn
http://S9fjioAJ.krkwh.cn
http://E18rz5oj.krkwh.cn
http://www.dtcms.com/a/368546.html

相关文章:

  • 力扣152:乘积最大子数组
  • honmony 中集成 tuanjie/unity
  • (二)文件管理-基础命令-rm命令的使用
  • 鸿蒙系统开发资料汇总:全面助力鸿蒙开发HarmonyOS
  • 手写React状态hook
  • scrypt 密钥派生算法(RFC7914)技术解析及源码示例
  • 案例分享|企微智能会话风控系统:为尚丰盈铝业筑牢沟通安全防线
  • Docker部署Drawnix开源白板工具
  • linux缺页中断频繁怎么定位
  • 代码随想录70期day3
  • AI驱动开发:颠覆传统编程新范式
  • 第三方web测评机构:【WEB安全测试中HTTP方法(GET/POST/PUT)的安全风险检测】
  • PAT 1096 Consecutive Factors
  • 53.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--新增功能--集成短信发送功能
  • vsan高可用:确保可访问性、全部数据迁移,两种类型权衡
  • 神经网络|(十八)概率论基础知识-伽马函数·下
  • 力扣55:跳跃游戏
  • IDEA中Transaction翻译插件无法使用,重新配置Transaction插件方法
  • Daemon Tools Lite下载安装图文教程 | 2025官方中文版免费指南
  • 原子工程用AC6编译不过问题
  • 旧服务下线方案
  • AI驱动健康升级:新零售企业从“卖产品”到“卖健康”的转型路径
  • 基于STM32物联网冻保鲜运输智能控制系统
  • 哈工大提出空间机器人复合框架,突破高精度轨迹跟踪
  • 基于智能合约实现非托管支付
  • CC-Link IE FB 转 DeviceNet 实现欧姆龙 PLC 与松下机器人在 SMT 生产线锡膏印刷环节的精准定位控制
  • 分布式微服务--ZooKeeper作为分布式锁
  • Linux中的fork详解
  • 【生产故事会】Kafka 生产环境参数优化实战案例
  • 【Kafka】Kafka使用场景用例Kafka用例图