SpringJdbc
1)概念:spring框架对jdbc的封装
注: 疯转的目的是为了简化代码,提高代码的质量。比如:使用Springjdbc访问数据库,就不在需要考虑如何获取连接,关闭连接等等
2)SpringJdbc的步骤
第一步:导包spring-webmvc和spring-jdbc和ojdbc和dbcp
第二步:添加spring-mvc的applicationContext.xml配置文件
第三步:在配置文件(applicationContext.xml)中配置一个JdbcTemplate的一个bean
在这里要先读取数据库的配置文件,再配置连接池的bean,最后在配置JdbcTemplate
//这边的ref是上面连接池的id,把连接池注入进来
第四步:调用JdbcTemplate提供的方法来访问数据库
注:将JdbcTemplate注入到DAo中
写entity entity和以前的一样就是建一个类,这个类的属性和表的字段一样
在写dao要和上面分层那边的一样,写接口,再写实现类,和分层的写法一样
在这边写dao的方法的时候不用在像以前那样,建立连接,创建语句对象,处理结果了,
直接用JdbcTemplate封装的方法即可
例如:
@Repository("empDAO") //这个是组件扫描,相当于建了一个bean
public class EmployDAO {
/*jdbctemplate提供了很多实用的方法来访问数据库
我们不在需要考虑如何获取连接与关闭连接,另外
还会降底层的jdbc异常统一转换成一些运行时异常然后抛出*/
@Autowired //将JdbcTemplate这个类注入进来
@Qualifier("jt") //这边括号里的是在配置文件的bean的id
private JdbcTemplate jt;
public void save(Employee e){
String sql="insert into t_emp values(t_emp_seq.nextval,?,?,?)";
Object[] objs={e.getName(),e.getSalary(),e.getAge()}; //这边大括号里面的顺序要和?在表中的字段的顺序一样
//这就像以前那种要PreparedStatem的给每个?的赋值
jt.update(sql,objs); //插入,更新,删除,都是调用这个方法
}
}
查找所有的员工。调用模板jt里面的query方法,这方法有两个参数,第一个是sql语句,第二个是一个类的对象,这个类要实现RowMapper
这接口
重写这个接口下面的方法。这个方法的的方法体就是从结果集中获取值,再封装成entity下面那个类的对象并返回
例如:
public List findall(){
String sql="select * from t_emp";
return jt.query(sql,new EmpRowMapper());
}
//告诉JdbcTemplate如何将一条记录转换成一个实体对象。
class EmpRowMapper implements RowMapper{
//index表示正在被处理的记录的下标(下标是从0开始的)
public Employee mapRow(ResultSet rs, int index) throws SQLException {
Employee e=new Employee();
e.setId(rs.getInt("id"));
e.setName(rs.getString("name"));
e.setSalary(rs.getDouble("salary"));
e.setAge(rs.getInt("age"));
return e;
}
}