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 获取到的是女  测试成功!

  • 相关阅读:
    挑战编程 uva100 3n+1
    《算法问题实战策略》 BOGGLE
    图论 最短路专辑
    acwing 76. 和为S的连续正数序列
    leetcode 19 删除链表的倒数第N个节点
    水文一篇 汇报下最*的学**况
    acwing 81. 扑克牌的顺子
    Solr基础理论与维护管理快速上手(含查询参数说明)
    Solr基础理论与维护管理快速上手(含查询参数说明)
    利用SolrJ操作solr API完成index操作
  • 原文地址:https://www.cnblogs.com/gu-bin/p/10496855.html
Copyright © 2011-2022 走看看