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

    KingbaseES数据库部署及双机热备配置 Dataguard双机热备部署 注:配置期间使用数据库的属主用户进行操作 1.1 数据一致性准备 (1)修改数据库的配置文件参数:(2阶段初始化的数据库实 ...

  2. JS前端的分享功能

    给网页加上分享代码,借助网友的力量推广网站,目前已经很流行了 以下是网页代码 QQ空间分享代码如下: <a href="javascript:void(0);" onclic ...

  3. jdbc数据连接池dbcp要导入的jar包

    jdbc数据连接池dbcp要导入的jar包 只用导入commons-dbcp-x.y.z.jarcommons-pool-a.b.jar

  4. JWPlayer使用指南

    http://support.jwplayer.com/customer/portal/articles/1499103-quickstart-reference <div id="m ...

  5. HDU1175(dfs)

    连连看 Time Limit:10000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u   Description ...

  6. 不常见但很有用的chrome调试工具使用方法

    前面的话   对于chrome调试工具,常用的是elements标签.console标签.sources标签和network标签.但实际上,还有一些不太常见但相当实用的方法可以提高网页调试效率.本文将 ...

  7. KB奇遇记(7):不靠谱的项目实施计划

    在ERP项目启动前期,项目组两方项目经理和我等几个人单独跟总裁开会,讨论了初步的ERP实施计划,本来第一期上线只是考虑上其中一家工厂而已,结果临时加入了深加工的工厂.本来项目组预定计划是2017年1月 ...

  8. Jenkins学习——Jenkins是什么

    Jenkins是什么 对于Jenkins是什么,百度百科给的答案是这样的:Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能. 通过这句话,我们可以得到这样的一 ...

  9. PHP面向对象编程简单实例

     <?php date_default_timezone_set("PRC"); /** 1.静态属性用于保存类的公有数据* 2.静态方法里面只能访问静态属性* 3.静态成员 ...

  10. 【.Net Framework 体积大?】不安装.net framework 也能运行!?原理补充-3

    继续补充点吧.接上一篇,我们实现了.net framework的精简的步骤. 有网友评论了,那个核心的 mscoree.dll 从.net framework 2.0开始,微软开始了新的CLR承载模型 ...