MyBatis类型转换器

1. MyBatis自带一些常见类型处理器

在这里插入图片描述

2. 自定义MyBatis类型处理器

java --数据库(jdbc类型)
  示例:
   实体类Student:boolean stuSex
     true:男
     false:女
   表student:int stuSex
     1:男
     2:女
   自定义类型转换器(boolean - int)
具体操作步骤

  1. 创建转换器:需要实现TypeHandler接口,可使用TypeHandler的一个实现类BaseTypeHandler
  2. 实现BaseTypeHandler的方法
//在此位置的泛型为Java类型
public class BooleanAndIntConverter extends BaseTypeHandler<Boolean>{		
	//java(boolean) - > DB(int)
	/*
	 * ps:PreparedStatement对象
	 * i:PreparedStatement对象操作参数的位置
	 * parameter:java值
	 * jdbcType:jdbc操作的数据库类型
	 */
	@Override
	public void setNonNullParameter(PreparedStatement ps, int i, Boolean parameter, JdbcType jdbcType) throws SQLException {
		if(parameter) {
			//1
			ps.setInt(i, 1);
		}else {
			ps.setInt(i, 0);
		}
	}
	//get : DB(int) - > java(Boolean)
	@Override
	public Boolean getNullableResult(ResultSet rs, String columnName) throws SQLException {
		int sexNum = rs.getInt(columnName);
		return sexNum ==1 ? true : false;
	}

	@Override
	public Boolean getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
		int sexNum = rs.getInt(columnIndex);
		return sexNum ==1 ? true : false;
	}
	//CallableStatement --存储过程 存储函数
	@Override
	public Boolean getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
		int sexNum = cs.getInt(columnIndex);
		return sexNum ==1 ? true : false;
	}
}
  1. 修改conf.xml
     1.如果类中的属性和表中的字段能够合理识别 例如(String-varchar)否则可以使用resultMap 例如(Boolean - int )
	<select id="queryStudentByStunoWithConverter"	parameterType="int"	 resultMap="studentResult">
		select * from student where stuno = #{stuno}
	</select>
  1. 配置resultMap
     type为返回值类型,studentResult为配置的resultMap 的id值,通过id找resultMap配置
     resultMap中分为主键与非主键,主键用id 非主键用result
	<!-- type为返回值类型,studentResult为配置的resultMap 的id值,通过id找resultMap配置 -->
	<resultMap type="student"  id="studentResult">
		<!-- 分为主键与非主键
		主键用id   非主键用result -->
		<id property="stuNo" column="stuno"/>
		<result property=" stuSex" column="stunsex"  javaType="boolean"  jdbcType="INTEGER"/>		
	</resultMap>
  1. 测试方法
	public static void queryStudentByStunoWithConverter() throws IOException {
		Reader reader = Resources.getResourceAsReader("conf.xml");
		SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
		SqlSession session = sessionFactory.openSession();
		StudentMapper studentMapper = session.getMapper(StudentMapper.class);
		System.out.println(studentMapper.queryStudentByStunoWithConverter(1).toString());
		session.close();
	}

使用转换器增加数据:

//添加学生带转换器
		public static void addStudentsWithConverter() throws IOException {
			Student student = new Student(8 , "ll" , 22 , "g4" , true);
			Reader reader = Resources.getResourceAsReader("conf.xml");
			SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
			SqlSession session = sessionFactory.openSession();
			StudentMapper studentMapper = session.getMapper(StudentMapper.class);
			studentMapper.addStudentWithConverter(student);
			session.commit();
			session.close();
		}
<!-- 带转换器的增加 -->
	<insert id="addStudentWithConverter"   parameterType="student">
				insert into student (stuno , stuname , stuage , graname , stusex) values ( #{stuNo} , #{stuName} , #{stuAge} , #{graName} , #{stuSex , javaType=boolean, jdbcType=INTEGER });
	</insert>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值