mybatis自定义类型转换器

有这样一个需求:

 

有一个布尔型的字段需要保存到数据库中,但是数据库不支持布尔类型,因此采用一位字符(char(1))来存储这个布尔值,javabean中仍然采用boolean类型。

 

我们采用mybatis作为持久层框架,但是就有一个问题,数据库中使char型,而程序中是boolean型,如何实现数据类型自动转换?

 

解决办法:

 

mybatis提供了对自定义的类型转换器(typeHandler)的支持,因此我们可以自己编写类型转换器来实现这一自动转换的功能。

 

实现步骤:

 

第一步:编写自定义类型转换器

 

/**
 * 
 */
package test.atfm.persistence.mybatis.handler;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;

/**
 * @author 
 * java中的boolean和jdbc中的char之间转换;true-Y;false-N
 */
public class BooleanTypeHandler implements TypeHandler {

	/* (non-Javadoc)
	 * @see org.apache.ibatis.type.TypeHandler#getResult(java.sql.ResultSet, java.lang.String)
	 */
	@Override
	public Object getResult(ResultSet arg0, String arg1) throws SQLException {
		String str = arg0.getString(arg1);
		Boolean rt = Boolean.FALSE;
		if (str.equalsIgnoreCase("Y")){
			rt = Boolean.TRUE;
		}
		return rt; 
	}

	/* (non-Javadoc)
	 * @see org.apache.ibatis.type.TypeHandler#getResult(java.sql.CallableStatement, int)
	 */
	@Override
	public Object getResult(CallableStatement arg0, int arg1)
			throws SQLException {
		Boolean b = arg0.getBoolean(arg1);
		return b == true ? "Y" : "N";
	}

	/* (non-Javadoc)
	 * @see org.apache.ibatis.type.TypeHandler#setParameter(java.sql.PreparedStatement, int, java.lang.Object, org.apache.ibatis.type.JdbcType)
	 */
	@Override
	public void setParameter(PreparedStatement arg0, int arg1, Object arg2,
			JdbcType arg3) throws SQLException {
		Boolean b = (Boolean) arg2;
		String value = (Boolean) b == true ? "Y" : "N";
		arg0.setString(arg1, value);
	}
}
 

 

第二步:注册类型转换器

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<properties resource="db.properties"></properties>

	<typeHandlers>
	<typeHandler javaType="Boolean" jdbcType="CHAR"
		handler="test.atfm.persistence.mybatis.handler.BooleanTypeHandler" />
	</typeHandlers>
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="${driver}" />
				<property name="url" value="${url}" />
				<property name="username" value="${username}" />
				<property name="password" value="${password}" />
			</dataSource>
		</environment>
	</environments>
</configuration>

 

 

第三步: 指定类型转换

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper  
PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"  
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">

