视频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:53 责编:小OO
文档
Spring DAO

学习目标

一、管理数据源

1.JDBC数据源

2.连接池数据源

3.JNDI数据源

二、整合JDBC

1.JDBC进行数据库访问的流程

2.JdbcTemplate模板类

3.NamedParameterJdbcTemplate模板类

4.JdbcDaoSupport辅助类

5.JDBC DAO的开发流程

三、整合Hibernate

1.Hibernate进行数据库访问的流程

2.Spring  IOC容器管理SessionFactory

3.HibernateJdbcTemplate模板类

4.HibernateDaoSupport辅助类

5.Hibernate DAO的开发流程

学习内容

对于数据库的操作Spring提供了DAO支持,可以不管底层的数据库细节,Spring的提供一组DAO接口就可以完成所有的数据库的操作

一、管理数据源

在进行任何数据访问的时候,都需要获取一个数据库连接。由于每次回去数据库连接都需要耗费相当长的时间,因此会严重影响系统的性能。为了解决这个问题,在JDBC中增加一个DataSource接口,定义数据源的概念。

所谓数据源,其实就是一个获取数据库连接的工厂,开发人员使用DataSource接口可以通过一致的方式获得数据库的连接,而在数据源的内部,可以通过将数据库连接缓存的方式来使得数据库连接可以被重用,从而得到快速获得数据库连接的目的。

通过使用数据源不仅仅可以提高获取数据库连接的速度,还可以方便低将事务管理等从具体的应用代码中分离出来,实现数据库事务的统一管理。

Spring提供了数据源的支持,并提供了一些常用情况下数据源的实现,不管采用什么方式来进行数据库操作,首先都要设置数据源,在Spring中采用IoC的方式来注入数据源,直接在配置文件中给DAO配置数据源。不管采用什么类型的数据源,只要保留一个DataSource接口就可以在配置文件中注入数据源了。

1.JDBC数据源

该类数据源生成标准的Connection对象。

org.springframework.jdbc.datasource.DriverManagerDataSource简单的实现了DataSource接口,直接获取Connection。它并未提供连接池的能力,而是仅仅开发、测试目的

2.连接池数据源

该类数据源生成由连接池维护的Connection对象

DBCP:org.apache.commons.dbcp.BasicDataSource

C3P0:com.mchange.v2.c3p0.ComboPooledDataSource

3.JNDI数据源

该类数据源生成由连接池维护的Connection对象,但连接是由Web容器产生的

JNDI:org.springframework.jndi.JndiObjectFactoryBean

二、整合JDBC

JDBC在Java开发中占有非常重要的地位,它的最大贡献在于提供对不同数据库的统一处理,在很大程度上屏蔽了底层数据库的不一致性。JDBC操作数据库的步骤非常明确,但是操作数据库的步骤也同时非常复杂,存在大量的重复步骤。Spring针对直接使用JDBC访问数据库的不足,对JDBC进行的封装处理,替我们完成SQL语句执行时的底层处理工作,可以很大程度上减轻开发人员的工作量,避免大量的重复代码。

1.JDBC进行数据库访问的流程

A.装载数据库驱动

B.建立数据库连接

C.开始事务

D.创建Statement/ParpredStatement对象

E.设置SQL语句,执行对数据库的操作

F.提交事务

G.异常处理(如果需要,包括事务回滚工作)

H.关闭数据库连接,释放资源

除了步骤E以外,其它的处理流程都是固定的,Spring对这些重复的步骤进行了封装Spring对JDBC的封装使用了模板设计模式,提供了JDBC操作的模板类JdbcTemplate,通过该模板类可以方便完成数据库的CURD操作。同时为了方便JdbcTemplate模板类在DAO中的使用,Spring提供了JdbcDaoSupport辅助类,用户的DAO只要继承该辅助类就可以在DAO中方便的获取JdbcTemplate模板类的实例完成数据库的CURD操作

2.JdbcTemplate模板类

JdbcTemplate构造函数接受一个DataSource对象来完成初始化。然后就可以使用它提供的相关方法来完成数据库的操作了

JdbcTemplate的常用方法列表

①返回单个对象的查询

Object query(String sql , ResultSetExtractor extractor)

Object query(String sql , Object[] args , ResultSetExtractor extractor)

查询结果使用ResultSetExtractor封装返回

Object queryForObject(String sql , RowMapper rowMapper)

