`
jeekchen
  • 浏览: 17872 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

修改DbUtils支持表名下划线映射

    博客分类:
  • java
阅读更多

Commons DbUtils很一个很好用JDBC工具类,地球人都知道,就不介绍了,不知道的看这里:http://commons.apache.org/dbutils/

 

在进行查询自动类映射的时候domain类的属性必须和数据库中名称一样,但是如果数据库的表名使用带下划线的设计,domain类中的属性也要使用下划线,看起来很不雅观,而且使用hibernate工具自动生成的domain类会自动去掉下划线,下划线后面的用大写字母,比如user_name转换后为userName,因此有必要让DbUtils支持这种设计。

 

好,目标已经明确,下来就是开工了!

 

1、下载DbUtils的源代码

2、找到commons-dbutils-1.2-src\src\java\org\apache\commons\dbutils下的BeanProcessor.java,增加一个函数,代码如下:

private String getPropertyName(String columnName){		
	StringBuilder sb = new StringBuilder();
	boolean match = false;
	for (int i=0; i<columnName.length(); i++){
		char ch = columnName.charAt(i);
		if (match && ch>=97 && ch<=122)
			ch -= 32;
		if (ch!='_'){
			match = false;
			sb.append(ch);	
		}else{				
			match = true;	
		}			
	}
	return sb.toString();
}

 3、修改mapColumnsToProperties函数,红色部分是修改的地方。

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 = getPropertyName(rsmd.getColumnName(col));
        for (int i = 0; i < props.length; i++) {

            if (columnName.equalsIgnoreCase(props[i].getName())) {
                columnToProperty[col] = i;
                break;
            }
        }
    }

    return columnToProperty;
}

 4、mvn package编译,搞定!

 

懒得编译的同学,直接下载附件吧

分享到:
评论
3 楼 zhaoyou 2010-03-22  
按照你的意思,是列名的问题吧,用查询的时候用 as 关键字可以解决吧,然后修改一下源码把getColumnName变成getLableName可以吗?
2 楼 dean_liu 2010-02-06  
hack源码好像不是最好的方式.
看下我的方式:
http://dean-liu.iteye.com/blog/588753
1 楼 jzinfo 2009-12-11  
DButils的 1.3版本似乎已经修正了这个bug了吧,sql中可以使用别名来避免。

1.3中 映射方法中代码如下:
 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++) {
            
            //已经改过来为getColumnLabel了
           
            String columnName = rsmd.getColumnLabel(col);
            if (null == columnName || 0 == columnName.length()) {
              columnName = rsmd.getColumnName(col);
            }
            for (int i = 0; i < props.length; i++) {

                if (columnName.equalsIgnoreCase(props[i].getName())) {
                    columnToProperty[col] = i;
                    break;
                }
            }
        }

        return columnToProperty;
    }

相关推荐

    dbutils dbutils dbutils dbutils

    DBUtils 是一个非常重要的 Python 模块,专为数据库连接设计,它在 Python 的数据库应用开发中扮演着不可或缺的角色。这个模块主要目的是提供一个稳定、健壮的接口,用于管理和操作数据库连接,使得开发者能够更方便...

    DBUtils操作数据库以及事物的管理

    在DBUtils中,可以通过控制`Connection`对象的自动提交属性来实现对事务的支持。 1. **开启事务**: - 获取`Connection`对象并关闭自动提交。 ```java Connection conn = JdbcUtils.getConnection(); conn....

    Dbutils 的jar包

    Dbutils 提供了几种常见的实现,如 `ArrayListHandler`(将结果集转换为 List), `BeanHandler`(将结果集映射到单个Java Bean对象), `BeanListHandler`(将结果集映射到一个Bean的列表)等。开发者可以根据需求...

    python的DBUtils包

    Python的DBUtils是一个非常实用的库,主要用于增强Python标准库中的`DB-API 2.0`接口,提供了线程安全性和连接池管理等功能。DBUtils是基于PEP 249设计的,它使得数据库连接的管理和维护变得更加简单,尤其在多线程...

    dbutils

    1. **批处理操作**:`dbutils` 支持批量执行SQL语句,可以显著提高数据库操作的性能,尤其在处理大量数据时。 2. **QueryRunner与ResultSetHandler**:`QueryRunner` 类是`dbutils` 的核心组件,它提供了一种简单的...

    DBUtils数据库的使用

    DBUtils提供了一些预定义的实现,如ArrayListHandler将结果集转换为ArrayList,BeanHandler将每一行数据映射到一个Java Bean对象,MapHandler则将每一行数据转换为Map。 3. **BasicRowProcessor**和**...

    commons-dbutils-1.7

    6. **事务管理**:DbUtils提供简单的事务支持,通过`TransactionManager`类,可以在代码中轻松开启、提交和回滚事务,保证数据的一致性。 在实际项目中,开发者可以结合Spring框架或其他ORM工具(如Hibernate或...

    模仿DBUtils(自己模仿DBUtils写的简易DBUtils)

    5. **事务管理**: 简易DBUtils可能包含对数据库事务的支持,包括事务的开始、提交和回滚。这对于保证数据的一致性至关重要,尤其是在执行一系列数据库操作时。 6. **批处理**: DBUtils支持批处理操作,允许一次发送...

    DButils使用实例

    DButils支持多种数据库连接池,如C3P0、DBCP、HikariCP等。连接池是数据库管理的关键组件,它能够有效地重用数据库连接,减少创建和销毁连接的开销,提高系统性能。通过DButils,开发者可以轻松配置和使用这些连接...

    dbutils的jar包和源码

    dbutils 提供了一些预定义的实现,如 `ArrayListHandler`(将结果集转换为 ArrayList),`BeanHandler`(将结果行映射到 Java Bean 对象),`MapHandler`(将结果行映射到 Map)等。 - **ConnectionPool**: dbutils...

    DbUtils数据库查询工具包 v1.8.1.zip

    DbUtils提供了一些预定义的实现,如ArrayListHandler(将结果集转换为List对象)、BeanHandler(将结果集映射到Java Bean)、MapHandler(将结果集映射到Map对象)等,可以根据需求选择合适的Handler。 3. **...

    DbUtils的Jar包

    3. **SQL执行**:DbUtils的`QueryRunner`类提供了执行SQL查询和更新操作的方法,支持预编译的PreparedStatement,增强了SQL语句的安全性,防止SQL注入攻击。例如,`QueryRunner.query()`方法用于执行查询,`Query...

    Dbutils项目实例

    1 对于数据表的读操作 他可以把结果转换成List Array Set等java集合 便于程序员操作; 2 对于数据表的写操作 也变得很简单(只需写sql语句) 3 可以使用数据源 使用JNDI 数据库连接池等技术来优化性能 重用已经构建...

    无涯教程(LearnFk)-DBUtils教程离线版.pdf

    3. JavaBean映射:DBUtils支持从数据库查询结果自动填充JavaBean对象。这意味着开发者可以轻松将数据表的列映射到Java对象的属性上,这极大地简化了数据对象与数据库表之间的交互。 4. 简洁小巧:DBUtils的体积很小...

    DBUtils用的包.rar

    3. **ResultSetHandler接口**:DBUtils支持多种结果集处理策略,开发者可以实现这个接口来处理查询结果。内置的处理器如`ArrayListHandler`将结果集转化为ArrayList,`BeanHandler`将结果映射到Java Bean对象。 4. ...

    commons-dbutils-1.4.jar

    5. 高效的批处理:DBUtils还支持批处理操作,通过`BatchRunner`类可以一次性提交多条SQL语句,提高数据库操作的效率。 在实际项目中,"commons-dbutils-1.4.jar"可以与Apache的另一个项目——Apache Commons DBCP...

    DBUtils数据库工具类

    1. **连接池管理**:DBUtils支持多种连接池实现,如C3P0、DBCP和HikariCP等。通过配置文件,开发者可以轻松设置连接池参数,实现数据库连接的复用,降低系统资源消耗。 2. **QueryRunner**:QueryRunner是DBUtils的...

    commons-dbutils-1.6

    Apache Commons DBUtils是Java开发中的一个实用工具库,主要用于简化JDBC(Java Database Connectivity)的使用。这个项目在1.6版本中包含了两个主要的jar文件:`commons-dbutils-1.6.jar`和`commons-dbutils-1.6-...

    commons-dbutils.jar.rar

    它支持预编译的PreparedStatement以及批处理操作,可以有效地防止SQL注入攻击。 - **ResultSetHandler**: 提供了一系列预定义的处理结果集的接口和实现,如ListHandler、BeanHandler、ArrayHandler等,可以直接将...

    commons-dbutils-1.7.zip

    Apache Commons DBUtils是一个Java库,它为数据库操作提供了一些实用工具和帮助类,极大地简化了JDBC编程。...在Java项目中,特别是对于那些不需复杂ORM映射的小型应用,DBUtils是一个理想的选择。

Global site tag (gtag.js) - Google Analytics