这个类蛮实用的,我在几个项目中都使用。接口如下:
public interface DaoHelper {
boolean add(String sql, Object... args);
boolean add(String sql, Connection conn, Object... args);
int update(String sql, Object... args);
int update(String sql, Connection conn, Object... args);
boolean delete(String sql, Object... args);
boolean delete(String sql, Connection conn, Object... args);
Object getObject(String sql, Class obj, Object... args);
Object getObject(String sql, Connection conn, Class obj, Object... args);
List<Object> getList(String sql, Class obj, Object... args);
String queryForString(String sql, Object... args);
Long queryForLong(String sql, Object... args);
Boolean queryForBoolean(String sql, Object... args);
Connection getConn ();
void returnConnection(Connection conn);
void rollBack(Connection conn);
}
(1) 第一个 add 方法用来执行 insert 语句,并且提交事务; sql 为数据库语句, args 为数据库参数,要和数据库语句里的“?”对应。
(2) 第二个 add 方法多了一个 Connetion 参数,该方法将使用这个 Conn 来创建 PreparedStatement ,但是执行结束后不提交,需要手动提交。
(3) 其他 update 、 delete 同上
(4) getObject 方法返回一个 bean ,把 ResultSet 转化为 Bean , bean 的属性必须和数据库列名称相同。
(5) getList 方法返回一个 List ,将 ResultSet 处理为一个 List 返回
(6) queryForString , queryForLong , queryForBoolean 将分别返回 String 、 Long 、 Boolean 结果。
实现我使用了 apache common 里的 dbutils 包,另外由 DataSource 提供数据库 Connection ,我使用的是 c3p0 的实现,用 spring bean set 注入的。代码参考附件。
PS: 抛砖引玉,大家要是有更好的方法的话,可以拿出来共享一下,提高代码质量、加快开发速度。