`
xiaosheng12345
  • 浏览: 13188 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

dbutils的使用研究

 
阅读更多
最近在研究公司前辈写的基于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();  
    }  

}

 

分享到:
评论

相关推荐

    dbutils的jar包和源码

    `commons-dbutils-1.4-src.zip` 则提供了源代码,开发者可以深入研究其内部实现,了解每个类和方法的工作原理,这对于学习和调试很有帮助。 通过源码,我们可以看到 QueryRunner 如何优化 SQL 执行,如何处理结果集...

    dbutils数据库连接池

    解压并研究这些文件,我们可以深入理解如何在不同场景下配置和使用dbutils库。 在实际应用中,使用dbutils和psycopg2的步骤通常如下: 1. 导入所需的模块:`import psycopg2 from DBUtils.PooledDB import ...

    使用dbutils操作数据库入门

    结合提供的入门文档,深入研究源码和帮助文档,你会更熟练地运用DBUtils进行数据库操作,提升你的Java开发效率。记得在实际项目中,根据需求选择合适的连接池配置,以及正确处理异常和资源关闭,以保证应用程序的...

    dbutils1.6

    Apache Commons DBUtils是Java开发中的一个实用工具库,主要用于简化JDBC(Java Database Connectivity)的使用。这个资源包"commons-dbutils-1.6-bin.zip"包含了DBUtils 1.6版本的源代码和相关文档,是理解并使用...

    DButils 的源代码

    在这个场景中,你提到的是 DButils 源码与 HSQldb 版本 2.0.0 的结合,这可能意味着你正在研究或分析这两个组件如何协同工作。 DButils 的核心功能主要包括以下几点: 1. **连接池管理**:DButils 提供了连接池的...

    commons-dbutils-1.4 bin+src

    - **数据库连接管理**:DBUtils使用连接池管理数据库连接,提高了性能,避免了资源浪费。默认使用的是Jakarta DBCP,但也可以与其他连接池(如C3P0、HikariCP)配合使用。 - **异常处理**:DBUtils对JDBC的异常...

    dbutils-1.7 bin和src

    **标题与描述解析** 标题"dbutils-1.7 bin和src"指的是Apache Commons DBUtils的1.7版本,它...通过下载提供的`bin.zip`和`src.zip`,你可以轻松集成DBUtils到你的Java项目中,或者深入研究其源代码以理解其工作原理。

    dbutils所有jar包和java范例

    DBUtils 是一个基于 Java 的数据库连接工具库,它简化了 JDBC 的使用,使得数据库操作更加简单、高效。这个资源包含了 DBUtils 的 1.5 版本,这是一个经典的版本,广泛应用于许多Java项目中。DBUtils 提供了事务管理...

    DButils 自定义位置存储

    3. **进行数据库操作**:现在,你可以像平常一样使用`DBUtils`进行数据库的增删改查操作。例如,创建表、插入数据、查询数据等。 ```java // 创建表 Table table = DBUtils.getTable(User.class); table.create(); ...

    Commons DbUtils源码阅读之实例及测试应用

    Apache Commons DbUtils是Java开发中一个非常实用的数据库操作工具库,它简化了JDBC的使用,降低了数据库操作的复杂性。DbUtils的核心思想是基于Try-Catch-Finally的异常处理模式,使得数据库操作变得更加安全和简洁...

    commons-dbutils组件包与源码

    这个组件包和源码的分享是供开发者们学习和研究使用,以提高对数据库操作的理解和实践能力。 DBUtils的核心功能主要包括: 1. **异常处理**:DBUtils将所有JDBC相关的异常包装成自己的`DbException`,这使得处理...

    PyPI 官网下载 | dbutils-gonzalo123-0.0.5.tar.gz

    "dbutils-gonzalo123"便是其中的一个实例,它以.tar.gz的压缩格式提供,这是一种常见的源代码打包方式,包含了库的所有源代码和其他相关文件,便于用户解压后进行安装或研究。 "dbutils-gonzalo123"是一个针对...

    org.apache.commons 的 jar 包 源码

    总的来说,分析和学习 "org.apache.commons" 的源码是提升Java开发技能的好方法,它可以帮助你更好地理解和应用这些广泛使用的工具类库,提高编程效率和代码质量。同时,参与开源社区,提交补丁或新功能,也是贡献...

    apache中DBUtil学习共28页.pdf.zip

    Apache DBUtils是一个开源Java库,...- 研究事务管理,理解如何在DBUtils中进行事务的控制。 通过深入学习和实践Apache DBUtils,开发者可以在日常工作中更加高效地进行数据库操作,减少出错的可能性,提升代码质量。

    基于Eclipse+jdk1.8+servlet+jsp+c3p0+DButils编写的人员管理系统.zip

    java web开发,jsp,servlet框架,mysql,适合个人研究学习,用于毕业设计,课程设计等 java web开发,jsp,servlet框架,mysql,适合个人研究学习,用于毕业设计,课程设计等 java web开发,jsp,servlet框架,...

    Xutils使用

    Xutils的核心思想是模块化和解耦,它将不同的功能模块如网络请求(HttpUtils)、数据存储(DbUtils)、图片处理(ImageLoader)等封装成独立的组件,开发者可以根据项目需求选择性地引入和使用。 1. **网络请求...

    ms:这是我工作的一个项目,使用SSH框架。有一些开源组件,如c3p0,dbutils,ehcache,quartz等。部分源码参考oschina.net

    2. **DBUtils**:这是Apache Commons库的一部分,是一个简单的数据库操作工具,简化了JDBC(Java Database Connectivity)的使用。它提供了对数据库操作的基本封装,例如查询、更新、插入和删除,使得代码更加简洁和...

    Python数据库操作库研究.zip

    在Python编程语言中,数据库操作是一项至关重要的任务,它涉及到数据的存储、...这份"Python数据库操作库研究.pdf"很可能详细讲解了这些库的使用方法、优缺点以及实践案例,对于Python开发者来说是一份宝贵的参考资料。

    Android应用源码之xUtils-master.rar

    3. **数据库操作**:使用DBUtils创建表并插入数据。 ```java DBUtils dbUtils = new DBUtils(context); dbUtils.createTable(User.class); // User是数据模型类 User user = new User(); // 设置user属性... dbUtils...

Global site tag (gtag.js) - Google Analytics