zoukankan      html  css  js  c++  java
  • Mybatis 类的转换器

        想一个事情 ,例:

              我数据库的表 定义了一个表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 获取到的是女  测试成功!

  • 相关阅读:
    spring boot 定时任务
    logger日志级别
    jstl与el结合常见用法
    sql 案例
    Python 环境
    java rsa加密解密
    app扫描二维码登陆
    TimerTask定时任务
    spring3+quartz2
    表关系
  • 原文地址:https://www.cnblogs.com/gu-bin/p/10496855.html
Copyright © 2011-2022 走看看