Spring访问数据库(oracle)配置

陈科肇:http://blog.csdn.net/u013474104/article/details/44279309

================

1.spring 对数据库访问的支持

当我们开发持久层的时候,我们面临着多种选择,比如使用JDBC、Hibernate、java持久化API或其它持久化框架。幸好的是spring能够支持所有这些持久化机制。

DAO(data access boject)数据访问对象,这个名字就很形象描述了DAO在应用程序中所扮演的角色。DAO提供了数据的读取、写入到数据库中的一种方式。它们应该以接口的方式发布功能,而应用程序的其它部分就可以通过接口来进行访问了。

注:服务对象本身并不会处理数据访问,而是将数据访问委托给DAO。DAO接口确保其与服务对象的松耦合。

2.配置数据源

spring提供了在spring上下文中配置数据源Bean的多种方式,包括:

a.通过JDBC驱动程序定义的数据源;

b.通过JNDI查找的数据源;

c.连接池的数据源;

接下我们就专门来讲讲从使用连接池获取连接的数据源!(即c点)

上下文配置Bean的代码:

<!--配置数据源 -->
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
		<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
		<property name="username" value="wwo"/>
		<property name="password" value="wwo"/>
		<!-- 连接池启动时的初始值 -->
		<property name="initialSize" value="3" />
		<!-- 连接池的最大值 -->
		<property name="maxActive" value="300" />
		<!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 -->
		<property name="maxIdle" value="2" />
		<!-- 最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请 -->
		<property name="minIdle" value="1" />
		<!-- end -->
	</bean>

注:JDBC驱动数据源并没有池的概念,因此没有存在池属性的配置!

好了,到这一步,我们已经完成了通过数据源建立了与数据库的连接,接下来就是实际访问数据库了。

3.在Spring中集成Hibernate

Hibernate一些特性:

a.延迟加载(Lazy loading):例如一个Bean对象由其属性及另一个Bean对象组成,如果我们只关注的只是这个Bean对象的属性,那么我们可以借助于延迟加载,只抓取需要的数据;

b.预先抓取(Eager fetching):这与延迟加载是相对的,一个Bean所关联的其它Bean都会被查询出来,这就节省了多次查询的成本;

c.级联(Cascading):有时候删除一个Bean对象后,也希望其同时能数据库中删除掉与其关联的其它Bean。

Spring对Hibernate ORM框架的支持提供了与这些框架集成点以及一些附加的服务,如下所示:

a.Spring声明式事务的集成支持;

b.透明的异常处理;

c.线程安全的、轻量级的模板类;

d.DAO支持类;

e.资源管理。

4.声明会话工厂(Session Factory)

使用Hibernate的主要接口是org.hibernate.Session。Session提供了基本的数据访问功能,如保存、更新、删除以及从数据库加载对象的功能。

能过借助于Hibernate的SessionFactory来获取Session对象,SessionFactory主要负责Hibernate Session的打开、关闭以及管理。

配置在xml上下文的Bean如下:

<bean id="sessionFactory"
		class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
		<property name="dataSource" ref="dataSource"/>
		<property name="packagesToScan">
			<!--扫描一下实体目录 -->
			<list>
				<value>com.blog.entity</value>
			</list>
		</property>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
				<prop key="hibernate.show_sql">true</prop>
				<prop key="hibernate.format_sql"> true</prop>
				<prop key="current_session_context_class">thread</prop>
			</props>
		</property>
</bean>

5.创建自己的基础DAO类

Spring可以通过Spring的Hibernate模板来保证每个事务都使用同一个会话。既然Hibernate能够对其自己进行管理,那就不必要使用模板类了。接下我们直接将Hibernate Session装配到自己的DAO类中。

/**
 * 基础dao
 *
 * @author ckz
 *
 * @param <T>
 */
public abstract class BaseDAO<T> {
	private Class<T> baseEntity;

	protected BaseDao(Class<T> baseEntity) {
		this.baseEntity = baseEntity;
	}

	/**
	 * 注入sessionFactory
	 */
	@Autowired
	private SessionFactory sessionFactory;

	/**
	 * 获得session
	 *
	 * @return
	 */
	protected Session getCurrentSession() {
		return sessionFactory.getCurrentSession();
	}

	/**
	 * 保存
	 *
	 * @param entity
	 * @throws Exception
	 */
	public void add(T entity) throws Exception {
		getCurrentSession().save(entity);
	}

	/**
	 * 调用存储过程
	 *
	 * @param proName
	 * @return
	 */
	public CallableStatement citePro(final String proName){
		Session session = getCurrentSession();
		CallableStatement proc=session.doReturningWork(
	                new ReturningWork<CallableStatement>() {
	                    @Override
	                    public CallableStatement execute(Connection connection) throws SQLException{
	                    	CallableStatement resultSet = connection.prepareCall(proName);
	                        return resultSet;
	                    }
	                }
	        );
		return proc;
	}

	/**
	 * 更新
	 *
	 * @param entity
	 * @throws Exception
	 */
	public void update(T entity) throws Exception {
		getCurrentSession().update(entity);
	}

	/**
	 * 保存或更新
	 *
	 * @param entity
	 * @throws Exception
	 */
	public void saveOrUpdate(T entity) throws Exception {
		getCurrentSession().saveOrUpdate(entity);
	}

