• JDBC连接池、JDBCTemplate


    **

    一、数据库连接池

    **
    1.1 分析

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

    1.2 概念

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

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

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

    1.3 如何实现?

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

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

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

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

    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
    • 2
    • 3
    • 4
    • 5
    • 6

    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    定义工具类:

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

    **

    二、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():查询结果,并将结果集封装为对象
    		一般用于聚合函数的查询
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    2.3 JavaBean

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

  • 相关阅读:
    网络安全深入学习第一课——热门框架漏洞(RCE-代码执行)
    Python学习1(变量、语句、字符串)
    用Assert(断言)封装异常,让代码更优雅(附项目源码)
    深入 Qt5 信号槽新语法
    排序算法:堆排序
    Promise基础知识
    用java实现 s=a+aa+aaa+aaaa+aa...a 的值,a是用户任意输入的数字,n为最后一个累加的数的位数(累加数的个数)
    读书笔记:多Transformer的双向编码器表示法(Bert)-4
    PbootCMS SQL注入漏洞
    C++初识--------带你从不同的角度理解引用的巧妙之处
  • 原文地址:https://blog.csdn.net/weixin_42214237/article/details/126312776