JdbcTemplate/ SimpleJdbcTemplate
来源:互联网 发布:linux shell % 编辑:程序博客网 时间:2024/06/10 23:25
JdbcTemplate将我们使用的JDBC的流程封装起来,包括了异常的捕捉、SQL的执行、查询结果的转换等等。spring大量使用Template Method模式来封装固定流程的动作,XXXTemplate等类别都是基于这种方式的实现。
JdbcTemplate 用来 抽象我们常用的一些方法。
配合JDK1.5中的可变参数列表,用起来很爽!
<beans><bean id="dataSource" class="oracle.jdbc.pool.OracleDataSource"><property name="URL"><value>jdbc:oracle:thin:root/123@localhost:1521/XE</value></property></bean><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource"><ref bean="dataSource" /></property></bean><bean id="userDAO" class="DAO.Imp.UserDAOImp"><property name="jdbcTemplate"><ref bean="jdbcTemplate" /></property></bean><bean id="user" class="Model.User"><property name="dao"><ref bean="userDAO" /></property></bean> </beans>
public void execute(String sql, Object... args) {this.simpleJdbcTemplate.update(sql, args);}jdbcTemplate.queryForInt("SELECT last_insert_id() as id");public List queryForList(String sql, Object... args) {return this.jdbcTemplate.queryForList(sql, args);}
public String buildPageSql(String _sql, int page, int pageSize) {String sql_str = null;String db_type = EopSetting.DBTYPE;if (db_type.equals("1")) {db_type = "mysql";} else {db_type = "oracle";}if (db_type.equals("mysql")) {sql_str = _sql + " LIMIT " + (page - 1) * pageSize + "," + pageSize;} else {StringBuffer sql = new StringBuffer("SELECT * FROM (SELECT t1.*,rownum sn1 FROM (");sql.append(_sql);sql.append(") t1) t2 WHERE t2.sn1 BETWEEN ");sql.append((page - 1) * pageSize + 1);sql.append(" AND ");sql.append(page * pageSize);sql_str = sql.toString();}return sql_str.toString();}
更多参考:
http://it.oyksoft.com/post/234/
http://blog.csdn.net/nomads/archive/2006/05/05/709551.aspx
http://www.iteye.com/topic/53526
1.Java 5
Spring 2.0保持向后对Java1.3和1.4的兼容。然而,Java 5带来越来越多的新特性。
其中一些,比如已经讨论过的类型推断,可以随意使用。而其他的需要自己来选择。让我们快速预览其中的一些。
新的API
大量的新的API在核心功能上提供Java 5的功能,这些核心功能继续运行在Java的早些版本上。
尤其是:
•SimpleJdbcTemplate:和熟悉的JdbcTemplate类似的新类,这使得JDBC使用更加简单。
•AspectJProxyFactory:和ProxyFactory类似的新类,设计用来使用@AspectJ 切面以编程方式创建代理。
随着时间延续,这样的类的数目会越来越多。
SimpleJdbcTemplate是用来例证的。让我们看一下在调用一个计算总数功能时的效果。在Java 5之前使用JdbcTemplate,我们需要在一个数组中封装绑定参数,就像下面这样:
jdbcTemplate.queryForInt("SELECT COUNT(0) FROM T_CLIENT WHERE TYPE=? AND CURRENCY=?", new Object[] { new Integer(13), "GBP" } );
如果我们使用Java 5,自动装箱去除了一点困扰,因为我们不再需要原始封装器类型。这仅仅来自于语言特性,而不需要Spring提供任何新的东西:
jdbcTemplate.queryForInt("SELECT COUNT(0) FROM T_CLIENT WHERE TYPE=? AND CURRENCY=?", new Object[] { 13, "GBP" } );
然而,通过采用Java 5我们能够完全不再需要对象数组。下面的例子显示了SimpleJdbcTemplate是如何使用变参来绑定变量的,意味着开发者可以提供任意数目的变参,而不需要数组:
simpleJdbcTemplate.queryForInt("SELECT COUNT(0) FROM T_CLIENT WHERE TYPE=? AND CURRENCY=?", 13, "GBP" );
作为增加的一个好处,我们不再需要区分带有绑定和没绑定参数的情况。虽然这需要JdbcTemplate上的两个方法,来避免需要给执行SQL的重载方法传入一个空的Object数组,但通过SimpleJdbcTemplate,框架代码可以检查变参的长度。这样下面的例子调用同一个方法:
simpleJdbcTemplate.queryForInt("SELECT COUNT(0) FROM T_CLIENT");
还有更显著的好处。泛型使得签名更加清晰,并去除强制转换。比如,JdbcTemplate的queryForMap()方法返回一个ResultSet中的从列名到列值的Map。当它是SimpleJdbcTemplate上方法签名的显式部分时,这就变得清楚得多:
public Map<String, Object> queryForMap(String sql, Object... args)
throws DataAccessException
如果是返回这种map的列表的方法,那还会更清楚:
public List<Map<String, Object>> queryForList(String sql, Object ... args)
throws DataAccessException
增加SimpleJdbcTemplate的目标之一是,提供那些最经常使用的方法。JdbcTemplate是Spring中最大的类之一,有很多的方法,其中一些是用于非常深奥的用途。在这种高级的情况下,根据全部问题的复杂性,语言语法糖就可能不再重要。对于这样的案例,SimpleJdbcTemplate封装了一个JdbcTemplate实例,通过getJdbcOperations()方法可以访问到。
为了支持扩展DAO支持类的用法模型,Spring 2.0提供了SimpleJdbcDaoSupport类,提供一个预先配置的JdbcTemplate。SimpleJdbcTemplate也象 JdbcTemplate一样很易于实例化或者直接注入,通过仅仅提供一个javax.sql.Datasource实现——这是Spring对所有关系型数据库访问的支持的开始点。就像JdbcTemplate,SimpleJdbcTemplate可以当作一个类库来使用,而无需使用Spring的其他部分。
public List getList() {
jt = new JdbcTemplate(dataSource);
List rows = jt.queryForList("select * from mytable");
return rows;
}
2、RowMapper
public List<TaoBaoStore> getAllTaoBaoStore() {List<TaoBaoStore> stores =jdbcTemplate.query("select * from tao_bao_store", new TaoBaoStoreMapper());return stores;}
public class TaoBaoStoreMapper implements RowMapper {public Object mapRow(ResultSet rs, int arg1) throws SQLException {TaoBaoStore store = new TaoBaoStore();store.setAppkey(rs.getString("appkey"));store.setAppsecret(rs.getString("appsecret"));store.setExternal_password(rs.getString("external_password"));store.setExternal_store_id(rs.getString("external_store_id"));store.setFinish_last_update_time(rs.getString("finish_last_update_time"));store.setFinish_synchronizing_cycle(rs.getString("finish_synchronizing_cycle"));store.setPaid_last_update_time(rs.getString("paid_last_update_time"));store.setPaid_synchronizing_cycle(rs.getString("paid_synchronizing_cycle"));store.setStatus(rs.getInt("status"));store.setStatus_time_task(rs.getInt("status_time_task"));store.setStore_id(rs.getString("store_id"));store.setStore_name(rs.getString("store_name"));return store;}}
- JdbcTemplate/ SimpleJdbcTemplate
- JDBCTemplate,SimpleJDBCTemplate简单使用
- JdbcTemplate 、NamedParameterJdbcTemplate、SimpleJdbcTemplate的区别
- JdbcTemplate 、NamedParameterJdbcTemplate、SimpleJdbcTemplate的区别
- JdbcTemplate 、NamedParameterJdbcTemplate、SimpleJdbcTemplate的区别
- Spring的JdbcTemplate、NamedParameterJdbcTemplate、SimpleJdbcTemplate
- Spring的JdbcTemplate、NamedParameterJdbcTemplate、SimpleJdbcTemplate
- Spring的JdbcTemplate、NamedParameterJdbcTemplate、SimpleJdbcTemplate
- Spring的JdbcTemplate、NamedParameterJdbcTemplate、SimpleJdbcTemplate
- JdbcTemplate 、NamedParameterJdbcTemplate、SimpleJdbcTemplate的区别
- spring的JdbcTemplate、NamedParameterJdbcTemplate和SimpleJdbcTemplate
- SimpleJdbcTemplate
- java网站建设4-Spring的JdbcTemplate、NamedParameterJdbcTemplate、SimpleJdbcTemplate
- 使用Spring提供的三个JDBC模板类(JdbcTemplate、NamedParameterJdbcTemplate、SimpleJdbcTemplate)操作数据库
- 使用Spring JDBC进行数据访问 (JdbcTemplate/NamedParameterJdbcTemplate/SimpleJdbcTemplate/SimpleJdbcCall/Stor)
- JdbcTemplate 、NamedParameterJdbcTemplate、SimpleJdbcTemplate的区别,有需要的朋友可以参考下。
- SPring SimpleJdbcTemplate
- JdbcTemplate
- ios之transform
- java中读取文件总结
- Android Activity window(7.1)解析(一)
- 使用PropertyPlaceholderConfigurer类读取外部属性文件内容到XML
- 设计模式-观察者模式
- JdbcTemplate/ SimpleJdbcTemplate
- 读取一个SQL文件 + 批量执行batchUpdate(String[ ])
- Oracle自动性能统计
- 数据库学习
- android自定义控件画布canvas背景色失效变黑色
- 表中父子关系
- 解决:angular.js中插值表达式为HTML时需要被渲染的问题
- 'grep' 不是内部或外部命令,也不是可运行的程序或批处理文件
- 卷积神经网络与caffe的卷积层、池化层