Spring JDBC抽象框架提供了对JDBC操作的完整封装,
包括:
指定数据库连接参数
打开数据库连接
预编译并执行SQL语句
遍历查询结果
处理抛出的任何异常
处理事务
关闭数据库连接
使用方式:
1,导数据库包,配置数据库源(数据库帐密码等,获取连接池中连接对象)
2,测试数据源
3,JdbcTemplate类
JdbcTemplate是core包的核心类。它替我们完成了资源的创建以及释放工作,从而简化了我们对JDBC的使用。 我们可以在DAO实现类中通过传递一个DataSource引用来完成JdbcTemplate的实例化,也可以在Spring的IoC容器中配置一个JdbcTemplate的bean并赋予DAO实现类作为一个实例。
获取一个表中的所有行数
int count = this.jdbcTemplate.queryForInt("select count(empno) from emp");
查询一个String
String ename = (String) this.jdbcTemplate.queryForObject( "select ename from emp where empno = ?", new Object[]{7788},String.class);
查询返回实体类
//查询返回实体类
//RowMapper(接口)用于将结果集中当前行映射到一个Java对象
String sql="select * from dept where deptno=60";
Dept dept = (Dept)this.jdbcTemplate.queryForObject(sql, new RowMapper() {
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
Dept dept = new Dept();
dept.setDeptno(rs.getInt("deptno"));
dept.setDname(rs.getString("dname"));
dept.setLoc(rs.getString("loc"));
return dept;
}
});
查询返回集合
String sql="select * from dept";
List<Dept> list = (List)this.jdbcTemplate.query(sql, new RowMapper() {
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
Dept dept = new Dept();
dept.setDeptno(rs.getInt("deptno"));
dept.setDname(rs.getString("dname"));
dept.setLoc(rs.getString("loc"));
return dept;
}
});
批量更新
批量操作需要实现特定的接口BatchPreparedStatementSetter来进行的, 这个接口有两个方法需要实现。一个叫做getBatchSize来提供当前需要批量操作的数量。另外一个方法是setValues 允许你为prepared statement设置参数
public void batchUpdate(final List<Dept> list){
this.jdbcTemplate.batchUpdate("insert into dept values(?,?,?)",
new BatchPreparedStatementSetter() {
public void setValues(PreparedStatement ps, int i) throws SQLException {
ps.setInt(1, list.get(i).getDeptno());
ps.setString(2, list.get(i).getDname());
ps.setString(3, list.get(i).getLoc());
}
public int getBatchSize() {
return list.size();
}
});
}
使用JdbcTemplate执行DDL
this.jdbcTemplate.execute("create table mytable(id number,name varchar2(20))");
Spring提供了一套抽象DAO类
JdbcDaoSupport - JDBC数据访问对象的基类。 需要一个DataSource,同时为子类提供 JdbcTemplate。 HibernateDaoSupport - Hibernate数据访问对象的基类。 需要一个SessionFactory,同时为子类提供 HibernateTemplate。也可以选择直接通过 提供一个HibernateTemplate来初始化。 JdoDaoSupport - JDO数据访问对象的基类。 需要设置一个PersistenceManagerFactory, 同时为子类提供JdoTemplate。 JpaDaoSupport - JPA数据访问对象的基类。 需要一个EntityManagerFactory,同时 为子类提供JpaTemplate