<mapper namespace="test.atfm.persistence.mybatis.TestMapper">
	<resultMap type="TestBean" id="TestBeanMap">
		<id property="tname" column="tname" />
		<result property="isCancel" column="iscancel" javaType="Boolean" jdbcType="CHAR"/>
	</resultMap>

	<select id="selectTest" resultMap="TestBeanMap">
	select * from t_test
	</select>
	<insert id="insertTest" parameterType="TestBean">
	insert into t_test(tname,iscancel) values(#{tname},#{isCancel jdbcType=CHAR javaType=Boolean})
	</insert>
</mapper>
 

 

这样mybatis就能将数据库中的类型与java中的类型自动做转换了。其他类型转方法同上。

 

mybatis【自定义类型转换器】 文章目录结构第三方属性文件全局配置文件映射文件自定义的类型转换器实体类dao层测试 结构 第三方属性文件 db.properties # mysql \u5F00\u53D1\u73AF\u5883 driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/1227?characterEncoding=utf-8 username... 阅读详情

相关推荐

Mybatis自定义类型转换器(TypeHandler)

有些时候,java代码的类型和数据库jdbc的类型不一致时,需要自定义类型转换器,让mybatis能够识别。 比如java代码中boolean类型,存储到数据库中时用number类型。(true--1,false--0) 此时就需要我们创建类型转换器。创建方式有两种,一种是实现TypeHandler接口,还有一种是继承BaseTypeHandler实现类。观察源码发现,baseTypeHand...

qq_41718404的博客 1260

Java类型跟数据库类型的相互转换

1、自定义一个转换类型,获取数据库数据并输出数据时,把数据库的Varchar类型转为java的String[]类型 前提(1) 定义一个类VarcharToStringsHandler继承BaseTypeHandler<String[]>,且类上方加上 @MappedTypes({String[].class})和@MappedJdbcTypes({JdbcType.V...

weixin_30861797的博客 1130

MyBatis-Plus 如何自定义类型转换器策略?

在使用 MyBatis-Plus 进行持久层开发时,经常会遇到数据库字段类型与实体类属性类型不匹配的情况,在这种情况下,就需要进行类型转换。MyBatis-Plus 提供了一种灵活的方式来实现类型转换,即自定义类型转换器策略。本文将详细介绍如何使用 MyBatis-Plus 自定义类型转换器策略,并给出相关的代码实例。最后,我们需要在实体类的属性上标记相应的注解,以告诉 MyBatis-Plus 使用哪个类型转换器。

理论都是虚的,代码才是王道。 1353

Java数据类型的转换

Java的整数类型包括byte、short、int和long。它们之间的转换可以通过强制类型转换或隐式类型转换进行。

程序猿老白~的博客 2206

RenderDoc实战:5分钟搞定安卓Vulkan应用抓帧(含常见连接失败排查)

本文详细介绍了如何使用RenderDoc工具对安卓Vulkan应用进行抓帧分析,包括环境配置、完整抓帧流程及常见连接问题的解决方案。通过实战案例和高级技巧,帮助开发者快速定位渲染问题和性能瓶颈,提升移动图形开发效率。

weixin_28318011的博客 281

Python 格点数据插值到站点 最邻近插值 双线性插值

python 气象数据格点数据插值到站点,最邻近插值法,双线性插值法

好记性不如烂笔头 8459

mybatis 与java mysql 数据类型对应关系

Mybatis中javaType和jdbcType对应关系 JDBCType JavaType CHAR String 建议使用 mysql char(1) 代替boolean 0 , 1 VARCHAR String LONGVARCHAR Strin...

足球带我奔跑 8107

非线性动力学_用MatCont分析非线性动力学方程组(一)

写在前面:笔者打算写两到三篇系列文章介绍MatCont,此为第一篇《用MatCont分析非线性动力学方程组(一)》。MatCont是一个基于Matlab而开发的免费工具包,专门用来做非线性动力学模型分叉、向量场、周期性等分析,符号(连续性)运算和数值(离散性)运算均适用。该工具的开发及研究项目由比利时Ghent大学的Willy Govaerts教授、荷兰Utrecht大学的Yuri Kuznets...

weixin_39700215的博客 2766

mybatis-plus 存储布尔值true、false

3.存储和获取,存储true的时候数据库会填入1,存储false的时候数据库会存储0,获取的时候,会自动将1和0转换成true和false。1.设置数据库字段类型为tinyint长度为1。2.将实体类中的类型设置成boolean。...

Good Luck 1万+

RTOS任务调度原理:高优先级任务为何在低优先级任务执行时无法响应

实时操作系统(RTOS)的核心在于其确定性的任务调度机制,它通过优先级抢占确保关键任务及时执行。其基本原理是调度器仅在特定调度点(如任务主动阻塞、中断退出时)运行,比较就绪态任务的优先级并切换上下文。这一机制的技术价值在于为嵌入式系统提供可预测的响应时间,广泛应用于工业控制、汽车电子和物联网设备等对实时性要求高的场景。当低优先级任务执行**长时间非阻塞运算**且无中断发生时,调度器无法被触发,导致高优先级任务虽处于就绪态却无法获得CPU,造成系统响应延迟。理解**任务状态机**与调度点,是优化实时性、避免此

weixin_33508411的博客 287

yolov8知识蒸馏代码详解:支持logit和feature-based蒸馏

特别地,在COCO数据集上对MAP中的RetinaNet检测器(resnet50主干)获得了3.4%的性能提升,在Cityscapes数据集上, 针对mIoU指标,PSPNET(resnet-18 backbone)获得5.81%的性能提升。大部分的KD方法都是通过algin学生网络和教师网络的归一化的feature map, 最小化feature map上的激活值的差异。MGD是一种真正通用的基于特征feature的知识蒸馏方法,它可以用于各种任务,包括图像分类,目标检测,语义分割和实例分割。

@bangbang的博客 7285

Mybatis自定义类型转换器

Mybatis自定义类型转换器 一、创建类型转换器类,实现TypeHandler接口

总是学不会 2658

Vue3 - 详细实现接入使用海康威视监控云端显示及控制功能,网站集成安装海康监控及实时监控显示、回放、放大缩小画面、视频画面截图、截屏抓拍、摄像头控制,实时推流及播放器解决延迟卡顿等问题(详细代码)

vue3,nuxt3,海康威视,海康监控,摄像头监控,实时监控画面,海康插件,视频播放,回放,视频流地址,取流协议,视频sdk播放,hik,rtsp,rtmp,hls,ws,网站,网页,h5页面,后台管理系统,vue3对接海康监控设备,无法连接,报错,vue3对接海康处理接口认证规则,监控实时预览和回放功能,海康api接口,安全认证,海康开放平台,官方文档,播放海康摄像头的监控视频,海康实时监控播放详细步骤,web,黑屏,特别卡不流畅怎么办,解决无法推流,录像,连接不上,vue3,海康,vue海康视频监控,

🏆 前端领域优质创作者 1万+

MyBatis自定义类型转换器实现加解密

需求场景:当数据库中保存的部分数据需要加密,页面需要正常显示时。这是就需要我们自定义类型转换器,在Mybatis执行SQL得到结果时,通过自定义类型转换器将CHAR或者VARCHAR2进行加解密处理,Java代码如下: /**自定义typeHandler   * 1 插入数据库, 加密  * 2 查询,解密  * @author Administrator   *   */

nz360的专栏 4456

PyTorch实战(25)——使用PyTorch构建DQN模型

深度Q网络 (Deep Q-learning Network, DQN) 在强化学习领域取得了巨大的成功和广泛的应用,PyTorch 结合 gymnasium 库为我们提供了强大的工具,支持在各种强化学习环境中测试不同类型的深度强化学习模型。在本节中,我们使用 PyTorch 框架构建使用卷积神经网络架构的 DQN 模型,模型通过自主学习掌握 Atari 经典游戏《Pong》的操作策略,最终实现击败电脑对手的竞技目标。

盼小辉丶的博客 3447

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Mybatis 自定义类型转换器

类型转换器 1. 简介 org.apache.ibatis.type.BaseTypeHandler 上图是mybatis自带的部分类型转换器,基本全部覆盖了java常用类型。 2. 自定义类型转换器 参考官网示例即可 3. 流程 3.1 初始化自带的类型转换器 package org.apache.ibatis.type; public class TypeHandlerRegistry{ public TypeHandlerRegistry(Configuration configuration)

博客 1077

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Mybatis使用小技巧-自定义类型转换器

一般情况下,mybatis自带的类型转换器已经足够用了,但是需求永无止境,自定义类型转换器还是学一下吧,指不定哪天会用上。 举个没啥用的示例 javabean如下: public class User { private Integer id; private Message message; } public class Message { private Intege...

weixin_33894992的博客 242

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Mybatis自定义类型转换器实现

自定义类型转换器步骤: 1.创建转换器:需要实现TypeHandler接口 通过阅读源码发现,此接口有一个实现类 BaseTypeHandler ,因此 要实现转换器有2种选择: i. 实现接口TypeHandler接口 ii.继承BaseTypeHandler类 这里我们优先使用TypeHandler的实现类BaseTypeHandler 这里我们用javaType–>jdbcType(boolean -integer)为例,在Java里true表示性别男,对应数据库中的1,false表示女,对应

weixin_43885823的博客 1057
上一篇: 设计一个通用数据访问框架
下一篇: 利用MyBatis Generator自动创建代码
maimode
博客等级 码龄19年 11粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值