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";
}
}
}
<!-- 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元素的更多相关文章
- mybatis基础,mybatis配置文件核心组件typeAliases元素
typeAliases元素,术语类型别名 类型别名是为 Java 类型设置一个短的名字.它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余 <typeAliases> & ...
- MyBatis基础入门《五》核心配置文件
MyBatis基础入门<五>核心配置文件 描述: 在前面的章节中,简单的学习使用了一下mybatis,对于配置文件没有过多详细说明. 这里先描述项目中的一个核心配置文件:mybatis-c ...
- MyBatis基础入门《十五》ResultMap子元素(collection)
MyBatis基础入门<十五>ResultMap子元素(collection) 描述: 见<MyBatis基础入门<十四>ResultMap子元素(association ...
- MyBatis基础入门《十四》ResultMap子元素(association )
MyBatis基础入门<十四>ResultMap子元素(association ) 1. id: >> 一般对应数据库中改行的主键ID,设置此项可以提高Mybatis的性能 2 ...
- 【Mybatis】MyBatis配置文件的使用(二)
本例在[Mybatis]MyBatis快速入门(一)基础上继续学习XML映射配置文件 MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置(settings)和属性(properti ...
- mybatis基础(上)
框架图 SqlSessionFactoryBuilder 通过SqlSessionFactoryBuilder创建会话工厂SqlSessionFactory 将SqlSessionFactoryBui ...
- MyBatis 的 XML 配置文件使用说明
简介 MyBatis 的配置文件(默认名称为 mybatis-config.xml)包含了会深深影响 MyBatis 行为的设置(settings)和属性(properties)信息.文档的顶层结构如 ...
- mybatis基础系列(二)——基础语法、别名、输入映射、输出映射
增删改查 mapper根节点及其子节点 mybatis框架需要读取映射文件创建会话工厂,映射文件是以<mapper>作为根节点,在根节点中支持9个元素,分别为insert.update.d ...
- MyBatis基础入门《十七》动态SQL
MyBatis基础入门<十七>动态SQL 描述: >> 完成多条件查询等逻辑实现 >> 用于实现动态SQL的元素主要有: > if > trim > ...
随机推荐
- VMware虚拟机与宿主无法复制的解决办法
由于工作需要,上网机器使用虚拟机,因此需要经常来回的拷贝文件,而vmware从6.5一直走来到10.0.1,总是有一个问题很让人苦恼---共享粘贴板总是会无故失效.经常实验,发现可以经过以下方法临时解 ...
- Java 获取url参数
1. 方式一:使用HttpServletRequest对象 String id = arg0.getParameter("id"); mv.addObject("id&q ...
- Eclipse中javascript文件 clg 变为console.log();
Eclipse中javascript文件 clg 变为console.log(); window>preferance>JavaScript>Editor>Templates ...
- HTML5 简介、浏览器支持、新元素
什么是 HTML5? HTML5 是最新的 HTML 标准. HTML5 是专门为承载丰富的 web 内容而设计的,并且无需额外插件. HTML5 拥有新的语义.图形以及多媒体元素. HTML5 提供 ...
- Word,Excel,PowerPoint协作实用功能
Word,Excel,PowerPoint协作实用功能 纯手打,可能有错别字,使用的版本是office2013 转载请注明出处,谢谢 将Word表格复制到Excel中 点击Word表格左上角的按钮-- ...
- LPC4370使用学习:GPIO的引脚功能使用,和12864OLED模拟I2C驱动
一: 手中有块LPC4370的开发板,因为便宜,所以引脚引出的不多,而且只有基本的底板资源驱动代码和例程. 看着手册和例程看了老半天,写程序写了半天,结果GPIO老是驱动不起来,因为引脚配置寄存器中有 ...
- 源码(05) -- java.util.AbstractCollection<E>
java.util.AbstractCollection<E> 源码分析(JDK1.7) ------------------------------------------------- ...
- 支撑Pinterest日均1000+次试验的A/B测试平台揭秘
编者按:本文详细介绍了 Pinterest 内部A/B测试平台的搭建过程,对于无论是有技术能力和资源想要自建A/B测试系统的大公司,还是想在业务中引入第三方A/B测试方法和工具的中小公司都极具参考意义 ...
- Apache 的安装
1.获取源码包 cd /usr/local/src/ ls wget http://mirrors.cnnic.cn/apache/httpd/httpd-2.4.25.tar.gz 2.解压.编译. ...
- JDK1.8源码阅读系列之四:HashMap (原创)
本篇随笔主要描述的是我阅读 HashMap 源码期间的对于 HashMap 的一些实现上的个人理解,用于个人备忘,有不对的地方,请指出- 接下来会从以下几个方面介绍 HashMap 源码相关知识: 1 ...