数据库的总篇&配置数据源
这篇文章貌似只是帮助理解,并没有什么实用性。还讲了下如何配置数据源也就是建立数据库连接。
在开发应用时,总少不了和数据库打交道。 那在处理数据库访问功能时,需要:初始化数据访问框架,打开连接,读取和写入数据,处理各种异常,关闭连接。 如果上述操作出现问题,就可能损坏和删除掉企业数据。其实我们在开发项目时,应该把大部分精力放在编写业务相关的代码上,即读取和写入数据。而不是处理上述问题,对吧。
先介绍一下配置数据源 和 数据访问技术:
配置数据源:只是在我们的应用和数据库之间建立一个连接。 使我们的应用可以访问数据库。而访问数据库也有很多种方式可以选择,这就是数据访问技术了。
数据访问技术:(持久化方式)是对数据库的数据进行增删改查。 数据访问技术有多种:JDBC,JPA,Hibernate。数据访问需要做的事:把应用的实体类和数据库表进行映射,对数据库数据进行增删改查。这写事情在不同的数据访问技术中有不同的方法。
其实呢,使用哪种方式配置数据源和使用哪种数据访问技术好像是没有关系的。 在开发过程中,配置数据库应该只是一次性的工作,数据访问是一直在使用的。如果不是要配置整个应用,在开发时,只需要知道怎么获取数据库的连接,使用的哪种数据库访问技术也就是持久化框架就可以开发持久层了。不用关心应用程序 是怎么配置数据源建立数据库连接的。
Spring和数据访问技术:Spring自带了一组数据访问框架,集成了多种数据访问技术。Spring对上述3种持久化方式都提供支持。也就是Spring对Spring能够帮助我们消除持久化代码中那些单调枯燥的数据访问逻辑,专注于应用程序中数据的管理。 那就在介绍某种数据访问技术时,介绍一下它没有Spring的帮助是怎么工作的,借助于Spring对它的支持,它是怎么简化了工作,专注于数据管理的。
在Spring配置数据源总结
数据源有两种:从连接池获取和不从连接池获取。建议使用从连接池获取连接的数据源。而池连接呢 通过应用服务器的JNDI获取数据源更好。数据库连接池,性能更好。至于怎么好……
在Spring上下文中配置数据源bean有多种方式:通过JDBC驱动程序定义数据源,通过JNDI查找数据,连接池的数据源。
配置Spring从JNDI中获取数据源
JNDI的理解参考JNDI 的理解
从JNDI中获取数据源需要两个步骤:1.把应用程序的数据源配置在JNDI中,2.使用位于jee命名空间下的<jee:jndilookup>元素 检索JNDI中的任何对象(包括数据源)并将装配到Spring上下文中,使之成为Spring的bean。
jndi-name属性用于指定JNDI中资源的名称,根据指定的名称查找数据源。如果应用程序运行在Java应用服务器中,你需要将resource-ref属性设置为true,这样给定的jndi-name将会自动添加“java:comp/env/”前缀。
如果名为/jdbc/SpittrDS的数据源已经配置在JNDI中。JavaConfig中,借助JndiObjectFactoryBean从JNDI中查找DataSource
import org.springframework.jndi.JndiObjectFactoryBean;
@Bean
public org.springframework.jndi.JndiObjectFactoryBean dataSource() {
JndiObjectFactoryBean jndiObjectFB = new JndiObjectFactoryBean();
jndiObjectFB.setJndiName("/jdbc/SpittrDS");
jndiObjectFB.setResourceRef(true);
jndiObjectFB.setProxyInterface(javax.sql.DataSource.class);
return jndiObjectFB;
}
如果名为/jdbc/SpittrDS的数据源已经配置在JNDI中 xml配置中,从JNDI中查找DataSource
<jee:jndi-lookup id="dataSource" jndi-name="/jdbc/SpittrDS" resource-ref="true"/>
在Spring中配置数据源连接池
如果不能从JNDI中查找数据源,那么下一个选择就是直接在Spring中配置数据源连接池
通过JDBC驱动 定义数据源
在Spring中,通过JDBC驱动定义数据源是最简单的配置方式。Spring提供了3个数据源类:DriverManagerDataSource,SimpleDriverDataSource和SingleConnectionDataSource。
这种数据源配置方式的缺点:其中SingleConnectionDataSource在每个连接请求时都会返回同一个的连接,有且只有一个数据库连接,不支持多线程。DriverManagerDataSource和SimpleDriverDataSource虽然支持多线程,但是每次请求连接都会创建新的连接,没有连接池功能,性能不佳。
JavaConfig中,配置DriverManagerDataSource如下,其中driverClassName指定了JDBC驱动类的全限定类名。在这里我们配置的是H2数据库的数据源。属性url用于设置数据库的JDBC URL。最后,username和password用于在连接数据库时进行认证。这也是配置一个数据源(数据库连接必须的)
配置mysql数据库
import javax.sql.DataSource;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/databasename");
dataSource.setUsername("root");
dataSource.setPassword("123456");
return dataSource;
}
配置oracle数据库
import javax.sql.DataSource;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("oracle.jdbc.driver.OracleDriver");
dataSource.setUrl("jdbc:oracle:thin:@172.1.0.0:1521:orcl");
dataSource.setUsername("admin");
dataSource.setPassword("123");
return dataSource;
}