1.回顾
1)认识J2EE框架和容器
2)Spring轻量级J2EE框架介绍
3)Spring IOC/ID
2.本章目标
1.Spring数据源封装
2.Spring集成Hibernate
3.Spring集成Jdbc
3.难点
1)Spring集成Hibernate使用HibernateTemplate或者HibernateDaoSupport
2)Spring集成Jdbc使用JdbcTemplate或者JdbcDaoSupport
4.知识点内容讲解
4.1 Spring数据源封装
数据源和连接池的概念
数据源是指应用程序正在使用的数据库,但是在面向对象的编程里,希望通过配置通用的组件来连接上数据库。
常见的数据源有:
●apache的dbcp数据源连接池
●hibernate的c3p0数据源连接池
Spring也提供了数据源连接池的组件DriverManagerDataSource
开发人员只需要配置数据库的驱动、连接字符串、用户名和密码就可以不做任何改动的使用这些组件,这些组件会管理数据库连接对象Connection,并且以池(pool)的方式提供给开发者。
在Spring里通过bean的标签定义数据库连接池对象,在程序中可以通过getBean获得这个连接池对象,数据源连接池在构建数据库连接全部交给Spring来管理。
Spring提供对很多ORM框架集成的支持,比如Hibernate,MyBatis,JDO等,现在先了解Spring对Hibernate集成提供的支持,Spring封装了Hibernate的sessionFactory,支持的类是org.springframework.orm.hibernate3.LocalSessionFactoryBean 同样采用配置的方式注入,这个bean有3个需要关注属性 ●dataSource:数据源的bean,也就是前面定义的数据源 ●hibernateProperties:定义hibernateSessionFactory类需要的参数 ●mappingResource:定义表对应实体对象的映射文件 其中hibernateProperties属性时java.util.Properties类型的对象 mappingResources属性时java.util.List类型的对象 1.org.springframework.orm.hibernate3.HibernateTemplate Hibernate封装了Hibernate的Session对象的所有操作,并且提供更简洁的使用方法,在使用这个对象时需要按Spring的方式注入 private HibernateTemplate hibernateTemplate; public HibernateTemplate getHibernateTemplate() { return hibernateTemplate; } public void setHibernateTemplate(HibernateTemplate hibernateTemplate) { this.hibernateTemplate = hibernateTemplate; } public void insertPerson(Person person) { this.hibernateTemplate.save(person); } public List return this.hibernateTemplate.find("from Person"); } 在hibernateTemplate的基础上进一步封装,使得我们可以直接继承这个类来使用,与hibernateTemplate在使用上稍微有些区别,a.Dao直接注入sessionFactory,b.调用父类的getHibernateTemplate()方法返回一个template对象,这二种方式都可以以Hibernate方式操作Session来执行增删改查和HQL语句 this.getHibernateTemplate().save(person); } public List return this.getHibernateTemplate().find("from Person"); } 与集成Hibernate类似,Spring也提供了JDBC的JdbcTemplate类和JdbcDaoSupport类,允许直接执行sql语句,配置的方法与配置hibernate也大致相似,只是设置的属性不是sessionFactory,而是设置的dataSource,另外还有一个SimpleJdbcTemplate类在批量执行sql语句时代码更简洁。 需要注意的是在查询的时候,调用query的方法,返回的集合里面不是实体对象,是Map类型数据,如果需要返回的集合里是实体对象,要实现RowMapper接口 public List List list=this.jdbcTemplate.query("select * from person", new RowMapper(){ public Object mapRow(ResultSet rs, int row) throws SQLException { Person person=new Person(); person.setPersonId(rs.getLong("person_id")); person.setPersonName(rs.getString("person_name")); person.setPersonTel(rs.getString("person_tel")); return person; } }); return list; return this.jdbcTemplate.queryForList("select * from person", Person.class); 在使用Spring框架集成hibernate或者是jdbc,大大简化了代码的编写,很难看到try catch还有事务处理的代码,全是主要的业务代码,使代码看起来更流畅,Spring其实有一个异常体系,一般都由框架内部处理,当发生错误时,框架会抛出这些异常,异常详细描述参见书上第76页。 5.作业 1.下载本文
4.2 Spring集成Hibernate
另外Spring对Hibernate进行了封装,提供了2个操作数据对象的类
2.org.springframework.orm.hibernate3.support.HibernateDaoSupport //personDao类里面相应有hibernateTemplate成员变量,并且有get set方法,直接使用hibernateTemplate和使用hibrnate session是一样的
4.3 Spring集成Jdbc public void insertPerson(Person person) {
4.4 异常 } 或者是