无论是从预处理语句中设置一个值,还是从结果集里取出一个值,都会用类型处理器将获取的值以合适的方式转换成 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";
}
} }

  

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

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

在StudentMapper.xml中

 <resultMap id="StudentResult" type="Student">
<id column="sid" property="sid"/>
<result column="sname" property="sname"/>
<result column="ssex" property="ssex" javaType="String" jdbcType="INTEGER"/>
<result column="saddress" property="saddress"/>
</resultMap>
<select id="selectStudentBySsex" parameterType="String" resultType="Student">
select * from Student where ssex=#{ssex,javaType=String,jdbcType=INTEGER}
</select>

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

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

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

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

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

mybatis基础,mybatis配置文件核心组件typeHandler元素的更多相关文章

  1. mybatis基础,mybatis配置文件核心组件typeAliases元素

    typeAliases元素,术语类型别名 类型别名是为 Java 类型设置一个短的名字.它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余 <typeAliases> & ...

  2. MyBatis基础入门《五》核心配置文件

    MyBatis基础入门<五>核心配置文件 描述: 在前面的章节中,简单的学习使用了一下mybatis,对于配置文件没有过多详细说明. 这里先描述项目中的一个核心配置文件:mybatis-c ...

  3. MyBatis基础入门《十五》ResultMap子元素(collection)

    MyBatis基础入门<十五>ResultMap子元素(collection) 描述: 见<MyBatis基础入门<十四>ResultMap子元素(association ...

  4. MyBatis基础入门《十四》ResultMap子元素(association )

    MyBatis基础入门<十四>ResultMap子元素(association ) 1. id: >> 一般对应数据库中改行的主键ID,设置此项可以提高Mybatis的性能 2 ...

  5. 【Mybatis】MyBatis配置文件的使用(二)

    本例在[Mybatis]MyBatis快速入门(一)基础上继续学习XML映射配置文件 MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置(settings)和属性(properti ...

  6. mybatis基础(上)

    框架图 SqlSessionFactoryBuilder 通过SqlSessionFactoryBuilder创建会话工厂SqlSessionFactory 将SqlSessionFactoryBui ...

  7. MyBatis 的 XML 配置文件使用说明

    简介 MyBatis 的配置文件(默认名称为 mybatis-config.xml)包含了会深深影响 MyBatis 行为的设置(settings)和属性(properties)信息.文档的顶层结构如 ...

  8. mybatis基础系列(二)——基础语法、别名、输入映射、输出映射

    增删改查 mapper根节点及其子节点 mybatis框架需要读取映射文件创建会话工厂,映射文件是以<mapper>作为根节点,在根节点中支持9个元素,分别为insert.update.d ...

  9. MyBatis基础入门《十七》动态SQL

    MyBatis基础入门<十七>动态SQL 描述: >> 完成多条件查询等逻辑实现 >> 用于实现动态SQL的元素主要有: > if > trim > ...

随机推荐

  1. ImageView及其子类(二)

    实例:强大的图片按钮 下面的实例定义了多个图片按钮,并定义了两个ZoomButton.两个ZoomButton的android:src属性分别指定为@android:drawable/btn_minu ...

  2. 微信扫码下载APP

    前段时间开发过程中,要实现一个扫描二维码下载APP的功能,但是苹果系统中,微信不可以直接跳转苹果商店,需要先下载应用宝,显然太麻烦... 这样我们可以做个中间页,用中间页面生成二维码链接,在中间页代码 ...

  3. Javaweb阶段知识回顾一

    java基础增强 一.jdk1.5的新特性 自动封箱拆箱 封箱:Java自动将原始类型值转换成对应的对象,如将int的变量转换成Integer对象 拆箱:自动将对应的对象转换成原始类型值,将Integ ...

  4. LoadRunner相关架构图

    LoadRunner概览图: Lr架构图:

  5. Javascript中的 “&” 和 “|” 你知多少?

    .v-top { position: relative; top: -5px; font-size: 12px } 一.前言: 在文章开始之前,先出几个题目给大家看看: var num1 = 1 &a ...

  6. 如何用webbrowser获取ajax动态生成的网页的源码?

    1.步骤一:修改IE内核的版本(这个方法厉害了) public Form1() { InitializeComponent();int BrowserVer, RegVal; // get the i ...

  7. .Net基础体系和跨框架开发普及

    .net体系经过十几年发展,发生了很多变化.特别是在最近两年,随着开源和跨平台的发展,衍生出很多概念,像标准库,可移植库,.Net Core等,相信有不少同学对他们之间的关系是有一些困惑的,这里我从基 ...

  8. 龙珠超的新OP【限界突破×サバイバー】

    这首歌真的很燃 下载>>   限界突破×サバイバー 中文歌词 演唱:冰川清志 兴奋了!就去宇宙吧 最先端的“着迷”怎么样! 握在手中 突然想要大笑 糊里糊涂也习惯了吗! I can't g ...

  9. OSS.Common扩展.Net Standard支持实例分享

    上篇(.Net基础体系和跨框架开发普及)介绍了.Net当前生态下的大概情况,也分享了简单实现的过程,这篇文章就是讲解我的OSS.Common项目扩展.Net Standard 支持的过程,主要集中在: ...

  10. 获取SQL中某一列的类型及精度

    SELECT @type=t.name, @prec=c.prec FROM sysobjects o        JOIN syscolumns c on o.id=c.id        JOI ...