Spring3开发实战 之 第四章:对JDBC和ORM的支持(二)

2014-11-24 08:36:46 · 作者: · 浏览: 1
erJdbcTemplate类在SQL语句中支持使用命名参数,比较适合做查询,如果做更新,同样需要使用回调方法,如下:

java代码:
查看复制到剪贴板打印
NamedParameterJdbcTemplate jt = new NamedParameterJdbcTemplate(ds);
Map paramMap = new HashMap();
paramMap.put("uuid",um.getUuid());
List list = jt.queryForList("select * from tbl_user where uuid=:uuid",paramMap);
Iterator it = list.iterator();
while(it.hasNext()){
Map map = (Map)it.next();
System.out.println("uuid="+map.get("uuid")+",name="+map.get("name"));
}
NamedParameterJdbcTemplate类是线程安全的,该类的最佳使用方式不是每次操作的时候实例化一个新的NamedParameterJdbcTemplate,而是针对每个DataSource只配置一个NamedParameterJdbcTemplate实例
NamedParameterJdbcTemplate也可以自己做mapper,如下:

java代码:
查看复制到剪贴板打印
NamedParameterJdbcTemplate jt = new NamedParameterJdbcTemplate(ds);
Map paramMap = new HashMap();
paramMap.put("uuid",um1.getUuid());
RowMapper mapper = new RowMapper() {
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
UserModel um = new UserModel();
um.setName(rs.getString("name"));
um.setUuid(rs.getString("uuid"));
return um;
}
};
List list = jt.query("select * from tbl_user where uuid=:uuid",paramMap,mapper);
Iterator it = list.iterator();
while(it.hasNext()){
UserModel tempUm = (UserModel)it.next();
System.out.println("uuid="+tempUm.getUuid()+",name="+tempUm.getName());
}
SimpleJdbcTemplate类
SimpleJdbcTemplate类是JdbcTemplate类的一个包装器(wrapper),它利用了Java 5的一些语言特性,比如Varargs和Autoboxing。
SQLExceptionTranslator接口
SQLExceptionTranslator是一个接口,如果你需要在 SQLException和org.springframework.dao.DataAccessException之间作转换,那么必须实现该接口。
转换器类的实现可以采用一般通用的做法(比如使用JDBC的SQLState code),如果为了使转换更准确,也可以进行定制(比如使用Oracle的error code)。
SQLErrorCodeSQLExceptionTranslator是SQLExceptionTranslator的默认实现。 该实现使用指定数据库厂商的error code,比采用SQLState更精确。
DataSourceUtils类
DataSourceUtils是一个帮助类提供易用且强大的数据库访问能力,们可以使用该类提供的静态方法从JNDI获取数据库连接以及在必要的时候关闭之。
尤其在使用标准JDBC,但是又想要使用Spring的事务的时候,最好从DataSourceUtils类来获取JDBC的连接。
SmartDataSource接口
SmartDataSource是DataSource 接口的一个扩展,用来提供数据库连接。使用该接口的类在指定的操作之后可以检查是否需要关闭连接。

AbstractDataSource类
它实现了DataSource接口的 一些无关痛痒的方法,如果你需要实现自己的DataSource,那么继承 该类是个好主意 。
SingleConnectionDataSource类
是SmartDataSource接口 的一个实现,其内部包装了一个单连接。该连接在使用之后将不会关闭,很显然它不能在多线程 的环境下使用
简介
Spring在资源管理,DAO实现支持以及事务策略等方面提供了与 JDO、JPA、Hibernate、TopLink及iBATIS的集成。以Hibernate为例,Spring通过使用许多IoC的便捷特性对它提供了一流的支持,帮助你处理很多典型的Hibernate整合的问题。所有的这些支持,都遵循Spring通用的事务和DAO异常体系。通常来说有两种不同的整合风格:你可以使用Spring提供的DAO模板,或者直接使用Hibernate/JDO/TopLink等工具的原生API编写DAO。无论采取哪种风格,这些DAO都可以通过IoC进行配置,并参与到Spring的资源和事务管理中去。
使用Spring构建你的O/R Mapping DAO的好处包括:
1:测试简单
2:异常封装
3:通用的资源管理
4:综合的事务管理
5:避免绑定特定技术允许mix-and-match的实现策略
在Spring的application context中创建 SessionFactory ,如下:

java代码:
查看复制到剪贴板打印
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">



com/lx/Parent.hbm.xml





org.hibernate.dialect.Oracle9Dialect

true



定义接口如下:

java代码:
查看复制到剪贴板打印
public interface Api {
public boolean create(UserModel um);
}
实现类如下:

java代码:
查看复制到剪贴板打印
public class Impl implements Api{
private SessionFactory sf = null;
public void setSf(SessionFactory sf){
this.sf = sf;
}
public boolean create(UserModel um){
HibernateTemplate ht = new HibernateTemplate(sf);
ht.save(um);
return false;
}
}
配置文件如下:

java代码:
查看