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. PHP cURL中CURLOPT_CONNECTTIMEOUT和CURLOPT_TIMEOUT的区别

    CURLOPT_CONNECTTIMEOUT用来告诉PHP脚本在成功连接服务器前等待多久(连接成功之后就会开始缓冲输出),这个参数是为了应对目标服务器的过载,下线,或者崩溃等可能状况: CURLOPT ...

  2. 牛可乐发红包脱单OI赛 C 小可爱表白

    打个暴力查一下OEIS,5min做完 出题人一开始把式子打错了,一开始的式子的结果为$n * (n + 3) * 2^{n - 3}$ 我们考虑化式子 首先考虑 $\sum\limits_{j = 1 ...

  3. POJ 2891 Strange Way to Express Integers 中国剩余定理 数论 exgcd

    http://poj.org/problem?id=2891 题意就是孙子算经里那个定理的基础描述不过换了数字和约束条件的个数…… https://blog.csdn.net/HownoneHe/ar ...

  4. 2018/3/20 noip模拟赛 5分

    T1 傻逼题,写了cmp没sort,5分. T2 树上差分,写了树剖线段树,超时,0分. T3 树归,0分. 我是个zz

  5. hdu 4549 矩阵快速幂

    题意: M斐波那契数列F[n]是一种整数数列,它的定义如下: F[0] = aF[1] = bF[n] = F[n-1] * F[n-2] ( n > 1 ) 现在给出a, b, n,你能求出F ...

  6. hdu 3308 线段树

    题目大意:给n个数,两种操作1:U  a b   更新第a个为b (从0开始)2: Q    a ,b  查询 a,b之间LCIS(最长连续递增子序列)的长度. Sample Input110 107 ...

  7. BZOJ 2743: [HEOI2012]采花 离线树状数组

    2743: [HEOI2012]采花 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=2743 Description 萧芸斓是Z国的公主, ...

  8. 读书笔记-APUE第三版-(8)进程控制

    进程ID 每一个进程都有一个唯一的进程ID.几个特殊进程: 0号进程是内核进程,一般是调度进程swapper. 1号进程init,是用户进程(以root权限执行/sbin/init),负责初始化. 几 ...

  9. 分布式中使用redis进行session共享

    摘要 在asp.net web中,session经常用来存储当前用户信息,或者通过session进行登录权限的验证.如果是一台服务器,session的使用没问题,如果使用nginx等实现反向代理,将站 ...

  10. Extjs gridPanel 动态指定表头

    var colMArray = new Array(); colMArray = [{header : "产品代码", dataIndex : "cpdm", ...