zoukankan      html  css  js  c++  java
  • mybatis基础,mybatis配置文件核心组件typeHandler元素

    无论是从预处理语句中设置一个值,还是从结果集里取出一个值,都会用类型处理器将获取的值以合适的方式转换成 Java 类型

    可以重写类型处理器或创建你自己的类型处理器来处理不支持的或非标准的类型

    实现 org.apache.ibatis.type.TypeHandler 接口, 或继承一个很便利的类 org.apache.ibatis.type.BaseTypeHandler, 然后可以选择性地将它映射到一个 JDBC 类型

    public class MyDemoTypeHandler extends BaseTypeHandler<String> {
    
    	@Override
    	public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType)
    			throws SQLException {
    		String ssex=(String)parameter;
    		if("男".equals(ssex)){
    			ps.setInt(i, 0);
    		}else if("女".equals(ssex)){
    			ps.setInt(i, 1);
    		}else{
    			ps.setInt(i, 2);
    			
    		}
    	}
    
    	@Override
    	public String getNullableResult(ResultSet rs, String columnName) throws SQLException {
    		int ssex=rs.getInt(columnName);
    		if(ssex==0){
    			return "男";
    		}else if(ssex==1){
    			return "女";
    		}else{
    			return "not know";
    		}
    	}
    
    	@Override
    	public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
    		int ssex=rs.getInt(columnIndex);
    		if(ssex==0){
    			return "男";
    		}else if(ssex==1){
    			return "女";
    		}else{
    			return "not know";
    		}
    		
    	}
    
    	@Override
    	public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
    		int ssex=cs.getInt(columnIndex);
    		if(ssex==0){
    			return "男";
    		}else if(ssex==1){
    			return "女";
    		}else{
    			return "not know";
    		}
    	}
    
    }
    

      

    1 <!-- mybatis-config.xml -->
    2 <typeHandlers>
    3         <typeHandler handler="cn.cgq.demo.mybatis.typeHandler.MyDemoTypeHandler" javaType="String" jdbcType="INTEGER"/>
    4     </typeHandlers>

    MyBatis 不会窥探数据库元信息来决定使用哪种类型,所以你必须在参数和结果映射中指明那是 VARCHAR 类型的字段, 以使其能够绑定到正确的类型处理器上。

    在StudentMapper.xml中

    1 <resultMap id="StudentResult" type="Student">  
    2        <id column="sid" property="sid"/> 
    3        <result column="sname" property="sname"/>
    4        <result column="ssex" property="ssex" javaType="String" jdbcType="INTEGER"/>
    5        <result column="saddress" property="saddress"/>  
    6     </resultMap>
    7 <select id="selectStudentBySsex" parameterType="String" resultType="Student">
    8         select * from Student where ssex=#{ssex,javaType=String,jdbcType=INTEGER}
    9     </select>

    javaType="String"java对应的数据类型

    jdbcType="INTEGER"数据路对应的数据类型

    表为4个字段,在数据库中ssex用int存储,而在java中用“男”,“女”来表示数据库中的0,1

    1 Student student = session.selectOne("cn.cgq.demo.mybatis.mapper.StudentMapper.selectStudentBySsex", "女");
    2                 System.out.println(student.toString());

    这样就可以完成数据类型的转换

  • 相关阅读:
    Jedis API操作Redis数据库
    Go开发环境安装与环境变量配置
    Java中使用md5进行hash运算
    oracle创建表空间、用户
    CentOS安装MySQL
    Go语言之快速排序
    软件包管理rpm和yum
    第十一节:configParse模块
    redis数据库
    tcpdump命令
  • 原文地址:https://www.cnblogs.com/tademeng/p/6539155.html
Copyright © 2011-2022 走看看