最近在研究公司前辈写的基于dbutils的查询.有些感觉不错,记录一下 public abstract class BaseDao <T>{ protected QueryRunner queryRunner = new QueryRunner(getDataSource()); protected ResultSetHandler<T> defaultResultSetHandler = new BeanHandler<T>(getEntityClass(),new BasicRowProcessor(new MyBeanProcessor())); protected ResultSetHandler<List<T>> defaultListHandler = new BeanListHandler<T>(getEntityClass(),new BasicRowProcessor(new MyBeanProcessor())); protected MapHandler mapHandler = new MapHandler(); protected abstract Class getEntityClass(); protected MapListHandler mapListHandler = new MapListHandler(); public DataSource getDataSource(){ return DataSourceFactory.getInstance().getDataSource(); } public DataSource getDataSource(String name){ return DataSourceFactory.getInstance().getDataSource(name); }
先看第7行加粗部分(sorry 这厮没给俺加粗)
protected ResultSetHandler<T> defaultResultSetHandler = new BeanHandler<T>(getEntityClass(),new BasicRowProcessor(new MyBeanProcessor()));
.BasicRowProcessor类,是一个内容转换的类,也就是把数据转成getEntityClass()方法返回的class类型,
protected Class getEntityClass() { return Map.class; }
根据它的api可知,
BasicRowProcessor(BeanProcessor convert) BasicRowProcessor constructor.
可以传一个自定义的processor来转换查询内容的格式.
如下边我贴这个,其实就是拿的官方BeanProcessor.java源码.只是加了72行的转换.
String propertyName = underScore2CamelCase(columnName);
将oracle数据表中字段带下划线的去掉.
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.inspur.base; import java.beans.BeanInfo; import java.beans.IntrospectionException; import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.SQLXML; import java.sql.Timestamp; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.dbutils.BeanProcessor; import org.loushang.next.chart.ChartData; import com.sun.xml.internal.bind.v2.runtime.unmarshaller.XsiNilLoader.Array; /** * <p> * <code>BeanProcessor</code> matches column names to bean property names * and converts <code>ResultSet</code> columns into objects for those bean * properties. Subclasses should override the methods in the processing chain * to customize behavior. * </p> * * <p> * This class is thread-safe. * </p> * * @see BasicRowProcessor * * @since DbUtils 1.1 */ public class MyBeanProcessor extends BeanProcessor{ protected int[] mapColumnsToProperties(ResultSetMetaData rsmd, PropertyDescriptor[] props) throws SQLException { int cols = rsmd.getColumnCount(); int[] columnToProperty = new int[cols + 1]; Arrays.fill(columnToProperty, PROPERTY_NOT_FOUND); for (int col = 1; col <= cols; col++) { String columnName = rsmd.getColumnLabel(col); if (null == columnName || 0 == columnName.length()) { columnName = rsmd.getColumnName(col); } String propertyName = underScore2CamelCase(columnName); if (propertyName == null) { propertyName = columnName; } for (int i = 0; i < props.length; i++) { if (propertyName.equalsIgnoreCase(props[i].getName())) { columnToProperty[col] = i; break; } } } return columnToProperty; } /** * @param strs * 待转化字符串 * @return * @author estone * @description 下划线格式字符串转换成驼峰格式字符串 * eg: player_id -> playerId;<br> * player_name -> playerName; */ public String underScore2CamelCase(String strs) { StringBuffer sb= new StringBuffer(); String[] elems = strs.split("_"); for ( int i = 0 ; i < elems.length ; i++ ) { elems[i] = elems[i].toLowerCase(); if (i != 0) { String elem = elems[i]; char first = elem.toCharArray()[0]; if(Character.isLetter(first)){ elems[i] = "" + (char) (first - 32) + elem.substring(1); } } sb.append(elems[i]); } return sb.toString(); } }
相关推荐
`commons-dbutils-1.4-src.zip` 则提供了源代码,开发者可以深入研究其内部实现,了解每个类和方法的工作原理,这对于学习和调试很有帮助。 通过源码,我们可以看到 QueryRunner 如何优化 SQL 执行,如何处理结果集...
解压并研究这些文件,我们可以深入理解如何在不同场景下配置和使用dbutils库。 在实际应用中,使用dbutils和psycopg2的步骤通常如下: 1. 导入所需的模块:`import psycopg2 from DBUtils.PooledDB import ...
结合提供的入门文档,深入研究源码和帮助文档,你会更熟练地运用DBUtils进行数据库操作,提升你的Java开发效率。记得在实际项目中,根据需求选择合适的连接池配置,以及正确处理异常和资源关闭,以保证应用程序的...
Apache Commons DBUtils是Java开发中的一个实用工具库,主要用于简化JDBC(Java Database Connectivity)的使用。这个资源包"commons-dbutils-1.6-bin.zip"包含了DBUtils 1.6版本的源代码和相关文档,是理解并使用...
在这个场景中,你提到的是 DButils 源码与 HSQldb 版本 2.0.0 的结合,这可能意味着你正在研究或分析这两个组件如何协同工作。 DButils 的核心功能主要包括以下几点: 1. **连接池管理**:DButils 提供了连接池的...
- **数据库连接管理**:DBUtils使用连接池管理数据库连接,提高了性能,避免了资源浪费。默认使用的是Jakarta DBCP,但也可以与其他连接池(如C3P0、HikariCP)配合使用。 - **异常处理**:DBUtils对JDBC的异常...
**标题与描述解析** 标题"dbutils-1.7 bin和src"指的是Apache Commons DBUtils的1.7版本,它...通过下载提供的`bin.zip`和`src.zip`,你可以轻松集成DBUtils到你的Java项目中,或者深入研究其源代码以理解其工作原理。
DBUtils 是一个基于 Java 的数据库连接工具库,它简化了 JDBC 的使用,使得数据库操作更加简单、高效。这个资源包含了 DBUtils 的 1.5 版本,这是一个经典的版本,广泛应用于许多Java项目中。DBUtils 提供了事务管理...
3. **进行数据库操作**:现在,你可以像平常一样使用`DBUtils`进行数据库的增删改查操作。例如,创建表、插入数据、查询数据等。 ```java // 创建表 Table table = DBUtils.getTable(User.class); table.create(); ...
Apache Commons DbUtils是Java开发中一个非常实用的数据库操作工具库,它简化了JDBC的使用,降低了数据库操作的复杂性。DbUtils的核心思想是基于Try-Catch-Finally的异常处理模式,使得数据库操作变得更加安全和简洁...
这个组件包和源码的分享是供开发者们学习和研究使用,以提高对数据库操作的理解和实践能力。 DBUtils的核心功能主要包括: 1. **异常处理**:DBUtils将所有JDBC相关的异常包装成自己的`DbException`,这使得处理...
"dbutils-gonzalo123"便是其中的一个实例,它以.tar.gz的压缩格式提供,这是一种常见的源代码打包方式,包含了库的所有源代码和其他相关文件,便于用户解压后进行安装或研究。 "dbutils-gonzalo123"是一个针对...
总的来说,分析和学习 "org.apache.commons" 的源码是提升Java开发技能的好方法,它可以帮助你更好地理解和应用这些广泛使用的工具类库,提高编程效率和代码质量。同时,参与开源社区,提交补丁或新功能,也是贡献...
Apache DBUtils是一个开源Java库,...- 研究事务管理,理解如何在DBUtils中进行事务的控制。 通过深入学习和实践Apache DBUtils,开发者可以在日常工作中更加高效地进行数据库操作,减少出错的可能性,提升代码质量。
java web开发,jsp,servlet框架,mysql,适合个人研究学习,用于毕业设计,课程设计等 java web开发,jsp,servlet框架,mysql,适合个人研究学习,用于毕业设计,课程设计等 java web开发,jsp,servlet框架,...
Xutils的核心思想是模块化和解耦,它将不同的功能模块如网络请求(HttpUtils)、数据存储(DbUtils)、图片处理(ImageLoader)等封装成独立的组件,开发者可以根据项目需求选择性地引入和使用。 1. **网络请求...
2. **DBUtils**:这是Apache Commons库的一部分,是一个简单的数据库操作工具,简化了JDBC(Java Database Connectivity)的使用。它提供了对数据库操作的基本封装,例如查询、更新、插入和删除,使得代码更加简洁和...
在Python编程语言中,数据库操作是一项至关重要的任务,它涉及到数据的存储、...这份"Python数据库操作库研究.pdf"很可能详细讲解了这些库的使用方法、优缺点以及实践案例,对于Python开发者来说是一份宝贵的参考资料。
3. **数据库操作**:使用DBUtils创建表并插入数据。 ```java DBUtils dbUtils = new DBUtils(context); dbUtils.createTable(User.class); // User是数据模型类 User user = new User(); // 设置user属性... dbUtils...