JDBC连接池、JDBCTemplate

**

一、数据库连接池

**
1.1 分析

每一次都要申请连接资源,用完以后再释放资源,这样很耗时,也造成了资源浪费。

1.2 概念

数据库连接池其实就是一个容器(集合),存放数据库连接的容器。

当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库是,从容器中获取数据库连接对象,用户访问完以后,在将连接对象归还给容器。

数据库连接池技术类似于多线程中的线程池一样

1.3 如何实现?

1)标准接口:DataSource(数据源,即连接池),在java.sql包下,包含的方法有:

获取连接:getConnection()
归还连接:connection.close()
	如果连接对象connection是从连接池中获取的,那么调用connection.close()方法,则不会关闭连接,而是归还连接。

2)一般不需要自己实现DataSource接口,而是由数据库厂商实现

1.C3P0:数据库连接池技术(技术较老)
2.Druid:数据库连接池技术(推荐,技术较新)

1.4 C3P0数据库连接池技术

使用步骤为:

1.导入jar包(两个)c3p0-0.9.5.2.jar和mchange-commons-java-0.2.12.jar
    注意不要忘记导入数据库的驱动jar包
2.定义配置文件:
    1.名称(必须是这两种名称,这样会自动找到文件,不是这个名称的话,会找不到文件):c3p0-config.xml or c3p0.properties
    2.路径:直接将文件放在src目录下即可。
3.创建核心对象,即数据库连接池对象:ComboPooledDataSource

1.5 Druid数据库连接池技术

使用步骤:

1.导入jar包:druid-1.0.9.jar,同样不要忘记导入数据库驱动jar包
2.定义配置文件,该文件有以下特点:
     1.是properties形式的
     2.可以是任意名称,可以放在任意目录下
         区别于C3P0,不会自动加载配置文件,C3P0的配置文件放在src目录下会自动加载
3.加载配置文件:Properties
4.获取数据库连接池对象:通过工厂类来获取,DruidDataSourceFactory
5.获取连接:getConnection

定义工具类:

1.导入jar包:druid-1.0.9.jar,同样不要忘记导入数据库驱动jar包
2.定义配置文件,该文件有以下特点:
    1.是properties形式的
    2.可以是任意名称,可以放在任意目录下
        区别于C3P0,不会自动加载配置文件,C3P0的配置文件放在src目录下会自动加载
3.加载配置文件:Properties
4.获取数据库连接池对象:通过工厂类来获取,DruidDataSourceFactory
5.获取连接:getConnection

**

二、Spring JDBC:JDBC Template

**

2.1 概念

Spring框架对JDBC的简单封装。提供了一个JDBCTemplate对象简化JDBC的开发

2.2 使用步骤

1.导入jar包
2.创建JDBCTemplate对象。创建的时候依赖于数据源DataSource(连接池)。
	jdbcTemplate template = new jdbcTemplate(ds);
3.调用JDBCTemplate对象的方法完成增删改查的操作
	update():执行DML语句
	queryForMap():查询结果,并将结果集封装为map集合
		将列名作为key,将值作为value,将这条记录封装为一个map集合
		注意事项:这个方法查询的结果集长度只能是1
	queryForList():查询结果,并将结果集封装为list集合
		注意:该方法是将每一条记录封装为一个map集合,再讲map集合装载到list集合中
	query():查询结果,并将结果集封装为JavaBean对象
		参数:RowMapper
			一般我们使用BeanPropertyRowMapper实现类,可以完成数据JavaBean的自动封装
			new BeanPropertyRowMapper<类型>(类型的字节码对象)
		注意:该方法是将每一条记录封装为一个JavaBean对象,此处设置JavaBean对象为Emp对象,然后再将JavaBean对象装载到list集合中
		在实际应用中,使用该方法,而不是将记录封装为map
	queryForObject():查询结果,并将结果集封装为对象
		一般用于聚合函数的查询

2.3 JavaBean

JavaBean是一种符合命名规范的class,它通过getter和setter来定义属性,只有getter没有setter为只读属性。

猜你喜欢

转载自blog.csdn.net/weixin_42214237/article/details/126312776
今日推荐