Mabatis typeHandler的使用
来源:互联网 发布:阿里云免费ssl 编辑:程序博客网 时间:2024/05/17 09:17
在实际开发中,可能会遇到这种情况,就是在存储性别时,数据库中存的是int 类型,男女用0和1进行存储,但是在表单进行提交时,或者要在表单进行显示性别时,不可能去显示数据库中存储的0和1,而是显示经过处理的男和女,这时处理的方法有两种,一种是在后台查询到数据的时候,对数据进行判断,然后赋予相应的值,然后将值返回到页面进行显示,另一种方法就是使用mybatis 提供的typeHandler进行数据类型的转换;
mybatis 中自定义typehandle的使用;
自定义一个类,去继承父类 BaseTypeHandler
package com.test.util;import java.sql.CallableStatement;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import org.apache.ibatis.type.BaseTypeHandler;import org.apache.ibatis.type.JdbcType;public class SexTypeHandler extends BaseTypeHandler{/** * 根据查询到的结果进行判断返回到页面 */@Overridepublic String getNullableResult(ResultSet resultSet, String arg1)throws SQLException {String resultSets=resultSet.getString(arg1);if(resultSets.equals("0")){return "女";}else{return "男";}}@Overridepublic String getNullableResult(ResultSet resultSet, int arg1)throws SQLException {String resultSets=resultSet.getString(arg1);if(resultSets.equals("0")){return "女";}else{return "男";}}@Overridepublic String getNullableResult(CallableStatement resultSet, int arg1)throws SQLException {String resultSets=resultSet.getString(arg1);if(resultSets.equals("0")){return "女";}else{return "男";}}/** * 进行判断赋值 * @param resultSet * @param arg1 * @param arg2 * @param arg3 * @throws SQLException */@Overridepublic void setNonNullParameter(PreparedStatement preparedStatement, int i,String j, JdbcType arg3) throws SQLException {//判断如果传递过来的值是男,就存1,否则存0if(j.equals("男")){preparedStatement.setString(i, Integer.valueOf(1).toString());}else{preparedStatement.setString(i, Integer.valueOf(0).toString());}}}
1.@MappedJdbcTypes定义的是JdbcType类型,这里的类型不可自己随意定义,必须要是枚举类org.apache.ibatis.type.JdbcType所枚举的数据类型。
2.@MappedTypes定义的是JavaType的数据类型,描述了哪些Java类型可被拦截。
3.在我们启用了我们自定义的这个TypeHandler之后,数据的读写都会被这个类所过滤
4.在setNonNullParameter方法中,我们重新定义要写往数据库的数据。
5.在另外三个方法中我们将从数据库读出的数据类型进行转换。
在Mapper中的配置如下:
在mapper中的resultMap中的配置如上,在查询的时候,返回值的类型parameterMap=resultMap即可,但是该种方式只适用于查询数据的时候进行数据的转换,但是在插入数据的时候,并不适合;
在插入的时候配置如下:
insert into test (id, createDate, sex ) values (#{id,jdbcType=INTEGER}, #{createdate,jdbcType=VARCHAR,typeHandler=com.test.util.typeHandler}, #{sex,jdbcType=INTEGER,typeHandler=com.test.util.SexTypeHandler} )
亦可以这样
insert into test (id, createDate, sex ) values (#{id,jdbcType=INTEGER}, #{createdate,jdbcType=VARCHAR,javaType=Date}, #{sex,jdbcType=INTEGER,javaType=String} )
@RequestMapping("insert")
public int insert(){
Test test=new Test();
test.setCreatedate(new Date());
test.setId(4);
test.setSex("男");
Integer a=testMapper.insert(test);
return a;
}
public int insert(){
Test test=new Test();
test.setCreatedate(new Date());
test.setId(4);
test.setSex("男");
Integer a=testMapper.insert(test);
return a;
}
阅读全文
1 0
- Mabatis typeHandler的使用
- Mybatis TypeHandler的使用
- Mybatis中typeHandler的使用
- MyBatis系列之TypeHandler的使用
- mabatis的动态sql
- 使用TypeHandler实现数据入库前的过滤
- 使用mybatis的typeHandler对clob进行流读写
- TypeHandler的实例...
- TypeHandler的实例...
- TypeHandler的实例...
- SSM中mabatis的配置
- Mabatis传多个参数的方法
- Hibernate与Mabatis的不同
- spring与mabatis的结合
- 使用mabatis进行mapper开发实例
- Ibatise 使用TypeHandler将数据库中的值与java的枚举值之间转换
- [Java][ibatis]Ibatis TypeHandler使用总结
- 基于Annotation的mabatis与Spring整合
- 听说你会求逆序对??(自创的脑洞题)
- RecyclerView 盖住 AppBarLayout 问题解决
- rocketmq注意点
- 财务人员给员工发工资时经常遇到这样一个问题, 即根据每个人的工资额(以元作为单位)计算出各种面值的钞票的张数,且要求总张数最少。 例如,某职工工资为3436元,发放方案为: 100元34张,20元1张
- shell学习五----变量子串
- Mabatis typeHandler的使用
- 四、 基础教程-图表主要组成
- char* 与 char[] 的区别
- 网易2017春招笔试真题编程题集合--工作安排
- 我的算法模板
- vim+NERDTree
- HDU 6065 RXD, tree and sequence(在线倍增LCA+CDQ分治+离线tarjan-LCA+dp)
- NIO
- Android Studio 任务管理器功能思路和代码(一)