1、Spring配置数据源
1.1、spring:数据源,连接池的作用
-
数据源(连接池)是提高程序性能
-
如出现的事先实例化数据源,初始化部分连接资源使用
-
连接资源时从数据源中获取
-
使用完毕后将连接资源归还给数据源
2、Spring配置数据源-开发步骤
2.1、导入数据源的坐标和数据库的驱动坐标
2.2、创建我们数据源的对象
2.3、设置数据源的基本连接数据(root,psw,最大连接数…)
2.4、使用数据源获取链接资源和归还资源
3、Spring配置数据源–准备开发
3.1、导入需要的依赖环境
mysql、jdbc、c3p0数据源、druid数据源、单元测试类
<dependencies>
<!-- 导入Spring的依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.16</version>
</dependency>
<!-- 导入mysql数据库 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<!-- c3p0数据源 -->
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<!-- 这个不晓得 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
<!-- 单元测试类 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
</dependency>
</dependencies>
3.2、配置数据源连接数据库
// 测试数据源连接mysql数据库
public class c3p0Test {
@Test
public void testc3p0() throws PropertyVetoException, SQLException {
// 创建数据源的对象
ComboPooledDataSource dataSource = new ComboPooledDataSource();
// 配置数据源
// 配置驱动
dataSource.setDriverClass("com.mysql.jdbc.Driver");
// 设置url地址
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/week9");
// 设置我的账号和密码
dataSource.setUser("root");
dataSource.setPassword("010115");
Connection connection = dataSource.getConnection();
// 打印一下地址
System.out.println("数据库连接成功!"+connection);
// 归还数据源
connection.close();
}
}
打印结果
3.3、弊端
- 这样使用外部源的数据势必会有很强的耦合性,如果后期程序需要修改,就需要从源码的位置开始,非常的麻烦,直接耦合死了
- 所以我们可以采用配置文件的方式将这些外部源的数据配置到其中,如果需要修改和读取的时候加载这个配置文件即可
3.4、创建配置文件–解耦合
jdbc.driver = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/week9
jdbc.user = root
jdbc.password = 010115
3.5、读取配置文件,配置数据源信息
@Test // 配置文件的方式存值取值
public void newc3P0() throws PropertyVetoException, SQLException {
// 加载配置文件--参数是我们配置文件的前缀(jdbc.properties)
ResourceBundle db = ResourceBundle.getBundle("jdbc");
// 读取参数--getString()
String driver = db.getString("jdbc.driver");
String url = db.getString("jdbc.url");
String user = db.getString("jdbc.user");
String password = db.getString("jdbc.password");
// 读取到了以后赋值进去
// 创建数据源的对象
ComboPooledDataSource dataSource = new ComboPooledDataSource();
// 配置数据源
// 配置驱动
dataSource.setDriverClass(driver);
// 设置url地址
dataSource.setJdbcUrl(url);
// 设置我的账号和密码
dataSource.setUser(user);
dataSource.setPassword(password);
Connection connection = dataSource.getConnection();
// 打印一下地址
System.out.println("数据库连接成功!"+connection);
// 归还数据源
connection.close();
}
4、Spring配置文件–将数据源对象的创建方式交给Spring来创建
4.1、创建我们的配置文件xml
-
数据源对象本身我们是引入的第三方,所以我们直接在配置文件,通过Bean在容器中注册这个对象就行
-
不需要dao,service,Controller层的创建
-
第三方引用关于class全路径名的获取
-
<!-- 外部文件的全路径名获取- --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <!-- 配置属性 --> <!-- 驱动 --> <property name="driverClass" value="com.mysql.jdbc.Driver"></property> <!-- url --> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/week9"></property> <!-- 用户名 --> <property name="user" value="root"></property> <!-- 密码 --> <property name="password" value="010115"></property> </bean>
4.2、创建测试的方法进行测试
-
// 通过Spring容器创建我们的ComboPooledDataSource对象 @Test public void SpringJDBCTest() throws SQLException { // 加载配置文件获取到我们的ComboPooledDataSource对象 ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml"); // getBean获取到容器中的对象 ComboPooledDataSource dataSource = app.getBean(ComboPooledDataSource.class); Connection connection = dataSource.getConnection(); // 打印一下地址 System.out.println(connection); }
4.3、些许的问题,还是有耦合性,怎么解决?
5、Spring配置文件–xml读取properties的信息
将我们properties配置文件注入到我们的xml文件当中
5.1、引入context命名空间和约束路径
-
命名空间:xmlns:context=“http://www.springframework.org/schema/context”
-
约束路径:
-
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
5.2、引入properties配置文件
- classpath:类加载路径下(resources)的jdbc.properties
<!-- 属性加载器-property-placeholder -->
<context:property-placeholder location="classpath:jdbc.properties"/>
-
将properties的值注入到Bean对象中
-
<!-- 如何将properties的值放在value中- EL表达式 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <!-- 配置属性 --> <!-- 驱动 --> <property name="driverClass" value="${jdbc.driver}"></property> <!-- url --> <property name="jdbcUrl" value="${jdbc.url}"></property> <!-- 用户名 --> <property name="user" value="${jdbc.user}"></property> <!-- 密码 --> <property name="password" value="${jdbc.password}"></property> </bean>