博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mybatis源码追踪1——Mapper方法用法解析
阅读量:4953 次
发布时间:2019-06-12

本文共 1589 字,大约阅读时间需要 5 分钟。

Mapper中的方法执行时会构造为org.apache.ibatis.binding.MapperMethod$MethodSignature对象,从该类源码中可以了解如何使用Mapper方法。

 

【支持的特殊参数类型】

RowBounds、ResultHandler、普通参数 (作为sql执行时使用的变量)

其中普通参数可以是单一的model、查询条件的map或直接将一到多个查询条件作为参数(多个条件在框架中最终将封装为Map<String, Object>使用)

另外普通参数支持添加@Param注解以修改参数名,如不修改则参数名用0、1、2来表示。

使用时,如参数有多个则只能使用0和param1这两种形式。(如:SELECT * FROM TABLE WHERE COLUMN=#{0})

 

相关源码: 

public Object convertArgsToSqlCommandParam(Object[] args) {      final int paramCount = params.size();      if (args == null || paramCount == 0) {        return null;      } else if (!hasNamedParameters && paramCount == 1) {        return args[params.keySet().iterator().next()];      } else {        final Map
param = new ParamMap
(); int i = 0; for (Map.Entry
entry : params.entrySet()) { param.put(entry.getValue(), args[entry.getKey()]); // issue #71, add param names as param1, param2...but ensure backward compatibility final String genericParamName = "param" + String.valueOf(i + 1); if (!param.containsKey(genericParamName)) { param.put(genericParamName, args[entry.getKey()]); } i++; } return param; } }

 

【支持的返回类型】

Model类型、void、集合、数组皆可

需注意的是如果返回类型为map则需添加注解@MapKey(不加MethodSignature类中returnsMap属性会被设为false,其他后果未验证)

 

【在SelectProvider中修改参数】

Mybatis框架进入SelectProvider在前述convertArgsToSqlCommandParam方法之后,最终执行sql之前,因此可以在此处对最终执行sql的参数进行修改(前提是不能修改参数引用)。如使用参数Map<String, Object>的形式,就更可以灵活地进行修改。

注:多个参数必须使用Map接收,单个参数可以使用原有类型接收也可以使用Map接收。

 

 

 

转载于:https://www.cnblogs.com/chanedi/p/3811643.html

你可能感兴趣的文章
2124: 等差子序列 - BZOJ
查看>>
3529: [Sdoi2014]数表 - BZOJ
查看>>
字符串匹配算法综述
查看>>
Linux centosVMware shell 管道符和作业控制、shell变量、环境变量配置文件
查看>>
在程序被送入后台时,向 iOS 借点时间,来完成一个长期任务
查看>>
【设计模式】工厂模式
查看>>
两个表格中数据不用是一一对应关系--来筛选不同数据,或者相同数据
查看>>
前端之路
查看>>
javascript 继承
查看>>
String类型转int类型方法
查看>>
关于渲染引擎设计,Scene Management的文章
查看>>
oracle 使用leading, use_nl, rownum调优
查看>>
客户数据库出现大量cache buffer chains latch
查看>>
機械の総合病院 [MISSION LEVEL: C]
查看>>
实战练习细节(分行/拼接字符串/字符串转int/weak和copy)
查看>>
Strict Standards: Only variables should be passed by reference
查看>>
hiho_offer收割18_题解报告_差第四题
查看>>
AngularJs表单验证
查看>>
静态方法是否属于线程安全
查看>>
fegin 调用源码分析
查看>>