	/**
	 * 删除
	 *
	 * @param entity
	 * @throws Exception
	 */
	public void delete(T entity) throws Exception {
		getCurrentSession().delete(entity);
	}

	/**
	 * 根据id获取对象
	 *
	 * @param Id
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public T getById(final Serializable Id) {
		return (T) getCurrentSession().get(this.baseEntity, Id);
	}
}

注:T表示的是泛型的参数类型,java泛型简述--http://blog.csdn.net/u013474104/article/details/44337145

时间: 2024-08-28 03:14:29

Spring访问数据库(oracle)配置的相关文章

Spring入门到精通&lt;三&gt;Spring访问数据库

Spring在数据访问方面提供了模板化和Dao支持类的提供,方便操作数据库. 一.Spring JDBC 1.配置数据源 DataSource 不管选择哪一种Spring Dao的支持方式,你都需要配置一个数据源的引用.配置方式有三种: ①.使用JNDI查找数据源: ②.使用数据源连接池:(dbcp c3p0 druid)  <!-- 配置数据源 -->      <bean id="dataSource" class="org.apache.commons

集算器访问数据库的配置

集算器支持包括数据库在内的多种异构数据源.这里,我们通过例子来看一下集算器访问数据库的方法. 集算器可以连接数据库的jdbc驱动,也可以通过jdbc-odbc桥连接数据库.由于版权的原因,使用集算器的程序员需要自行准备数据库的jdbc或者odbc驱动.Jdbc驱动jar包准备好之后,需要放入集算器IDE安装目录的/common/jdbc中,例如:C:\Program Files (x86)\MicroInsight\common\jdbc目录中. 集算器集成开发环境的ODBC配置界面如下: 集算

Spring主从数据库的配置和动态数据源切换原理

原文:https://www.liaoxuefeng.com/article/00151054582348974482c20f7d8431ead5bc32b30354705000 在大型应用程序中,配置主从数据库并使用读写分离是常见的设计模式.在Spring应用程序中,要实现读写分离,最好不要对现有代码进行改动,而是在底层透明地支持. Spring内置了一个AbstractRoutingDataSource,它可以把多个数据源配置成一个Map,然后,根据不同的key返回不同的数据源.因为Abst

SpringBoot实战(四)之使用JDBC和Spring访问数据库

这里演示的是h2databse示例,所以简单的介绍普及下h2database相关知识 H2数据库是一个开源的关系型数据库. H2是一个嵌入式数据库引擎,采用java语言编写,不受平台的限制,同时H2提供了一个十分方便的web控制台用于操作和管理数据库内容.它还提供兼容模式,可以兼容一些主流的数据库,因此采用H2作为开发期的数据库非常方便. H2数据库特点: 短小精干. Java编写,可使用GCJ和IKVM.NET编译. 同时支持网络版和嵌入式版本,另外还提供了内存版. 有比较好的兼容性,支持相当

企业分布式微服务云SpringCloud SpringBoot mybatis (七)Spring Boot中使用JdbcTemplate访问数据库

本文介绍在Spring Boot基础下配置数据源和通过JdbcTemplate编写数据访问的示例. 数据源配置 在我们访问数据库的时候,需要先配置一个数据源,下面分别介绍一下几种不同的数据库配置方式. 首先,为了连接数据库需要引入jdbc支持,在pom.xml中引入如下配置: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdb

Spring访问oracle数据库配置步骤

1.spring 对数据库访问的支持 当我们开发持久层的时候,我们面临着多种选择,比如使用JDBC.Hibernate.java持久化API或其它持久化框架.幸好的是spring能够支持所有这些持久化机制. DAO(data access boject)数据访问对象,这个名字就很形象描述了DAO在应用程序中所扮演的角色.DAO提供了数据的读取.写入到数据库中的一种方式.它们应该以接口的方式发布功能,而应用程序的其它部分就可以通过接口来进行访问了. 2.配置数据源 spring提供了在spring

各种数据库(oracle、mysql、sqlserver等)在Spring中数据源的配置和JDBC驱动包

在开发基于数据库的应用系统时.须要在项目中进行数据源的配置来为数据 库的操作取得数据库连接. 配置不同数据库的数据源的方法大体上都是同样的.不同的仅仅是不同数据库的JDBC驱动类和连接URL以及对应的数据库username和密 码不同.以下列出8中经常使用的数据库的数据库数据源配置和对应的JDBC驱动包. 1.Spring中数据源配置格式 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSour

【j2ee spring】6、spring与数据库的连接配置

spring与数据库的连接配置 这里我们开始使用spring管理来配置数据的操作了 1.首先在xml文件中配置数据的连接 MySQL <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <!-- results in a setDriverClassName(String) call --&

oracle数据库tns配置方法详解

TNS简要介绍与应用 Oracle中TNS的完整定义:transparence Network Substrate透明网络底层,监听服务是它重要的一部分,不是全部,不要把TNS当作只是监听器. TNS是Oracle Net的一部分,专门用来管理和配置Oracle数据库和客户端连接的一个工具,在大多数情况下客户端和数据库要通讯,必须配置TNS,当然在少数情况下,不用配置TNS也可以连接Oracle数据库,比如通过JDBC.如果通过TNS连接Oracle,那么客户端必须安装Oracle client