Mybatis Parameters jdbcType
来源:互联网 发布:广东省网络医院 后窖 编辑:程序博客网 时间:2024/06/13 06:03
Mybatis的sqlmap中Parameters的jdbcType参数可以不设置,Parameters 官方文档中解释:
The JDBC Type is required by JDBC for all nullable columns, if null is passed as a value.
You can investigate this yourself by reading the JavaDocs for the PreparedStatement.setNull() method.
Mybatis在处理参数具体类型时从TypeHandlerRegistry中获取具体的TypeHandler。
/*** parameter where子句后具体某个参数入参* jdbcType sqlmap中声明的jdbcType,如:where id = #{id,jdbcType=VARCHAR}**/ private TypeHandler<? extends Object> resolveTypeHandler(Object parameter, JdbcType jdbcType) { TypeHandler<? extends Object> handler; if (parameter == null) { handler = OBJECT_TYPE_HANDLER; } else { //参数的运行时类型 handler = typeHandlerRegistry.getTypeHandler(parameter.getClass(), jdbcType); if (handler == null || handler instanceof UnknownTypeHandler) { handler = OBJECT_TYPE_HANDLER; } } return handler; } private <T> TypeHandler<T> getTypeHandler(Type type, JdbcType jdbcType) { //TYPE_HANDLER_MAP是jdbc类型到java数据类型映射,详见下图 //TYPE_HANDLER_MAP中每个类型都会包含类似这条记录"null" -> "class java.lang.Float"(null为key->java类型为value) //也就是说只要入参运行时类型确定,handler就确定 Map<JdbcType, TypeHandler<?>> jdbcHandlerMap = TYPE_HANDLER_MAP.get(type); TypeHandler<?> handler = null; //该步一定会拿到handler,除非参数类型Mybatis本身处理不了,并且没有自定义的handler if (jdbcHandlerMap != null) { handler = jdbcHandlerMap.get(jdbcType); if (handler == null) { handler = jdbcHandlerMap.get(null); } } if (handler == null && type != null && type instanceof Class && Enum.class.isAssignableFrom((Class<?>) type)) { handler = new EnumTypeHandler((Class<?>) type); } // type drives generics here return (TypeHandler<T>) handler; }
继续看了mysql.jdbc对null值的处理,发现其实这个jdbcType在设置值时根本没用到,可能是为了以后使用吧。直接上代码。
/** * Set a parameter to SQL NULL * * <p> * <B>Note:</B> You must specify the parameters SQL type (although MySQL * ignores it) * </p> * * @param parameterIndex * the first parameter is 1, etc... * @param sqlType * the SQL type code defined in java.sql.Types * * @exception SQLException * if a database access error occurs */ public void setNull(int parameterIndex, int sqlType) throws SQLException { synchronized (checkClosed().getConnectionMutex()) { setInternal(parameterIndex, "null"); //$NON-NLS-1$ this.isNull[parameterIndex - 1 + getParameterIndexOffset()] = true; this.parameterTypes[parameterIndex - 1 + getParameterIndexOffset()] = Types.NULL; } }
1 0
- Mybatis Parameters jdbcType
- MyBatis-jdbcType
- mybatis jdbctype
- mybatis 异常: JDBC requires that the JdbcType must be specified for all nullable parameters.
- Mybatis报TypeException:JDBC requires that the JdbcType must be specified for all nullable parameters.
- mybatis JDBC requires that the JdbcType must be specified for all nullable parameters
- mybatis-Parameters
- MyBatis的jdbcType类型
- MyBatis中JdbcType问题
- MyBatis的jdbcType类型
- mybatis jdbctype用法注意
- MyBatis指定JdbcType
- mybatis jdbcType: DATE & TIMESTAMP
- mybatis常用jdbcType数据类型
- mybatis惯用jdbcType数据类型
- mybatis常用jdbcType数据类型
- mybatis常用jdbcType数据类型
- mybatis jdbcType 用法
- 【DP】[CodeForces - 713C]Sonya and Problem Wihtout a Legend
- class 和 struct
- Windows下使用jsoncpp
- 清纯不做作的RxBus,用法与EventBus 一致
- storyBoard中给tableView添加header和footer
- Mybatis Parameters jdbcType
- CGContextRef绘图-iOS球形波浪加载进度控件-HcdProcessView详解
- 51Nod-1435-位数阶乘
- USACO2014Open Silver GPS的决斗
- Oracle递归查询父子关系记录
- SwipeRefreshLayout配合RecyclerView实现上拉加载更多下拉刷新
- <Android 基础(二十一)> Android 屏幕适配
- RPC 的概念模型与实现解析
- 最简单的AR开发入门教程(二)