commons.dbutils包mapping时字段的映射问题!

本文介绍了一种在数据库字段与POJO属性不一致时(如数据库字段为下划线风格而POJO为驼峰风格)导致字段映射失败的问题及解决方案。通过修改commons.dbutils的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);
}
for (int i = 0; i < props.length; i++) {

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

return columnToProperty;
}

如上如果在数据库定义的字段中为下划线形式,而Pojo中是驼峰式。这样就会发生映不到对应字段。解决方案:1.修改commons.dbutils 关于BeanProcessor如上方法的源码getColumnnName时候在进行一次转化(替换掉下划线转为驼峰式),重新打包编译.2.使用数据库别名!
### org.apache.commons.dbutils.DbUtils 类功能与使用方法 #### 功能概述 `org.apache.commons.dbutils.DbUtils` 是 Apache Commons DbUtils 库中的一个工具类,提供了用于简化 JDBC 编程的一系列静态方法。这些方法主要用于处理数据库连接、语句执行以及资源关闭等操作,从而减少开发人员编写重复代码的工作量[^1]。 #### 主要特性 - **自动管理资源**:提供 `closeQuietly()` 方法来安全地关闭 Connection, Statement ResultSet 对象而不抛出异常。 - **事务支持**:通过 `commitAndCloseQuietly(Connection conn)` 或者 `rollbackAndCloseQuietly(Connection conn)` 来提交或回滚并关闭给定的连接。 - **SQL 执行辅助函数**:例如 `loadDriver(String driverClassName)` 可帮助加载指定名称的数据源驱动程序;还有像 `executeUpdate(PreparedStatement stmt)` 这样的便捷方法可以直接调用来更新数据表记录而无需关心底层细节[^2]. #### 使用示例 下面是一个简单的例子展示如何利用DbUtils来进行基本的操作: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; public class Example { public static void main(String[] args) throws Exception { String url = "jdbc:mysql://localhost/test"; String username = "root"; String password = ""; try (Connection connection = DriverManager.getConnection(url, username, password)) { // 加载 MySQL 驱动器 DbUtils.loadDriver("com.mysql.cj.jdbc.Driver"); // 创建预编译 SQL 语句对象 PreparedStatement pstmt = null; try { String sql = "INSERT INTO users(name,email) VALUES (?,?)"; pstmt = connection.prepareStatement(sql); // 设置参数值 pstmt.setString(1, "John Doe"); pstmt.setString(2, "john@example.com"); int affectedRows = DbUtils.executeUpdate(pstmt); // 插入新用户 System.out.println("受影响行数:" + affectedRows); } finally { DbUtils.closeQuietly(pstmt); // 关闭 PreparedStatement DbUtils.commitAndClose(connection); // 提交更改并断开连接 } } } } ``` 此段代码展示了怎样借助于 DbUtils 的能力完成一次完整的插入操作流程——从建立到结束整个过程都得到了很好的封装支持[^3].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值