28、参数容器ParameterMapping介绍和解析
来源:互联网 发布:网络微营销 编辑:程序博客网 时间:2024/06/09 20:53
ParameterMapping
ParameterMapping
的对应的xml内容
<parameter property="" resultMap="" javaType="" typeHandler="" jdbcType="" mode="" scale=""></parameter>
字段
public class ParameterMapping { private Configuration configuration; /** * 必填 */ private String property; /** * mode 属性允许你指定 IN,OUT 或 INOUT 参数。如果参数为 OUT 或 INOUT,参数对象属性的真实值将会被改变,就像你在获取输出参数时所期望的那样。 * 如果 mode 为 OUT(或 INOUT),而且 jdbcType 为 CURSOR(也就是 Oracle 的 REFCURSOR),你必须指定一个 resultMap 来映射结果集到参数类型 */ private ParameterMode mode; private Class<?> javaType = Object.class; private JdbcType jdbcType; /** * 小数点后保留的位数 */ private Integer numericScale; /** * 类型处理器 */ private TypeHandler<?> typeHandler; private String resultMapId; private String jdbcTypeName; private String expression; }
构造方法
private ParameterMapping() { }
此处的构造方法私有,通过内部类的build设计模式,来创建和初始化对象
最后对应的类型处理器,和进行验证 java
public ParameterMapping build() {
resolveTypeHandler();
validate();
return parameterMapping;
}
ParameterMap
一个ParameterMap
对应一个SQL语句中所有的参数,就行ParameterMapping的集合
<parameterMap id="" type="" > <parameter property="" resultMap="" javaType="" typeHandler="" jdbcType="" mode="" scale=""></parameter> <parameter property="" resultMap="" javaType="" typeHandler="" jdbcType="" mode="" scale=""></parameter> <parameter property="" resultMap="" javaType="" typeHandler="" jdbcType="" mode="" scale=""></parameter> </parameterMap>
如上所示参数,分别会解析出3个ParameterMapping和一个ParameterMap
字段
public class ParameterMap { private String id; private Class<?> type; private List<ParameterMapping> parameterMappings; }
其他结构和ParameterMapping类似
解析过程
解析过程非常的简单和ResultMap的解析过程类似
private void parameterMapElement(List<XNode> list) throws Exception { for (XNode parameterMapNode : list) { String id = parameterMapNode.getStringAttribute("id"); String type = parameterMapNode.getStringAttribute("type"); Class<?> parameterClass = resolveClass(type); List<XNode> parameterNodes = parameterMapNode.evalNodes("parameter"); List<ParameterMapping> parameterMappings = new ArrayList<ParameterMapping>(); for (XNode parameterNode : parameterNodes) { String property = parameterNode.getStringAttribute("property"); String javaType = parameterNode.getStringAttribute("javaType"); String jdbcType = parameterNode.getStringAttribute("jdbcType"); String resultMap = parameterNode.getStringAttribute("resultMap"); String mode = parameterNode.getStringAttribute("mode"); String typeHandler = parameterNode.getStringAttribute("typeHandler"); Integer numericScale = parameterNode.getIntAttribute("numericScale"); ParameterMode modeEnum = resolveParameterMode(mode); Class<?> javaTypeClass = resolveClass(javaType); JdbcType jdbcTypeEnum = resolveJdbcType(jdbcType); @SuppressWarnings("unchecked") Class<? extends TypeHandler<?>> typeHandlerClass = (Class<? extends TypeHandler<?>>) resolveClass(typeHandler); ParameterMapping parameterMapping = builderAssistant.buildParameterMapping(parameterClass, property, javaTypeClass, jdbcTypeEnum, resultMap, modeEnum, typeHandlerClass, numericScale); parameterMappings.add(parameterMapping); } builderAssistant.addParameterMap(id, parameterClass, parameterMappings); } }
最后调用ParameterMap的build方法
public ParameterMapping buildParameterMapping( Class<?> parameterType, String property, Class<?> javaType, JdbcType jdbcType, String resultMap, ParameterMode parameterMode, Class<? extends TypeHandler<?>> typeHandler, Integer numericScale) { resultMap = applyCurrentNamespace(resultMap, true); // Class parameterType = parameterMapBuilder.type(); Class<?> javaTypeClass = resolveParameterJavaType(parameterType, property, javaType, jdbcType); TypeHandler<?> typeHandlerInstance = resolveTypeHandler(javaTypeClass, typeHandler); return new ParameterMapping.Builder(configuration, property, javaTypeClass) .jdbcType(jdbcType) .resultMapId(resultMap) .mode(parameterMode) .numericScale(numericScale) .typeHandler(typeHandlerInstance) .build(); } public ParameterMapping build() { resolveTypeHandler(); validate(); return parameterMapping; }
总结
parameterMap 这是引用外部 parameterMap 的已经被废弃的方法。使用内联参数映射和 parameterType 属性。
阅读全文
0 0
- 28、参数容器ParameterMapping介绍和解析
- iBatis的ParameterMap和ParameterMapping的初始化过程。
- java基础之参数和容器
- Web容器和Web应用程序介绍
- Java容器类介绍和比较
- Qt容器类介绍和使用
- Qt容器类介绍和使用
- 容器和泛型的简单介绍
- Web容器和Web应用程序介绍
- Java 容器(Collection和Map)介绍
- Web容器和Web应用程序介绍
- 介绍 Spring IoC 容器和 bean
- 介绍 Spring IoC 容器和 bean
- 介绍 Spring IoC 容器和 bean
- 介绍 Spring IoC 容器和 bean
- C++模板和容器的介绍
- STL容器 -map和set接口介绍
- Java容器:HashMap和HashSet解析
- AsynckTask的执行原理
- vs2010调试进入MFC源码的方法
- 26、Result解析之ResultMap(结果集)介绍
- 27、ResultMap解析
- Golang服务器集成极光推送
- 28、参数容器ParameterMapping介绍和解析
- centos的软件安装方法rpm和yum
- 使用Thread+Handler或runOnUiThread更新UI
- 贪心经典题目
- 29、ParamNameResolver参数解析
- 30、SQL片段的解析
- 377. Combination Sum IV
- SVN安装、MyEclipse安装SVN插件以及上传项目
- mysql安装及连接