这篇文章主要讲述Mybatis当中#{}常用属性的用法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
#{}占位符的属性
这是他的一些属性,当然本篇文章重点讲解在开发当中我们会用到的一些属性。
javaType、 jdbcType、 mode(存储过程)、 numericScale、
resultMap、 typeHandler、 jdbcTypeName、 expression(未来准备支持的功能);
用法#{age ,jdbcType=TINYINT ,javaType=short}
javaType
通常可以从参数对象中来去确定,这个属性一般很少使用。
如果用的eclipse可以全局搜ctrl+shift+t 搜索JdbcType
这个就是xml当中传值类型映射关系,也就是java当中的类型和jdbc的属性关系。
jdbcType
如果用的orcle数据库假如数据传值为Null的时候就会报错,这个时候可以通过设置这个来进行避免报错。
代码示例:
这是一个新增返回主键的Orcle示例
<insert id="addEmp" databaseId="oracle">
<selectKey keyProperty="id" order="BEFORE" resultType="Integer">
select EMPLOYEES_SEQ.nextval from dual
</selectKey>
insert into employees(ID,LAST_NAME,EMAIL)
values(#{id},#{lastName},#{email})
</insert>
假如last或者email传值为null就会报错,报无效的列类型
原因:
当传值为Null的时候,mybatis会自动对应jdbcType类当中的other类型,而oracle并不认识这个类型,mysql他不会报错的。
解决方案:
当指定类型之后,他就不会去默认other类型了,这样就可以解决传null值报错问题
insert into employees(ID,LAST_NAME,EMAIL)
values(#{id},#{lastName,jdbcType=NULL},#{email,jdbcType=NULL})
针对于上面的我们还得遇见null就得加那个属性,Mybatis也给我们提供了一种全局设置,在mybatis-config.xml添加以下配置。
<settings>
<setting name="jdbcTypeForNull" value="NULL"/>
</settings>
mode调用存储过程
mode 属性允许指定 IN,OUT 或 INOUT 参数
顺便记录一下oracle存储过程创建吧。
存储过程书写要规范(IN 、OUT 参数一定要写上,例如:V_YEAR IN INTEGER),不然JAVA调用有问题,拿不到存储过程返回值
CREATE OR REPLACE PROCEDURE STATIC_DIA_QUARTER(V_YEAR IN INTEGER,
V_QUARTER IN INTEGER) IS
<select id="getAndSaveHyperReport" statementType="CALLABLE" parameterType="java.util.Map" >
{call STATIC_HYPER_QUARTER(#{year,mode=IN,jdbcType=INTEGER},#{quarter,mode=IN,jdbcType=INTEGER})}
</select>
numericScale保留小数点几位
#{height,jdbcType=NUMERIC,numericScale=2})