公司的框架主要是采用spring的。因为是刚刚进公司前几天一直在看源码。现在写下过程,也算是一种积累。之前用的是hinernate,对jdbcTemplate的东西还是不熟。
先从Dao的父类AbstractJdbcDAO来说起,里面有这样一个方法:
public List queryForList(String sql, Map params, RowMapper mapper) throws DataAccessException {
try {
return getNamedParameterJdbcTemplate().query(sql, params, mapper);
} catch (EmptyResultDataAccessException e) {
return Collections.EMPTY_LIST;
}
}
参数RowMapper用于封装ResultSet。这样得到的list的里面每项都为一个map。公司mapRow默认实现如下:
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();
Map mapOfColValues = createColumnMap(columnCount);
for (int i = 1; i <= columnCount; i++) {
String key = getColumnKey(JdbcUtils.lookupColumnName(rsmd, i));
String otherKey = DynamicBeanUtils.decodeUnderscoreName(key);
int type = rsmd.getColumnType(i);
Object obj = null;
if (type == 1 || type == 12)
obj = getStringValue(rs, i);
else if (type == -1)
obj = getLongStringValue(rs, i);
else if (type == 2005)
obj = getClobStringValue(rs, i);
else
obj = getColumnValue(rs, i);
mapOfColValues.put(key, obj);
mapOfColValues.put(otherKey, obj);
}
return mapOfColValues;
}
这段代码写的不是很好,首先没有用Types中的常量。另外对于key的处理在最后完全可以只保留
mapOfColValues.put(otherKey, obj);
当然更好的方法是将结果封装在bo里面,最简单的方法是每个bo就都定义自己的RowMapper实现,这样有些麻烦。公司提供了一个方法,就是采用的是java的反射机制来实现这部分的。
public Object queryForBean(String sql, Map params, Class _class)
throws DataAccessException {
return queryForObject(sql, params, DynamicBeanRowMapper.getInstance(
_class, getSqlHelper(), sql));
}
DynamicBeanMapper负责生成封装了bo的rowMapper。
分享到:
相关推荐
SpringJdbcTemplate封装工具包,包括规范model格式接口,封装SpringJdbcTemplate,实现分页,自适应多种数据库
JdbcTemplate是Spring对JDBC的封装,目的是使JDBC更加易于使用。JdbcTemplate是Spring的一部分。JdbcTemplate处理了资源的建立和释放。他帮助我们避免一些常见的错误,比如忘了总要关闭连接。他运行核心的JDBC...
jdbcTemplate封装工程需要的jar包,其他的jar围了减小空间省略
lucene+jdbcTemplate封装API+缓存实现索引精确刷新
NULL 博文链接:https://wangking717.iteye.com/blog/774953
以自己所掌握的知识,运用一定的设计模式,对JDBC的一般性操作(CRUD)进行封装,支持批量操作,希望对各位童鞋有帮助
很基础的spring JDBCtemplate 的使用,包括不使用JDBCtemplate 和使用JDBCtemplate两种方法对比。
import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.support.rowset.ResultSetWrappingSqlRowSet; import org.springframework.jdbc.support.rowset.SqlRowSet; import org....
java基于jdbctemplate数据持久层操作封装,实际开发项目使用,非常便捷。
JdbcTemplate将我们使用的JDBC的流程封装起来,包括了异常的捕捉、SQL的执行、查询结果的转换等等。spring大量使用Template Method模式来封装固定流程的动作,XXXTemplate等类别都是基于这种方式的实现。 除了大量...
JdbcTemplate 调用存储过程
JdbcTemplate是spring-jdbc提供的数据库核心操作类,那对JdbcTemplate进行事务控制呢?
spring提供了一个工具类JdbcTemplate,在类中对JDBC增删改查做了封装 JdbcTemplate: Spring 框架中提供一个ORM技术,对JDBC进行了封装 类似于我们之前的mybatis框架,对数据库做增删改查操作的 学习目标:了解该技术...
spring-jdbcTemplate实例工程
使用Spring的JdbcTemplate实现分页功能
jdbcTemplate分页彻底解决,使用游标滚动,看了Spring源码才解决了问题
JdbcTemplate使用就是JdbcTemplate的使用 再说两遍JdbcTemplate使用就JdbcTemplate的使用 20字够了
JdbcTemplate CRUD示例