mysql有个字段是bit,只存储1和0,是二进制存储,那么在java的dao层如何映射成boolean呢


@Column(name="is_standard")
private boolean isStandard; public void setIsStandard(boolean isStandard){
this.isStandard = isStandard;
} public boolean getIsStandard(){
return isStandard;
}

其实就是在底层dao做反射的时候,先判断字段(比如isStandard)的字段类型是否为boolean,如果是,则在查出数据库字段bit is_standard的时候,做转换


private List<T> populateData(ResultSet resultSet, Class<T> clazz) throws Exception {
List<T> dataList = new ArrayList<T>();
List<Field> fieldList = MappingAnnotationUtil.getAllFields(clazz); ResultSetMetaData rsmd = resultSet.getMetaData();
int columnsCount = rsmd.getColumnCount();
List<String> columnNameList = new ArrayList<String>();
for(int i = 0; i < columnsCount; i++){
columnNameList.add(rsmd.getColumnLabel(i+1).toLowerCase());
} while (resultSet.next()) {
T bean = clazz.newInstance();
for(Field f : fieldList) {
String columnName = MappingAnnotationUtil.getDBCloumnName(clazz, f).toLowerCase();
if(columnNameList.contains(columnName)) {
Object columnValueObj = null;
Class<?> filedCls = f.getType(); if(filedCls == int.class || filedCls == Integer.class) {
columnValueObj = resultSet.getInt(columnName);
} else if(filedCls == String.class) {
columnValueObj = resultSet.getString(columnName);
} else if(filedCls == boolean.class || filedCls == Boolean.class) {
columnValueObj = resultSet.getBoolean(columnName);
} else if(filedCls == byte.class || filedCls == Byte.class) {
columnValueObj = resultSet.getByte(columnName);
} else if(filedCls == short.class || filedCls == Short.class) {
columnValueObj = resultSet.getShort(columnName);
} else if(filedCls == long.class || filedCls == Long.class) {
columnValueObj = resultSet.getLong(columnName);
} else if(filedCls == float.class || filedCls == Float.class) {
columnValueObj = resultSet.getFloat(columnName);
} else if(filedCls == double.class || filedCls == Double.class) {
columnValueObj = resultSet.getDouble(columnName);
} else if(filedCls == BigDecimal.class) {
columnValueObj = resultSet.getBigDecimal(columnName);
} else {
columnValueObj = resultSet.getObject(columnName);
} if (columnValueObj != null) {
Method setterMethod = MappingAnnotationUtil.getSetterMethod(clazz, f);
setterMethod.invoke(bean, new Object[] { columnValueObj });
}
}
}
dataList.add(bean);
}
return dataList;
}

注意这个


else if(filedCls == boolean.class || filedCls == Boolean.class) {
columnValueObj = resultSet.getBoolean(columnName);
}

resultSet.getBoolean(columnName) 就是转换的方法,具体实现为


for (int i = 0; i < trueStrings.length; ++i) {
if (trueStrings[i].equals(stringValue)) {
return type.cast(Boolean.TRUE);
}
} for (int i = 0; i < falseStrings.length; ++i) {
if (falseStrings[i].equals(stringValue)) {
return type.cast(Boolean.FALSE);
}
}

核心原理就是根据字符串/数字做对比,如果是1,0就返回true/false,其它的直接返回false或抛出异常,字符串如果是[true, yes, y, on, 1]就返回true,如果是[false, no, n, off, 0]就返回false

@落雨

2015.09.12

http://luoyu.win

http://ae6623.cn

