spring项目中总要跟数据库打交道,其中怎么连接数据库的方法都有很多,大概分为3类:
1) 通过JNDI获取应用服务器(如JBOSS, Tomcat) 的数据源
2) Spring容器中直接配置数据源
3)代码直接创建数据源,这个一般用于单元测试
然后每种都来记一记:
一: JNDI获取应用服务器的数据源
首先应用服务器里要定义好数据源,例如JBoss:
jboss/v6.3.0.8.0/standalone/configuration/standalone.xml
这里的JNDI-name="java:/jdbc/OracleDS"
jdbc:oracle:thin:@test:1521:bb
oracle.jdbc.driver.OracleDriver
oracle
20
UA_AUTHENTICATION_INFO
然后到spring项目中,有2中方式获取应用服务器的数据源:
第一种是:JndiObjectFactoryBean,如:
第二种是jee命名空间jndi-lookup,如
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xmlns:jee=http://www.springframework.org/schema/jee
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee-2.0.xsd">
上面2中,都用到了jndi-name="java:/jdbc/OracleDS",就是上面应用服务器的数据源定义。
二: spring容器中配置数据源
利用第三方依赖包,一个是apache的DBCP,一个是C3P0。
DBCP:
C3P0:
到底谁好,后续再学再记。
三:代码自己实现连接
1) 通过DriverManager, 位于JDK中java/sql/包下,是JDBC1.0,需要硬性编码驱动,不支持连接池,代码如:
//此处的Class.forName删掉,intellij 也能跑成功,所以这句要不要后续待查
Class.forName("com.mysql.jdbc.Driver");try{
Connection connection=DriverManager.getConnection(DB_URL, USER, PASS);
Statement statement=connection.createStatement();
}catch(SQLException e) {
e.printStackTrace();
}
2) 通过各种DataSource实现类
DataSource是一个接口,有很多实现DataSource接口,如上面的DBCP的BasicDataSource,C3P0中的ComboPooledDataSource,都是实现了这个接口,还有spring 自带了 DriverManagerDataSource,还有Oracle的OracleDataSource.
所以这些实现类都可以直接在类中使用来创建连接
DBCP:
BasicDataSource ods= newBasicDataSource();
ods.setUrl("jdbc:oracle:thin:@test:1521:ua");
ods.setUsername("test");
ods.setPassword("test");
Connection conn=ods.getConnection();
C3P0:
ComboPooledDataSource ods = newComboPooledDataSource();
ods.setJdbcUrl("jdbc:oracle:thin:@test:1521:ua");
ods.setUser("test");
ods.setPassword("test");
Connection conn= ods.getConnection();
Spring 的DriverManagerDataSource
DriverManagerDataSource ods = new DriverManagerDataSource ();
ods.setUrl("jdbc:oracle:thin:@test:1521:ua");
ods.setUsername("test");
ods.setPassword("test");
Connection conn = ods.getConnection();
当然也可以直接用具体数据库驱动里的,比如Oracle和MySql
Oracle的OracleDataSource
OracleDataSource ods = new OracleDataSource();
ods.setUrl("jdbc:oracle:thin://localhost:3309/sampledb");
ods.setUsername("root");
ods.setPassword("1234");
Connection actualCon = ods.getConnection();
MySql:
OracleDataSource ods = new MysqlDataSource();
ods.setUrl("jdbc:mysql://localhost:3309/sampledb");
ods.setUsername("root");
ods.setPassword("1234");
Connection actualCon = ods.getConnection();
上面的BasicDataSource是可以解决不同数据库不同操作dataSource, 具体可以参考:
https://www.journaldev.com/2509/java-datasource-jdbc-datasource-example