Mybatis jdbcType的用法


今天看了點ibatis的jdbcType的使用,雖然以前看見文檔上有這麼個東西,但是還真沒用過。

    首先看下官方user-guide的說法:

ibatis <wbr>jdbcType <wbr>用法
這裏面說到了jdbcType的使用場合,只有當在insert,update和delete中有空字段時,需要使用jdbcType。

    什麼意思呢,下面我們舉個例子說明一下。

 

   ibatis測試環境搭建很簡單,在此不再複述!

   Session.java

 

import java.io.IOException;
import java.io.Reader;
import java.util.HashMap;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class Session {
public static HashMap<String,SqlSession> sessionMap = new HashMap<String,SqlSession>();
 public static void getSession() throws IOException
 {
  String resource = "com/test/conf/ibatis_config.xml";
  Reader reader = Resources.getResourceAsReader(resource);
  SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder().build(reader);
  SqlSession session= sqlMapper.openSession();
  sessionMap.put("session", session);
 }
 public static void main(String [] ar) throws IOException
 {
  insert();
 }
 public static void insert() throws IOException{
  getSession();
  SqlSession session = sessionMap.get("session");
  long time = System.currentTimeMillis();
  HashMap map = new HashMap();
  map.put("ID", 1);
 // map.put("VALUE", "VALUE");
   session.insert("user.insert1", map );
   //session.insert("user.insert2", map );   
  session.commit();
  session.close();
 }
}

 

ibatis.xml(部分)

<insert id="insert1" parameterType="HashMap">
insert into TEST values(#{ID,jdbcType=NUMERIC}, #{VALUE,jdbcType=VARCHAR})
</insert>
<insert id="insert2" parameterType="HashMap">
insert into TEST values(#{ID}, #{VALUE})
</insert>

 

字段ID和VALUE都是可爲空的。

    那麼當map只存一個參數(ID)或一個參數都不存的情況下,執行insert1是沒有問題的,因爲當sql中找不到ID和VALUE的值時,會根據jdbcType指定的類型去給該字段設置一個空值,然後存入數據庫(如果字段不爲空會報錯)。

    同樣情況下執行insert2 的時候,就出現瞭如下錯誤:
JDBC requires that the JdbcType must be specified for all nullable parameters.

就是說需要爲所有的空屬性設置jdbcTpye值,以便jdbc解析。

注:ibatis版本:3.0.0.216

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章