java中boolean与字符串或者数字1和0的转换的更多相关文章

  1. java中常用的字符串的截取方法

    java中常用的字符串的截取方法   1.length() 字符串的长度 例:char chars[]={'a','b'.'c'}; String s=new String(chars); int l ...

  2. Java中过滤出字母、数字和中文的正则表达式

    1.Java中过滤出字母.数字和中文的正则表达式 (1)过滤出字母的正则表达式 [^(A-Za-z)] (2)过滤出数字的正则表达式 [^(0-9)] (3)过滤出中文的正则表达式 [^(\\u4e0 ...

  3. AJPFX总结关于Java中过滤出字母、数字和中文的正则表达式

    1.Java中过滤出字母.数字和中文的正则表达式 (1)过滤出字母的正则表达式      [^(A-Za-z)] (2) 过滤出 数字 的正则表达式   [^(0-9)] (3) 过滤出 中文 的正则 ...

  4. JAVA中用于处理字符串的“三兄弟”

    JAVA中用于处理字符串常用的有三个类:java.lang.String.java.lang.StringBuffer.java.lang.StringBuilder,这三者的共同之处都是final类 ...

  5. Java 中基本类型和字符串之间的转换

    Java 中基本类型和字符串之间的转换 在程序开发中,我们经常需要在基本数据类型和字符串之间进行转换. 其中,基本类型转换为字符串有三种方法: 1. 使用包装类的 toString() 方法 2. 使 ...

  6. Java学习--Java 中基本类型和字符串之间的转换

    Java 中基本类型和字符串之间的转换 在程序开发中,我们经常需要在基本数据类型和字符串之间进行转换. 其中,基本类型转换为字符串有三种方法: 1. 使用包装类的 toString() 方法 2. 使 ...

  7. - Java中boolean类型占用多少个字节 MD

    目录 目录 Java中boolean类型占用多少个字节 1个bit(1位) 1个Byte(1字节,8位) 4个Byte(4字节,32位) 分析 官方文档中的描述 Markdown版本笔记 我的GitH ...

  8. Java中boolean类型占用多少个字节?我说一个,面试官让我回家等通知

    摘自:https://www.cnblogs.com/qiaogeli/p/12004962.html 程序员乔戈里 腾讯面试官问我Java中boolean类型占用多少个字节?我说一个,面试官让我回家 ...

  9. java中判断一个字符串是否“都为数字”和“是否包含数字”和“截取数字”

    在javascript中有一个方法isDigit()使用来判断一个字符串是否都是数字,在java的字符串处理方法中没有这样的方法,觉得常常需要用到,于是上网搜了一下,整理出了两个用正则表达式匹配的判断 ...

随机推荐

  1. Django ORM训练专题

    图书信息系统 表结构设计 # 书 class Book(models.Model): title = models.CharField(max_length=32) publish_date = mo ...

  2. 洛谷.4238.[模板]多项式求逆(NTT)

    题目链接 设多项式\(f(x)\)在模\(x^n\)下的逆元为\(g(x)\) \[f(x)g(x)\equiv 1\ (mod\ x^n)\] \[f(x)g(x)-1\equiv 0\ (mod\ ...

  3. 【字符串哈希】The 16th UESTC Programming Contest Preliminary F - Zero One Problem

    题意:给你一个零一矩阵,q次询问,每次给你两个长宽相同的子矩阵,问你它们是恰好有一位不同,还是完全相同,还是有多于一位不同. 对每行分别哈希,先一行一行地尝试匹配,如果恰好发现有一行无法对应,再对那一 ...

  4. Dijkstra_Liu博客100篇祭

    创建博客,有两年三个月了.今天,写了100篇随笔了,又正值我的15岁生日,还是值得纪念一下. 两年过去了,我从学习:队列.栈.模拟.背包慢慢地变成了:Tarjan.线段树.树剖. 我也从一个初一的天真 ...

  5. 使用postMessage进行react和iframe的数据通信.md

    将react的数据传递给iframe 1.首先在父组件(react文件)内引入iframe <iframe style={{border:0,width:"100%",hei ...

  6. Node.js学习笔记(1) - Node.js简介

    近期在看一些Node.js的知识,看完后觉得,一些前面的东西忘记了,于是整理一下,方便自己查阅,也希望对学习Node.js的朋友有些帮助: 当然以下只是我个人的观点和理解,不喜勿喷,也望大神指教. 一 ...

  7. 数据库中间件OneProxy and onemysql

    http://blog.itpub.net/28944233/cid-176181-list-1/ http://www.onexsoft.com/ 官网 http://pan.baidu.com/s ...

  8. 【转】教你用C#读写、删除、更新excel表格记录

    文章出处:http://blog.csdn.net/kuangshazi515/article/details/6585118 如下图所示,编一个程序,鼠标单击窗体视图区(右边)时,获取一对坐标(X, ...

  9. 安全:Web 安全学习笔记

    背景 说来惭愧,6 年的 web 编程生涯,一直没有真正系统的学习 web 安全知识(认证和授权除外),这个月看了一本<Web 安全设计之道>,书中的内容多是从微软官方文档翻译而来,这本书 ...

  10. python笔记29-队列Queue

    前言 Python的Queue模块提供一种适用于多线程编程的FIFO实现.它可用于在生产者(producer)和消费者(consumer)之间线程安全(thread-safe)地传递消息或其它数据,因 ...