修改DbUtils支持表名下划线映射
来源:互联网 发布:莫斯科战役知乎 编辑:程序博客网 时间:2024/09/21 09:04
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();
- }
修改mapColumnsToProperties函数,红色部分是修改的地方。
- protectedint[] mapColumnsToProperties(ResultSetMetaData rsmd,
- PropertyDescriptor[] props) throws SQLException {
- int cols = rsmd.getColumnCount();
- int columnToProperty[] =newint[cols +1];
- Arrays.fill(columnToProperty, PROPERTY_NOT_FOUND);
- for (int col =1; col <= cols; col++) {
- String columnName = <SPAN style="COLOR: #ff0000"><STRONG>getPropertyName(rsmd.getColumnName(col));</STRONG></SPAN>
- for (int i =0; i < props.length; i++) {
- if (columnName.equalsIgnoreCase(props[i].getName())) {
- columnToProperty[col] = i;
- break;
- }
- }
- }
- return columnToProperty;
- }
DButils的 1.3版本似乎已经修正了这个bug了吧,sql中可以使用别名来避免。
- protectedint[] mapColumnsToProperties(ResultSetMetaData rsmd,
- PropertyDescriptor[] props) throws SQLException {
- int cols = rsmd.getColumnCount();
- int columnToProperty[] =newint[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;
- }
/**
* 根据雇员编码获取一个雇员 若放回null,则为找到
*/
public Employee getEmployeeByCode(int empCode) throws ApplicationException,
SQLException {
Connection conn = OracleDBUtils.getConnection();
// 为了处理表里字段的下划线 与javabean属性对应,CustomBeanProcessor继承了BeanProcessor,
// 并且重写BeanProcessor里方法mapColumnsToProperties
CustomBeanProcessor convert = new CustomBeanProcessor();
RowProcessor rp = new BasicRowProcessor(convert);
Object[] params = { empCode };
ResultSetHandler<Employee> rsh = new BeanHandler<Employee>(
Employee.class, rp);
return qr.query(conn, SQL_GET_EMPLOYEE_BYCODE, rsh, params);
}
- 修改DbUtils支持表名下划线映射
- DBUtils – BeanProcessor扩展,支持自定义字段映射
- DBUtils – BeanProcessor扩展,支持自定义字段映射
- DBUtils – BeanProcessor扩展,支持自定义字段映射
- mybatis数据库字段带下划线,映射支持java类属性驼峰命名
- mybatis数据库字段带下划线,映射支持java类属性驼峰命名
- Linux修改用户名及其名下所有文件
- DBUtils与C3P0结合--支持自定义字段映射和线程池
- DBUtils与C3P0结合--支持自定义字段映射和线程池
- [Java] 遍历指定包名下所有的类(支持jar)
- linq to sql 动态表名,修改表映射,EF是否支持
- oracle查询当前用户名下所有表
- 给tornado添加dbutils支持
- 给tornado添加dbutils支持
- Java8支持带下划线的数字常量
- 划线
- 解决字段名带下划线在Hibernate映射问题
- xUtils中的dbUtils中,在应用升级的时候修改表结构
- 【图的遍历】【NOI2008】假面舞会
- C++编程思想学习——编程风格
- Jakarta Commons组件BeanUtils、DbUtils简化JDBC数据库操作
- C程序员装逼指南
- 网页设计学习的知识和技能
- 修改DbUtils支持表名下划线映射
- 解决“windows已经阻止此软件因为无法验证发行者”方法
- html+css+jquery倒计时、拖拽div、滚动条固定在低端、div自动换行、输入框不可写等免费小代码实用学习版.txt
- android的数据存储方式有哪几种
- LoadRunner进行性能测试的大致流程
- SQL SERVER标量函数定义
- POJ 1915 双向广搜
- 最大字段问题和动态规划算法的推广
- When Runtime.exec() won't