视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
第三章 Spring DAO技术
2025-09-29 17:03:44 责编:小OO
文档
第三章 SpringDAO技术

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来管理。

        

        

        

        

    

4.2 Spring集成Hibernate

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类型的对象

        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

        

            

        

        

            

                org.hibernate.dialect.Oracle9Dialect

            

        

        

            

                com/jzgx/model/Person.hbm.xml

            

        

    

另外Spring对Hibernate进行了封装,提供了2个操作数据对象的类

1.org.springframework.orm.hibernate3.HibernateTemplate

Hibernate封装了Hibernate的Session对象的所有操作,并且提供更简洁的使用方法,在使用这个对象时需要按Spring的方式注入

        

    

        

    

//personDao类里面相应有hibernateTemplate成员变量,并且有get set方法,直接使用hibernateTemplate和使用hibrnate session是一样的

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 findPersonAll() {

        return this.hibernateTemplate.find("from Person");

    }

2.org.springframework.orm.hibernate3.support.HibernateDaoSupport

在hibernateTemplate的基础上进一步封装,使得我们可以直接继承这个类来使用,与hibernateTemplate在使用上稍微有些区别,a.Dao直接注入sessionFactory,b.调用父类的getHibernateTemplate()方法返回一个template对象,这二种方式都可以以Hibernate方式操作Session来执行增删改查和HQL语句

        

    

public void insertPerson(Person person) {

        this.getHibernateTemplate().save(person);

    }

    public List findPersonAll() {

        return this.getHibernateTemplate().find("from Person");

    }

4.3 Spring集成Jdbc

与集成Hibernate类似,Spring也提供了JDBC的JdbcTemplate类和JdbcDaoSupport类,允许直接执行sql语句,配置的方法与配置hibernate也大致相似,只是设置的属性不是sessionFactory,而是设置的dataSource,另外还有一个SimpleJdbcTemplate类在批量执行sql语句时代码更简洁。

需要注意的是在查询的时候,调用query的方法,返回的集合里面不是实体对象,是Map类型数据,如果需要返回的集合里是实体对象,要实现RowMapper接口

public List sqlFindPersonAll() {

        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);

4.4 异常

在使用Spring框架集成hibernate或者是jdbc,大大简化了代码的编写,很难看到try catch还有事务处理的代码,全是主要的业务代码,使代码看起来更流畅,Spring其实有一个异常体系,一般都由框架内部处理,当发生错误时,框架会抛出这些异常,异常详细描述参见书上第76页。

5.作业

1.下载本文

显示全文
专题