Object queryForObject(String sql , Object[] args , RowMapper rowMapper)

查询结果使用rowMapper封装返回

Object queryForObject(String sql , Class requiredType)

Object queryForObject(String sql , Object[] args , Class requiredType)

根据SQL语句查询requiredType类型对象

Object queryForInt(String sql)/ Object queryForInt(String sql , Object[] args) 

Object queryForLong(String sql)/Object queryForLong(String sql , Object[] args)

根据SQL语句查询Integer/Long类型对象

②返回多个对象的查询

List query (String sql , RowMapper rowMapper)

List query (String sql , Object[] args , RowMapper rowMapper)

根据SQL查询,使用rowMapper封装对象,返回封装对象的List列表

List queryForList (String sql)

List queryForList (String sql , Object[] args)

根据SQL查询,使用Map封装对象,返回Map对象的List列表

List queryForList (String sql, Class requiredType)

List queryForList (String sql , Object[] args, Class requiredType)

根据SQL查询,返回requiredType对象的List列表,只支持基本类型及String类型

③更新操作

int update(String sql)

int update(String sql , Object[] args)

int update(String sql , Object[] args , int[] argTypes)

执行更新操作
int update(PreparedStatementCreator psc)
接收PreparedStatementCreator执行更新操作

int update(String sql , PreparedStatementSetter pss)
接收PreparedStatementSetter执行更新操作

④回调接口

ResultSetExtractor接口:用来完成结果集的处理,它的exetractorData方法接受一个ResultSet作为参数,对ResultSet迭代进行处理后返回

RowMapper接口:用来封装结果集中的特定行,它的mapRow方法接受的参数分别是结果集和当前的行号,对结果集中的当前行进行封装后返回

PreparedStatementCreator接口:用来创建并返回一个PreparedStatement对象

PreparedStatementSetter接口:用来设置一个PreparedStatement对象的参数值

3.NamedParameterJdbcTemplate模板类

JdbcTemplate模板类中所有SQL语句中参数都是使用占位符(?)来表示的,这给赋值工作带来了很到的麻烦,为了解决这个问题Spring提供了NamedParameterJdbcTemplate支持命名参数的模板类。该类封装了JdbcTemplate类,提供了使用命名参数的方式来设置SQL语句中动态值

NamedParameterJdbcTemplate的命名参数操作

①指定命名参数
SQL中指定命名操作的语法格式为:“:parameterName”

②设置命名参数    

⑴使用Map设置命名参数的值:key对应操作的名称,value对应参数的值

⑵使用SqlParameterSource接口的实现类MapSqlParameterSource。

本质上还是使用Map传递参数

⑶使用SqlParameterSource接口的实现类BeanPropertySqlParameterSource

使用Bean对象来传递参数,此时Bean对象中属性的名称必须与命名参数保持一致

4.JdbcDaoSupport辅助类

JdbcDaoSupport是建立在JdbcTemplate基础之上的辅助类,提供了对JDBC DAO的支持。它接受一个DataSource作为参数(也可以提供一个JdbcTemplate作为参数),在内部自动初始化JdbcTemplate模板类对象。用户的DAO类只要继承该类就可以方便低得到JdbcTemplateh或者Connection类的实例,进行数据库的CURD操作

JdbcDaoSupport的常用方法列表

①注入方法
⑴void setDataSource(DataSource dataSource)

⑵void setJdbcTemplate(JdbcTemplate jdbcTemplate)

②获取方法
⑴Connection getConnection()

⑵DataSource getDataSource()

⑶JdbcTemplate getJdbcTemplate()

5.JDBC DAO的开发流程

A.DAO实现:继承DAO接口和JdbcDaoSupport辅助类创建DAOImpl实现类,使用JdbcDaoSupport提供的JdbcTemplate模板对象完成DAOImpl类中的CURD的操作方法

B.DAO配置:配置对应的DataSource对象,为DaoImpl注入相应的DataSource

三、整合Hibernate

为了简化持久层的开发,越来越多的应用程序开始使用ORM组件来实现对数据库的各种操作,Hibernate作为一个优秀的ORM框架被广泛应用于应用程序的持久层开发,Spring作为一个轻量级的JavaEE框架,对通用的ORM框架提供了良好的支持。

1.Hibernate进行数据库访问的流程

A.创建Configuration对象实例

B.构建SessionFactory对象实例

