Mybatis 类的转换器

本文详细介绍了如何在MyBatis中使用自定义类型转换器解决数据库字段与实体类属性类型不匹配的问题,通过实例展示了从数据库int类型到Java String类型的转换过程。

    想一个事情 ,例:

          我数据库的表 定义了一个表student 里面有一个字段 stu_sex  int类型  可是我对应的实体类是 String 类型或者其他类型

          这个时候 实体类与数据库表肯定对应不上 我该怎么办呢?怎么解决这个问题? 《针对于极端类型》《一般没人这么写》

  

  我现在有一个表:student表  1表示男 0 表示女

        

    对应的实体类 Student类:“男” --“女”

        

    1.  这个使用就需要用到mybatis提供的类转换器了:

        首先我们需要创建一个转换器  转换器就是一个java类 这个类实现了TypeHandler 接口 或者继承了BaseTypeHandler类 他就是一个转换器了!一般都继承BaseHandler类 因为方便些!

      

package org.bin.test;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * 类的转换器  现在要把 数据库中的 Int 转换成String类型
 * 需要继承 BaseTypeHandler 这类
 */

/*
 * preparedStatement:PreparedStatement对象
 * i:PreparedStatement对象操作参数的位置
 * s:java值
 * jdbcType:jdbc操作的数据库类型
 */
public class TypeHandlerAndString extends BaseTypeHandler<String> {
    @Override
    public void setNonNullParameter(PreparedStatement preparedStatement, int i, String s, JdbcType jdbcType) throws SQLException {
        //判断如果是男的  向数据库插入1  如果不是 插入 0
        if (s.equals("男")){
          preparedStatement.setInt(i,1);
        }else {
            preparedStatement.setInt(i,0);
        }
    }

    @Override
    public String getNullableResult(ResultSet resultSet, String s) throws SQLException {
        int sex =   resultSet.getInt(s);
        return sex == 1 ? "男":"女";
    }

    @Override
    public String getNullableResult(ResultSet resultSet, int i) throws SQLException {
        int sex =   resultSet.getInt(i);
        return sex == 1 ? "男":"女";
    }

    @Override
    public String getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
        int sex =   callableStatement.getInt(i);
        return sex == 1 ? "男":"女";
    }
}

 

     

    重写类的方法:

      set 就是java 向数据库存取

      get就是数据库读到java

  2.配置mybatis的核心配置文件

    现在我们可以看到 handler:转换器的全路径  jdbctype:数据库字段 的类型 javatype :实体类中的类型

  3.我们现在编写Mapper.xml文件配置

    

  注意:现在数据库的字段类型 与 实体类的类型不一样了 返回值就不是 resultType了 而是变成了  resultMap!!

      我们现在创建一个 resultMap标签  

        注意我圈出来的 地方 这些都是主要注意的地方!

 

    测试:

      

          

    好了测试成功了!数据库存的是0 获取到的是女  测试成功!

转载于:https://www.cnblogs.com/gu-bin/p/10496855.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值