java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台(即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se))的总称。
下面小编就为大家带来一篇 Java 中 Boolean 与字符串或者数字 1 和 0 的转换实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
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
以上这篇 Java 中 Boolean 与字符串或者数字 1 和 0 的转换实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持 PHPERZ。
来源: http://www.phperz.com/article/17/1230/356566.html