文档章节

修改DbUtils支持表名下划线映射(驼峰模式)

Zero__One
 Zero__One
发布于 2014/06/23 17:44
字数 362
阅读 667
收藏 13

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

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

 

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

 

1、下载DbUtils的源代码

2、找到commons-dbutils-1.5-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函数,把原来的 rsmd.getColumnName(col) 修改为 getPropertyName(rsmd.getColumnName(col))。

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编译,搞定!

 

懒得编译的少年,直接下载附件吧


© 著作权归作者所有

共有 人打赏支持
Zero__One
粉丝 13
博文 56
码字总数 14905
作品 0
乌鲁木齐
程序员
私信 提问
加载中

评论(2)

Zero__One
Zero__One

引用来自“蛙牛”的评论

标题是不是有点问题 应该是修改支持驼峰模式吧....
我不知道这个模式叫驼峰模式, 现在去改吧.
蛙牛
蛙牛
标题是不是有点问题 应该是修改支持驼峰模式吧....
DbUtils的改进版DbUtils-Pro1.7.0发布

DbUtils-Pro是一个DbUtils的改进版,它支持多种SQL风格并改进事务管理。主要特点有: 改进DbUtils的异常处理,将SQLException转化为运行时导常抛出,无需再手工捕获异常,这点类似于Spring的...

yong9981
2017/08/31
0
0
发现并解决了DbUtils项目的一个问题

今天在写程序的时候发现了 dbutils 的一个这样的问题,由于 dbutils 在做表到对象的映射时要求列名和对象的属性名必须一致,例如列名是 userid ,那么属性名也必须是 userid ,但很多时候,我...

红薯
2009/01/06
1K
5
jdao1.1.6 发布,轻量级 ORM 工具包

jdao1.1.6已发布,jdao是一个Java的轻量级orm工具包,根据表名可以生成与之对应的dao类,同时也支持原生sql语句操作。 本次更新如下: 增加了DBUtils 类,具体使用请参考 DaoTest,RsScanTest...

donnie-wu
2017/11/06
1K
3
Apache Commons DbUtils 1.5 发布

DbUtils 可是难得更新一次啊,刚发布的 1.5 版本改进记录包括: Bug [DBUTILS-73] - .BasicRowProcessor.CaseInsensitiveHashMap uses default Locale for toLowerCase [DBUTILS-77] - "dro......

oschina
2012/07/22
4.3K
15
Apache Commons DbUtils 1.6 发布

Apache Commons DbUtils 1.6 发布,主要改进内容包括: ArrayHandler should return an empty array when handle has no rows Fixes DBUTILS-110. Order of columns not retained in BasicR......

oschina
2014/07/22
6.9K
15

没有更多内容

加载失败,请刷新页面

加载更多

MySQL学习笔记之二

数据库的操作总结就是:增删改查(CURD),今天记录一下基础的检索查询工作。 检索MySQL 1.查询表中所有的记录 mysql> select * from apps;+----+------------+-----------------------+------...

凌宇之蓝
24分钟前
0
0
PaddlePaddle-GitHub的正确打开姿势

GitHub是一个面向开源及私有软件项目的托管平台、也是项目版本管理工具,会使用它是程序员入门的必备技能。PaddlePaddle也不例外,所有的源码及项目进展都在GitHub上开源公布。但对于刚入门写...

深度学习之路
24分钟前
1
0
最强NLP模型BERT可视化学习

摘要: 最强NLP模型谷歌BERT狂破11项纪录,全面超越人类,本文通过可视化带你直观了解它。 2018年是自然语言处理(Natural Language Processing, NLP)领域的转折点,一系列深度学习模型在智...

阿里云官方博客
31分钟前
1
0
导出功能

public void downloadD(HttpServletRequest request, HttpServletResponse res,String contractName, String contractPath) throws IOException {// FileAttach fileAttach = fileA......

卖星星的小矮人
35分钟前
1
0
gradle 打包可执行jar包

group 'android.com'version '1.0-SNAPSHOT'apply plugin: 'java'sourceCompatibility = 1.8repositories { mavenCentral()}jar { manifest { attributes ('Main-......

zdglf
46分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部