想一个事情 ,例:

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

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

  

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

        Mybatis 类的转换器

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

        Mybatis 类的转换器

    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 ? "男":"女";
    }
}

 

     Mybatis 类的转换器

    重写类的方法:

      set 就是java 向数据库存取

      get就是数据库读到java

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

Mybatis 类的转换器

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

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

    Mybatis 类的转换器

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

      我们现在创建一个 resultMap标签  

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

 

    测试:

      Mybatis 类的转换器

          Mybatis 类的转换器

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

相关文章:

  • 2021-05-30
  • 2021-08-06
  • 2021-08-20
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-09-17
猜你喜欢
  • 2021-06-19
  • 2021-09-12
  • 2021-12-13
  • 2022-12-23
  • 2022-12-23
  • 2021-11-21
  • 2022-12-23
相关资源
相似解决方案