最近在学习mybatis插件使用,有个场景是把sql查询的map数据通过插件拦截处理后,把数据库字段形式统一java格式返回(如:Nick_name->nickName)。

1.整体思路

  1. 通过使用ResultSetHandler接口的handleResultSets拦截返回的数据(List类型)
  2. 处理Map类型的返回
  3. 对首字母大写和_处理

2.实施

  1. 实现继承Interceptor接口并签名接口
  2. 代码开发,结束后在mybatis-config.xml中添加插件配置

Mybatis插件-01

最开始我打算使用迭代的方式处理map数据,如下

Mybatis插件-01

发现抛出ConcurrentModificationException异常,通过跟踪发现每次执行next方法和remove方法

Mybatis插件-01

都会比对修改次数、期望修改次数,因此,当执行remove方法,就抛出异常。mybatis返回类型map默认为hashMap

当我把返回类型改为resultType="java.util.concurrent.ConcurrentHashMap"后,由于使用了并发控制,不用再去比对,也就不会再抛异常。

个人理解,当迭代涉及删除节点时,其他方式替换迭代。

相关文章:

  • 2021-06-24
  • 2021-05-16
  • 2021-06-19
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-05-20
  • 2021-11-25
猜你喜欢
  • 2021-08-27
  • 2022-01-22
  • 2022-12-23
  • 2021-04-26
  • 2021-12-30
  • 2021-04-14
相关资源
相似解决方案