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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值