18、Mybatis进阶:{}取值方式时更加丰富的用法

本文内容来自尚硅谷

使用方式

*

*

参数位置支持的属性
–javaType、jdbcType、mode、numericScale、 resultMap、typeHandler、jdbcTypeName、expression

这里为可能为空的列名指定jdbcType类型。mybatis连接oracle数据库时,当入参对象为null时mybatis默认传给数据库的值不是null而是other则执行时会报错(使用mysql是不会报错的)

junit

	public void test03() throws IOException{
		
		SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
		SqlSession openSession = sqlSessionFactory.openSession();
		
		try{
			EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
			Employee employee = new Employee(null, "jerry4",null, "1");
			mapper.addEmp(employee);
			System.out.println(employee.getId());
			openSession.commit();
		}finally{
			openSession.close();
		}
		
	}

dao

public Long addEmp(Employee employee);

xml

	<insert id="addEmp" databaseId="oracle">
		<selectKey keyProperty="id" order="BEFORE" resultType="Integer">
			select EMPLOYEES_SEQ.nextval from dual
		</selectKey>

		insert into employees(EMPLOYEE_ID,LAST_NAME,EMAIL)
		values(#{id},#{lastName},#{email})
	</insert>

此时连接oracle时回报语法错误。

xml应该如下写法

	<insert id="addEmp" databaseId="oracle">
		<selectKey keyProperty="id" order="BEFORE" resultType="Integer">
			select EMPLOYEES_SEQ.nextval from dual
		</selectKey>
		insert into employees(EMPLOYEE_ID,LAST_NAME,EMAIL)
		values(#{id},#{lastName},#{email ,jdbcType=NULL})
	</insert>

这就是jdbctype的使用实例。意思是当email值为null时将把值设置成null而不是other

版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: