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. Splay和LCT的复杂度分析

    \(Splay\)的复杂度分析 不论插入,删除还是访问,我们可以发现它们的复杂度都和\(splay\)操作的复杂度同阶,只是一点常数的区别 我们不妨假设有\(n\)个点的\(splay\),进行了\( ...

  2. 删除JBOSS eap4.3下的jmx-console、web-console、ws-console、status服务

    来源:http://iffiffj.iteye.com/blog/1404148 把下面代码保存为BAT文件,并放到JBOSS节点中运行. @echo off set HOME=%~dp0 set j ...

  3. Python168的学习笔记1

    在对list的条件选择有两种常用方法,直接使用filter函数,就是filter(func,sequence);另外一种就是迭代操作,类似 x for x in sequence func.这两种方法 ...

  4. Linux下动态库和静态库的生成和使用

    1.准备头文件和源文件 hello.h #ifndef HELLO_H #define HELLO_H void hello(const char *name): #endif hello.c #in ...

  5. wikioi 1048 石子归并

    dp[i][j]=min(dp[i][j],dp[i][k],dp[k+1][j]+sum[i][j]); 表示i-j的最小合并代价. #include <iostream> #inclu ...

  6. C#高级编程9-第3章 对象与类型

    类与结构 类和结构都是对象的模板 类定义了处理和访问数据的方法,通过类的实例化进行逻辑处理 类与结构的区别是类是引用类型,存储在托管堆上:结构是值类型,存储在栈上的: 类使用class进行修饰,结构使 ...

  7. Spring Batch 批处理框架介绍

    前言 在大型的企业应用中,或多或少都会存在大量的任务需要处理,如邮件批量通知所有将要过期的会员,日终更新订单信息等.而在批量处理任务的过程中,又需要注意很多细节,如任务异常.性能瓶颈等等.那么,使用一 ...

  8. Redis_常见JedisConnectionException异常分析

    最近项目开发中用到了Redis, 选择了官网推荐的java client Jedis.Redis常用命令学习:http://redis.io/commandsRedis官方推荐Java客户端Jedis ...

  9. CentOS 7挂载磁盘提示: mount: unknown filesystem type 'LVM2_member'

    说明:CentOS 7采用新的分区格式xfs以及LVM的模式,造成挂载硬盘的方式有变化. 解决: 使用lvdisplay命令查看LVM最终的卷路径,然后再进行挂载. 比如: mount /dev/Vo ...

  10. USB ISP(ICSP) Open Programmer < PWM ADC HV PID >

    http://sourceforge.net/projects/openprogrammer/?source=navbar Open Programmer http://openprog.alterv ...