模块一:spring创建数据库连接池对象
导入连接池和驱动的包:(目前没有build path)
导入之后查看依赖包:
分享一个知识点:
spring的ioc容器中配置文件,一般都是用bean配置的,里面是一些bean,每个bean都有自己的id。当我们需要对象的时候就从ioc容器里面获取,根据的就是这个ID。重点来了,我们还可以根据class获取到指定的bean
xml文件,
<!-- 引用外部属性文件 -->
<!-- 数据库连接池作为单实例是最好的,一个项目就一个连接池,连接池里面管理很多连接-->
<!-- 可以让Spring帮我们创建连接池对象,管理连接池 -->
<bean id ="datasource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="user" value="root"></property>
<property name="password" value="123456"></property>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test"></property>
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
</bean>
iocTest文件中
class IOCTest {
ConfigurableApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext02.xml");
@Test
public void test() throws SQLException {
//1、从容器中拿到连接池
//DataSource bean = (DataSource) ioc.getBean("datasource");
//2、按照类型获取组件,可以获取到这个类型下的所有实现类子类,
//为啥用的是DataSource这个类呢?为什么不用ComboPooledDataSource
//两个都可以,只不过ComboPooledDataSource是DataSource的实现类
DataSource bean2 = ioc.getBean(DataSource.class);
System.out.println(bean2.getConnection());
}
}
如何获取到bean的呢?
按照类型获取组件,可以获取到这个类型下的所有实现类子类,为啥用的是DataSource这个类呢?为什么不用ComboPooledDataSource?
两个都可以,只不过ComboPooledDataSource是DataSource的实现类
这样写也可以
模块二:引用外部的属性文件
依赖的是context名称空间。这是第四个名称空间了。
第一个是bean名称空间,
第二个是P名称空间,
第三个是util名称空间
老规矩:先引用
引入外部配置文件标签 classpath:表示引用类路径下的一个资源,bin目录的开始
再次强调,保存配置文件的信息要放在源码文件夹下面,不是普通文件夹
<!-- 引入外部配置文件标签 -->
<context:property-placeholder location="classpath:dbconfig.properties"/>
如何从外部配置文件中取值呢?
${key}动态取出配置文件中某个key对应的值
修改过后的xml:
<context:property-placeholder location="dbconfig.properties"/>
<bean id ="datasource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="user" value="${username}"></property>
<property name="password" value="${password}"></property>
<property name="jdbcUrl" value="${jdbcUrl}"></property>
<property name="driverClass" value="${driverClass}"></property>
</bean>
在test里面测试:
弹不出结果???????
修改username,为username2,测试
显示结果,因为username在spring中是关键字,为了防止配置文件中的key和spring中自己的关键字冲突,这里修改username为jdbc.username其他也一样。
小知识强调:配置文件中的value属性里面的} 和 ” 之间不要加空格,写成:"${jdbc.username} "
这样写会显示access denied 拒绝访问
<property name="user" value="${jdbc.username}"></property>
我又懂了:
在代码:
<bean id ="datasource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="user" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
<property name="driverClass" value="${jdbc.driverClass}"></property>
</bean>
代码中的name后面的参数,不是自己定义的,而是从ComboPooledDataSource,class里面取出来的啊!!!!!!