`
xiaoych
  • 浏览: 145964 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

关于数据库中的boolean字段,在sqlmap中的映射问题

阅读更多
最近遇到一个问题非常有意思。大概是我在数据库的某张表里面建了一个boolean字段,比如名称叫做:is_hot 那么在sqlmap的result里面,情况可能会是这样:

<result property="isHot" column="IS_HOT" javaType="BOOLEAN" jdbcType="BIT"/>


我习惯了hibernate的方式,对应的类里面有这么一个属性:

private boolean isHot;
public void setHot(boolean isHot) { this.isHot = isHot; }
public boolean isHot() { return this.isHot; }


结果发现异常: There is no WRITEABLE property named...

仔细研究了一下ibatis的官方文档,发现其中有句话:基本数据类型如int,boolean和float不能直接使用。因为iBATIS是面向对象的解决方案。因此所有的参数和结果必须是对象。

将java代码改为:

private Boolean isHot;
public void setIsHot(Boolean isHot) { this.isHot = isHot; }
public Boolean getIsHot() { return this.isHot; }


问题解决。
分享到:
评论
4 楼 di1984HIT 2013-02-05  
2楼写的不错,自定义converter,很好的
3 楼 bluky999 2010-08-17  
我觉的2楼给出的这个方案还是不错的   比较实用!

可以放到自己的util包里 
2 楼 frogfool 2008-04-22  
补充说明:
ibatis 默认的java.lang.Boolean 的handler:com.ibatis.sqlmap.engine.type.BooleanTypeHandler只识别Boolean.TRUE和Boolean.FALSE2种状态,可根据需要自己写个BooleanTypeHandler支持null的情况:
在条件查询<isNull>时可能会用到

public class BooleanTypeHandler extends BaseTypeHandler {

	private static final byte YES = 1;

	private static final byte NO = 0;

	private static final byte NULL = -1;

	public Object getResult(CallableStatement cs, int columnIndex) throws SQLException {
		byte value = cs.getByte(columnIndex);
		if (YES == value) {
			return Boolean.TRUE;
		} else if (NO == value) {
			return Boolean.FALSE;
		}
		return null;
	}

	public Object getResult(ResultSet rs, int columnIndex) throws SQLException {
		byte value = rs.getByte(columnIndex);
		if (YES == value) {
			return Boolean.TRUE;
		} else if (NO == value) {
			return Boolean.FALSE;
		}
		return null;
	}

	public Object getResult(ResultSet rs, String columnName) throws SQLException {
		byte value = rs.getByte(columnName);
		if (YES == value) {
			return Boolean.TRUE;
		} else if (NO == value) {
			return Boolean.FALSE;
		}
		return null;
	}

	public void setParameter(PreparedStatement ps, int columnIndex, Object parameter, String jdbcType) throws SQLException {
		byte value = NULL;
		if (null != parameter) {
			if (((Boolean) parameter).booleanValue()) {
				value = YES;
			} else {
				value = NO;
			}
		}
		ps.setByte(columnIndex, value);
	}

	public Object valueOf(String value) {
		if (null != value) {
			if (Boolean.valueOf(value).booleanValue()) {
				return Boolean.TRUE;
			} else {
				return Boolean.FALSE;
			}
		}
		return null;
	}

}
1 楼 jarit 2007-12-14  
早点发过来看嘛。。。。

相关推荐

    PGSQL统计一个数据库所有数据库空字段的函数

    在PostgreSQL(简称PGSQL)中,有时我们需要统计数据库中所有表的空字段数量。这在数据分析、数据清洗等场景下非常有用。下面详细介绍如何创建并使用一个自定义函数来实现这一功能。 #### 函数概述 该函数名为`...

    Hibernate 配置跟数据库字段的对应关系

    对于注解方式,例如我们有一个User类,其中有个字段`username`,我们可以在字段上添加`@Column`注解: ```java public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id;...

    Greendao数据库升级添加String类型,

    在描述中提到的问题是关于在Greendao数据库升级过程中尝试添加非String类型的字段时遇到错误。 首先,让我们深入理解Greendao的数据库升级机制。Greendao提供了自动化的数据库升级支持,通过在`@Entity`注解中定义...

    hibernate使用中与各种数据库字段类型对应类型训练

    5. **布尔型**:BOOLEAN在数据库中表示True/False,Hibernate对应的Java类型是`java.lang.Boolean`。 6. **二进制数据**:BINARY、VARBINARY、BLOB。这通常用于存储图片或大文件,Hibernate用`byte[]`或`org.spring...

    JAVA数据类型与Hibernate的类型映射

    而在Java持久化框架Hibernate中,这些数据类型需要与数据库中的字段类型进行映射,以便正确地存储和检索数据。这篇博客主要探讨了Java数据类型如何与Hibernate的类型映射进行对应。 首先,Java的基本数据类型在...

    Mybatis Generator将tinyint映射成Integer的解决办法.pdf

    在使用MyBatis Generator生成Java DAO层代码时,可能会遇到将数据库中的tinyint类型映射成Integer类型的问题。这个问题在上述描述中得到了详细的解释。首先,我们来看一下问题的背景和原因。 在Java环境中,使用...

    javasqlTypes数据库字段类型java数据类型的对应关系

    在Java编程语言中,与数据库交互是常见的任务,这就涉及到`java.sql.Types`枚举类,它是Java数据类型与数据库字段类型之间的桥梁。`java.sql.Types`定义了一系列常量,这些常量代表了SQL标准中的数据类型,使得我们...

    JAVA通过实体生成数据库表

    在Java开发中,将实体类(Entity Class)映射到数据库表是一种常见的做法,这通常涉及到ORM(Object-Relational Mapping)技术。ORM允许我们用面向对象的方式处理数据库操作,而无需编写大量的SQL语句。Java中的...

    Java中Boolean与字符串或者数字1和0的转换实例

    特别是在数据库交互过程中,Boolean类型字段需要与数据库中的bit类型字段进行映射和转换。下面我们将详细介绍Java中Boolean与字符串或者数字1和0的转换实例。 一、Boolean类型与bit类型字段的映射 在Java中,...

    sqlmap安装包

    SQL注入是一种常见的网络安全威胁,攻击者通过在输入字段中插入恶意的SQL代码,来欺骗数据库服务器执行非预期的操作。SQLMap能自动识别多种类型的SQL注入漏洞,包括但不限于:盲注、时间盲注、基于错误的注入、堆叠...

    sqlmap使用文档

    通过以上命令,我们可以看到SQLMap的强大之处在于其自动化处理能力,使得安全研究人员能够在短时间内快速获取关于目标数据库系统的详细信息。这对于进行渗透测试和安全审计来说是非常有用的工具。

    jbpm3.2.2在mysql中字段的类型的错误

    在使用jbpm3.2.2(一个开源的工作流引擎)与MySQL数据库进行集成时,可能会遇到关于字段类型不匹配的问题。这通常发生在初始化数据库结构或升级流程引擎版本时,尤其是当MySQL数据库中的字段类型与Jbpm预期的不同时...

    VB升级ACCESS数据库(判断创建表和字段)

    在IT行业中,数据库管理系统是数据存储和管理的关键工具。Access是由Microsoft开发的一种关系型数据库管理系统,广泛应用于小型企业和个人用户。随着数据量的增长或需求的变化,有时需要将Access数据库升级到更高...

    sqlserver数据库类型对应Java中的数据类型

    在 Java 中,对数据库的操作需要通过 JDBC(Java Database Connectivity)来实现,而在 JDBC 中,需要将 SQL Server 的数据类型映射到 Java 中的数据类型。下面将详细介绍 SQL Server 数据库类型对应 Java 中的数据...

    mybatis-generator生成数据库中文注释

    在数据库中文注释的场景下,MBG的强大之处在于它能读取数据库表的元数据,包括字段的中文注释,并将这些注释写入生成的Java源文件中,使得代码更具可读性,尤其对于团队协作来说,良好的注释能够帮助开发者快速理解...

    SQLMap完成安全测试

    sqlmap是一个开源的渗透测试工具,它可以自动化检测和利用SQL注入漏洞并接管数据库服务器。它有一个强大的检测引擎,许多适合于终极渗透测试的良好特性和众多的操作选项,从数据库指纹、数据获取到访问底层文件系统...

    SQLServer常用字段类型

    在数据库设计与管理中,选择合适的字段类型对于数据的存储效率、查询性能以及数据完整性至关重要。SQL Server 提供了丰富的数据类型,覆盖了从基本数值到复杂文本、图像等各类数据的存储需求。下面将详细解析《SQL ...

    Java的Jtable、从数据库取数据显示在表格中

    ### Java的JTable:从数据库取数据显示在表格中的关键技术点 #### 一、数据库操作与JDBC连接 在Java中,使用JTable显示数据库中的数据是一个常见的应用场景。首先,我们需要了解如何通过Java Database ...

Global site tag (gtag.js) - Google Analytics