文档章节

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

Zero__One
 Zero__One
发布于 2014/06/23 17:44
字数 362
阅读 656
收藏 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
码字总数 14736
作品 0
乌鲁木齐
程序员
私信 提问
加载中

评论(2)

Zero__One
Zero__One

引用来自“蛙牛”的评论

标题是不是有点问题 应该是修改支持驼峰模式吧....
我不知道这个模式叫驼峰模式, 现在去改吧.
蛙牛
蛙牛
标题是不是有点问题 应该是修改支持驼峰模式吧....
Commons DbUtils

1 概述 Commons DBUtils类库是小型的设计于易于使用JDBC的类集合。JDBC资源清理是平凡的,容易出错,以至于这些类从你的代码中抽象出清理代码,剩下你最初真正想要使用JDBC做的代码:查询和更...

Leech
2015/07/21
0
0
day14_DBUtils学习笔记

一、DBUtils介绍 Apache公司开发的框架。   DBUtils是java编程中的数据库操作实用工具,小巧简单实用。   DBUtils封装了对JDBC的操作,简化了JDBC操作。可以少写代码。 commons-dbutils 是...

黑泽明军
05/20
0
0
Entity 映射机制实现原理

本文是《轻量级 Java Web 框架架构设计》的系列博文。 为了开发一款轻量级的 Java Web 开发框架,我不惜放弃了我最深爱的 Hibernate。我非常感谢它这么多年来教会了我许多知识,让我不会再走...

黄勇
2013/09/03
0
44
DbUtils源码阅读一:初识项目

1 项目介绍 DbUtils是一个关于JDBC操作的类库。官网地址 2 项目结构 org.apache.commons.dbutils: |-AbstractQueryRunner: 抽象类 |-AsyncQueryRunner |-QueryRunner |-QueryLoader |-Proxy......

吴下阿吉
2013/02/23
0
2
MyBatis笔记(一)——带你入门带你飞

MyBatis(原名是ibatis)简介 MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单...

HappyBKs
2015/07/02
0
5

没有更多内容

加载失败,请刷新页面

加载更多

MariaDB 服务器在 MySQL Workbench 备份数据的时候出错如何解决

服务器是运行在 MariaDB 10.2 上面的,在使用 MySQL Workbench 出现错误: mysqldump: Couldn't execute 'SELECT COLUMN_NAME, JSON_EXTRACT(HISTOGRAM, '$."number-of-buckets-specified"'......

honeymose
今天
2
0
apache顶级项目(二) - B~C

apache顶级项目(二) - B~C https://www.apache.org/ Bahir Apache Bahir provides extensions to multiple distributed analytic platforms, extending their reach with a diversity of s......

晨猫
今天
6
0
day152-2018-11-19-英语流利阅读

“超级食物”竟然是营销噱头? Daniel 2018-11-19 1.今日导读 近几年来,超级食物 superfoods 开始逐渐走红。不难发现,越来越多的轻食餐厅也在不断推出以超级食物为主打食材的健康料理,像是...

飞鱼说编程
今天
12
0
SpringBoot源码:启动过程分析(二)

接着上篇继续分析 SpringBoot 的启动过程。 SpringBoot的版本为:2.1.0 release,最新版本。 一.时序图 一样的,我们先把时序图贴上来,方便理解: 二.源码分析 回顾一下,前面我们分析到了下...

Jacktanger
昨天
4
0
Apache防盗链配置,Directory访问控制,FilesMatch进行访问控制

防盗链配置 通过限制referer来实现防盗链的功能 配置前,使用curl -e 指定referer [root@test-a test-webroot]# curl -e "http://www.test.com/1.html" -x127.0.0.1:80 "www.test.com/1.jpg......

野雪球
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部