Mybatis使用笔记

这两天有点时间,看了一下mybatis,尝试把一个ibatis的项目用mybatis替换。在使用过程中,基本的配置等这里就不累述了,网上一搜一堆。这里主要讲我在使用过程中遇到的两个花了我比较长时间解决的问题,一个是结果集的枚举映射;另一个就是物理分页。

首先结果集枚举映射:

假设我们有这么一个对象

  1. public enum Status {  
  2.     // 默认0, 可用1, 不可用-1  
  3.     DEFAULT(0), AVAILABLE(1), UNAVAILABLE(-1);  
  4.     private int value = 0;
  5.     Status(int value){
  6. this.value = value;
  7.     }
  8.     public long getValue() {
    return this.value;
        }
  9.     public static Status getStatus(int value){
  10. Status status = null;
  11. for(Status s : Status.values()){
  12.     if(s.getValue() == value){
  13. status = s;
  14. break;
  15.      }
  16. }
  17.     return status;
  18.     }


数据库中我们存储的是0、1、-1来代表状态,mybatis本身支持枚举类型,但它的支持仅限枚举名称,见 http://blog.youkuaiyun.com/solo_knight/article/details/7325014。这里我们要将数字和枚举名做相应的映射关系。和ibatis一样,我们可以在resultMap中指定一个自定义的typeHandler


  1. public class StatusTypeHandler extends BaseTypeHandler implements TypeHandler {  
  2.     
  3.     @Override 
  4.     public void setNonNullParameter(PreparedStatement ps, int i,
  5.         Object parameter, JdbcType jdbcType) throws SQLException {
  6. ps.setInt(i, ((Status)parameter).ordinal());

  7.      @Override
    public Object getNullableResult(ResultSet rs, String columnName)
    throws SQLException {


    Integer value = rs.getInt(columnName);
    return null == value ? null : Status.getStatus(value);
    }


    @Override
    public Object getNullableResult(CallableStatement cs, int columnIndex)
    throws SQLException {


    Integer value = cs.getInt(columnIndex);
    return null == value ? null : Status.getStatus(value);
    }

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值