Mybatis自定义类型处理器

1、了解用途


 有什么用途了,其实就是在insert和select的时候,假设定义了两个实体,一对一的关系,而且双向关联
 
 比如 妻子和丈夫
 
 准备数据
  create table wife(
 w_id number(10) primary key,
 w_name varchar(10),
 h_id references  husband(h_id)
 )
 
 
 class Wife{
 private int id ;
 private String name;
 private  Husband husband;
 
 //getter/setter
 
 }
 


  create table husband(
 h_id number(10) primary key,
 h_name varchar(10),
 w_id references  wife(w_id)
 )
 
 
 class Husband{
  private int id ;
 private String name;
 
 private  Wife wife;
 
  //getter/setter
 
 }
 
 
 
 
 当你插入数据的时候应该是这样的
 
  首先new 一个 对象,比如就是Husband
Husband husband = new Husband(1,"husband",new Wife(10))//假设Wife有一个只传入id 构造函数


在执行之前,假设数据库里面有ID值为10的女子
paramterType 为Husband
Sql 语句   insert into Husband values(#{id},#{name},#{wife})


那么问题来了 ,这个wife的类型怎么处理,数据库表的第三个字段为number类型,此时wife是一个自定义的类型,Mybatis不知道他是什么类型,
在插入数据库的时候不知道怎么处理,他就有点为难了,所有他就报异常了


怎么处理了,这就是自定义类型处理器


问题又来了,怎么自定义了
 
 


2、创建自定义类型处理器




其实很简单,实现一个接口就ok了
TypeHandler,对就是这个接口,这是了带有泛型的接口,在实现的时候就可以传入你需要处理的类型了








先了解API 


  void setParameter(PreparedStatement, int, T, JdbcType)
  
    setParameter,参数有四个,主要用到前三个,
在插入语句的时候insert into Husband values(#{id},#{name},#{wife})
Mybatis遇到Wife,发现自身没有,它就会找,所有在实现TypeHandler接口后需要在配置文件中告诉Mybatis你自己写好了这个处理器了,不要让他问难了,也就不会报异常了


接着看前三个参数

当在设置占位符的值得时候,Mybatis会找到这个处理器,调用setParameter方法,并且把本身PreparedStatement传进来,把这个类型实体也传进来,还有就是要设置的占位符的序列号也传过来,让你自己来编写,要怎么给这个占位符赋值

这就好吧了

这个方法就是这么实现的
setParameter(PreparedStatement preparedStatement, int index, Wife wife, JdbcType jdbctype){

 preparedStatement.setParameter(index,wife.getId)
   

}




  
  getResult(ResultSet, String)
  getResult(ResultSet, int)
  getResult(CallableStatement, int)
  
  这个方法就是在返回结果的时候处理,在这个例子中好像用不到
  
  就看看getResult(ResultSet, String)其他类似
  
  当jdbc返回一个结果时,需要在对象中的体现形式与数控库中的不一样
  
  就比如性别  在数据库中用1或者0来表示,而在实体类中要使用男 或者 女来体现
  
  这个就可以这么写
  
  Object getResult(ResultSet resultSet, String labername){
  
   int int_sex resultSet.getInt(labername);
   
   String str_sex;
  if(int_sex==1)
      str_sex ="男"
 
   else str_sex = "女"
  


  return str_sex;
  
  }
  
  
  

















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值