C.开始一个新的Session

D.开始事务

E.使用Session对象执行对数据库的操作

F.异常处理(如果需要,包括事务回滚工作)

G.提交事务

H.关闭Session

I.关闭SessionFactory,释放资源

流程中的ABI步整个应用中只需要执行一次,Spring提供了LocalSessionFactory的工厂类以方便在Spring的容器中创建和管理SessionFactory实例。

流程中的CDFGH处理的流程固定,每次操作都是一样的。Spring中提供了和JDBC中一样的模板类HibenateTemplate对Hibernate的操作流程进行了封装,并提供了辅助类HibernateDaoFactory简化HibenateTemplate的使用

2.Spring  IOC容器管理SessionFactory

由于SessionFactory在整个Web应用中只需要初始化一次,因此可以方便的使用Spring的IoC容器创建和管理。为了方便SessionFactory的创建,Spring通过了一个工厂Bean org.springframework.orm.hibernate3.LocalSessionFactoryBean专门用于创建SessionFactory实例的工厂类。它并不是一个普通的Bean,LocalSessionFactoryBean属于工厂Bean的范畴,是Spring中提供了一种特殊的Bean。通过在配置文件中配置LocalSessionFactoryBean,便可以通过IoC容器获取SessionFactory的实例。

LocalSessionFactoryBean支持两种方式创建SessionFactory的实例:一是将Hibernate配置文件hibernate.cfg.xml整合到Spring的LocalSessionFactoryBean的配置中;二是直接在Spring配置文件中配置SessionFactory的参数

第一种方式:整合hibernate.cfg.xml文件配置参数

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

        classpath:hibernate.cfg.xml

 

第二种方式:直接配置SessionFactory参数

class="org.apache.commons.dbcp.BasicDataSource">

        value="com.mysql.jdbc.Driver">

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

        

        

            

                org.hibernate.dialect.MySQLDialect

            

        

        

            com/sunsoft/redyin/bean/Dept.hbm.xml

        

3.HibernateJdbcTemplate模板类

为了简化Hibernate的操作,Spring提供了Hibernate的模板类HibernateTemplate。org.springframework.orm.hibernate3.HibernateTemplate提供了使用Hibernate进行数据的添加、删除、更新和查询的一系列方法。并且每种功能都提供了多种执行方法以及对多种参数方式的支持,另外还提供了异常转换的功能,所有执行数据库操作的方法都抛出统一的异常DataAccessException。

HibernateJdbcTemplate的构造函数接受一个SessionFactory对象来完成初始化。然后就可以使用它提供的相关方法来完成数据库的操作了

HibernateJdbcTemplate常用方法列表

①查询方法
⑴Serializable save(Object entity)

⑵void update(Object entity)

⑶void saveOrUpdate(Object entity)

⑷void delete(Object entity)

②更新方法

⑴Object get(Class entityClass, Serializable id)

⑵Object load(Class entityClass, Serializable id)

⑶List find(String queryString)

⑷List find(String queryString , Object value)

⑸List find(String queryString , Object [] values)

4.HibernateDaoSupport辅助类

为了简化DAO中HibernateTemplate的使用,Sping提供了HibernateDaoSupport辅助类,org.springframework.orm.hibernate3.support.HibernateDaoSupport辅助类是建立在HibernateJdbcTemplate基础之上的,提供了对Hibernate DAO的支持。它接受一个SessionFactory作为参数(也可以提供一个HibernateJdbcTemplate作为参数),在内部自动初始化HibernateJdbcTemplate模板类对象。用户的DAO类只要继承该类就可以方便低得到HibernateJdbcTemplate的实例,进行数据库的CURD操作

HibernateDaoSupport常用方法列表

①注入方法
⑴void setSessionFactory(SessionFactory sessionFactory)

⑵void setHibernateTemplate(HibernateTemplate hibernateTemplate)

②获取方法

⑴Session getSession()

⑵SessionFactory getSessionFactory()

⑶HibernateTemplate getHibernateTemplate()
5.Hibernate DAO的开发流程

A.DAO实现:继承DAO接口和HibernateDaoSupport辅助类创建DAOImpl实现类,使用HibernateDaoSupport提供的HibernateTemplate模板对象完成DAOImpl类中的CURD的操作方法

B.DAO配置:配置SessionFactory对象,为DaoImpl注入相应的SessionFactory实例下载本文

显示全文
专题