1. 程式人生 > >MyBatis總結(十八)--#{}取值方式時更加豐富的用法

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