mybatis用map接收返回对象,不想让数据类型为tinyint自动转换为boolean,如何处理

本文主要是介绍mybatis用map接收返回对象,不想让数据类型为tinyint自动转换为boolean,如何处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在 MyBatis 中,当使用 Map 来接收查询结果时,MyBatis 会根据列的数据类型自动选择合适的 Java 类型来映射这些值。默认情况下,如果数据库列是 TINYINT(1),MyBatis 可能会错误地将其映射为 boolean,因为它经常被误解为只能存储 0 或 1,并且用于表示真/假值。然而,正如前面提到的,TINYINT 实际上是一个整数类型,应该映射为 Integer

为了避免 TINYINT 被自动转换为 boolean,你可以采取以下措施:

1. 使用 resultType 指定结果类型

如果你正在使用注解来配置你的 Mapper 接口,你可以使用 @Select 注解,并指定 resultType 为 Map<String, Object>。这将确保 MyBatis 不会尝试对 TINYINT 进行特殊的布尔类型映射。

 
java@Select("SELECT * FROM your_table WHERE id = #{id}")
Map<String, Object> selectById(int id);

2. 使用 resultMap 并明确指定 javaType

如果你使用的是 XML 配置文件,你可以创建一个 resultMap,并在其中明确指定 TINYINT 列应该映射为 java.lang.Integer 类型。

 
xml<resultMap id="yourResultMap" type="java.util.HashMap">
<result column="your_tinyint_column" property="yourTinyIntColumn" javaType="java.lang.Integer"/>
<!-- 其他 result 配置 -->
</resultMap><select id="selectById" resultMap="yourResultMap">
SELECT * FROM your_table WHERE id = #{id}
</select>

在这个配置中,javaType="java.lang.Integer" 明确告诉 MyBatis 将 your_tinyint_column 列映射为 Integer 类型。

3. 使用 typeHandler

如果上述方法仍然不能解决问题,你可以考虑自定义一个 TypeHandler 来处理 TINYINT 到 Integer 的映射。尽管这通常用于更复杂的类型转换场景,但它也可以用于覆盖 MyBatis 的默认行为。

 
javapublic class TinyIntTypeHandler extends BaseTypeHandler<Integer> {
@Override
public void setNonNullParameter(PreparedStatement ps, int i, Integer parameter, JdbcType jdbcType) throws SQLException {
ps.setInt(i, parameter);
}@Override
public Integer getNullableResult(ResultSet rs, String columnName) throws SQLException {
return rs.getInt(columnName);
}@Override
public Integer getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
return rs.getInt(columnIndex);
}@Override
public Integer getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
return cs.getInt(columnIndex);
}
}

然后,在你的 MyBatis 配置文件中注册这个 TypeHandler

 
xml<typeHandlers>
<typeHandler handler="com.yourpackage.TinyIntTypeHandler"/>
</typeHandlers>

或者在 Mapper XML 文件中指定:

 
xml<result column="your_tinyint_column" property="yourTinyIntColumn" typeHandler="com.yourpackage.TinyIntTypeHandler"/>

4. 检查 MyBatis 版本和数据库驱动

确保你使用的 MyBatis 版本没有已知的与此问题相关的 bug。同时,检查你的数据库驱动是否是最新版本,有时候驱动的问题也可能导致类型映射不正确。

注意事项

  • 在处理 TINYINT 类型的列时,始终要记得检查数据库中的实际数据类型和值,以确保它们符合你的期望。
  • 如果你在多个地方使用 TINYINT,并且希望全局改变其映射行为,使用自定义 TypeHandler 可能是最好的选择。如果只是偶尔需要改变映射,使用 resultMap 和 javaType 指定可能就足够了。

这篇关于mybatis用map接收返回对象,不想让数据类型为tinyint自动转换为boolean,如何处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1020917

相关文章

mybatis的整体架构

mybatis的整体架构分为三层: 1.基础支持层 该层包括:数据源模块、事务管理模块、缓存模块、Binding模块、反射模块、类型转换模块、日志模块、资源加载模块、解析器模块 2.核心处理层 该层包括:配置解析、参数映射、SQL解析、SQL执行、结果集映射、插件 3.接口层 该层包括:SqlSession 基础支持层 该层保护mybatis的基础模块,它们为核心处理层提供了良好的支撑。

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

基于51单片机的自动转向修复系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机

Python3 BeautifulSoup爬虫 POJ自动提交

POJ 提交代码采用Base64加密方式 import http.cookiejarimport loggingimport urllib.parseimport urllib.requestimport base64from bs4 import BeautifulSoupfrom submitcode import SubmitCodeclass SubmitPoj():de

Thymeleaf:生成静态文件及异常处理java.lang.NoClassDefFoundError: ognl/PropertyAccessor

我们需要引入包: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>sp

Collection List Set Map的区别和联系

Collection List Set Map的区别和联系 这些都代表了Java中的集合,这里主要从其元素是否有序,是否可重复来进行区别记忆,以便恰当地使用,当然还存在同步方面的差异,见上一篇相关文章。 有序否 允许元素重复否 Collection 否 是 List 是 是 Set AbstractSet 否

Spring+MyBatis+jeasyui 功能树列表

java代码@EnablePaging@RequestMapping(value = "/queryFunctionList.html")@ResponseBodypublic Map<String, Object> queryFunctionList() {String parentId = "";List<FunctionDisplay> tables = query(parent

Mybatis中的like查询

<if test="templateName != null and templateName != ''">AND template_name LIKE CONCAT('%',#{templateName,jdbcType=VARCHAR},'%')</if>

Java第二阶段---09类和对象---第三节 构造方法

第三节 构造方法 1.概念 构造方法是一种特殊的方法,主要用于创建对象以及完成对象的属性初始化操作。构造方法不能被对象调用。 2.语法 //[]中内容可有可无 访问修饰符 类名([参数列表]){ } 3.示例 public class Car {     //车特征(属性)     public String name;//车名   可以直接拿来用 说明它有初始值     pu