【JavaWeb】JDBC优化 之 数据库连接池、Spring JDBC

1 数据库连接池

为什么要使用数据库连接池?

  1. 数据库连接是一件费时的操作,连接池可以使多个操作共享一个连接
  2. 使用连接池可以提高对数据库连接资源的管理
  3. 节约资源且高效

概念:数据库连接池其实就是一个容器,存放数据库连接的容器。当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户访问数据库时,从容器中获取连接对象,用户访问完后,将连接对象归还给数据库。

实现:

  1. 标准接口:DataSource:javax.sql包下。使用getConnection()获取连接,如果连接对象是从连接池中获取的。调用Connection.close方法则不会关闭连接,而是归还连接。
  2. 一般不去实现它,由数据库厂商来实现。实现技术由:C3P0和Druid【阿里巴巴提供 最好的数据库连接池实现技术】

2 C3P0的使用

步骤

  1. 导入两个c3p0的jar包
    mchange-commons-java-0.2.12
    c3p0-0.9.5.2
    还需要数据库驱动jar包
  2. 定义配置文件
    名称:c3p0.properties或者c3p0-config.xml
    路径:直接将文件放在src目录下即可
  3. 创建核心对象,数据库连接池对象 ComboPooledDataSource
  4. 获取连接:getConnection
    public static void main(String[] args) throws SQLException {DataSource ds = new ComboPooledDataSource();ds.getConnection();System.out.println(ds);}

3 Druid的使用

步骤

  1. 导入druid-1.0.9.jar包
  2. 定义配置文件:druid.properties,可以叫任意名称,可以放在任意目录
  3. 获取数据库连接池对象,通过工厂类DruidDataSourceFactory获取
  4. 获取连接:getConnection
public class JDBCUtils {//1.定义成员变量 DataSourceprivate static DataSource ds ;static{try {//1.加载配置文件Properties pro = new Properties();pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));//2.获取DataSourceds = DruidDataSourceFactory.createDataSource(pro);} catch (IOException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}/*** 获取连接*/public static Connection getConnection() throws SQLException {return ds.getConnection();}/*** 释放资源*/public static void close(Statement stmt,Connection conn){close(null,stmt,conn);}public static void close(ResultSet rs , Statement stmt, Connection conn){if(rs != null){try {rs.close();} catch (SQLException e) {e.printStackTrace();}}if(stmt != null){try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if(conn != null){try {conn.close();//归还连接} catch (SQLException e) {e.printStackTrace();}}}/*** 获取连接池方法*/public static DataSource getDataSource(){return  ds;}
}

4 Spring JDBC

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

步骤:

  1. 导入jar包
    在这里插入图片描述
  2. 创建JdbcTemplate对象,依赖于数据源DataSource
  3. 使用JdbcTemplate对象的方法来完成CRUD的操作
  • update():执行DML语句增删改
  • qureyForMap:查询结果并将结果集封装为map集合
    注意:这个方法查询的结果集长度只能是1
  • qureyForList:查询结果并将结果集封装为list集合
    注意:将每一条记录封装为Map集合,再将Map集合装载到List集合中
  • qurey():查询结果,将结果封装为JavaBean对象
    注意:qurey的参数:RowMapper。一般使用BeanPropertyRowMapper实现类,可以完成数据到JavaBean的自动封装。
    -new BeanPropertyRowMapper<类型>(类型.class)
  • qureyForObject:查询结果,将结果封装为对象
    注意:一般用于聚合函数的查询

4.1 JDBC Template入门使用

  1. 已经导入的数据库连接jar包
  2. JDBCUtils是用druid实现的工具类,druid包也需要导入
  3. 导入JDBC Template的五个jar包
import org.springframework.jdbc.core.JdbcTemplate;public class JDBCTemplateDemo {public static void main(String[] args) {JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());String sql = "update account set balance=5000 where id=?";int count = template.update(sql, 1);System.out.println(count);}
}

4.2 JDBCTemplate执行DML语句

  1. 修改1号数据的balance为10000
  2. 添加一条记录
  3. 删除第2步添加的记录
  4. 查询id为1的记录,将结果封装为map集合
  5. 查询所有记录,将结果封装为list集合
  6. 查询所有记录,将结果封装为Account对象的list集合
  7. 查询总记录数

public class JDBCTemplateDemo2 {private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());//更新记录@Testpublic void test1(){String sql = "update account set balance=? where id=?";int count = template.update(sql,999,1);Assert.assertEquals(1,count);}//添加记录@Testpublic void test2(){String sql = "insert into account values(null,?,?)";int count = template.update(sql, "赵四", 888);Assert.assertEquals(1,count);}//删除记录@Testpublic void test3(){String sql = "delete from account where id = ?";int count = template.update(sql, 4);Assert.assertEquals(1,count);}//查询id为1的记录 封装为map//注意queryForMap查询的结果集长度只能是1@Testpublic void test4(){String sql = "select * from account where id = ?";Map<String, Object> map = template.queryForMap(sql,1);System.out.println(map);}@Test//查询所有的记录 封装到list中 list中是map对应的一条条结果public void test5(){String sql = "select * from account";List<Map<String, Object>> maps = template.queryForList(sql);System.out.println(maps);}@Test//将结果封装为类再存入list中public void test6(){String sql = "select * from account";List<Account> query = template.query(sql, new BeanPropertyRowMapper<Account>(Account.class));for(Account acc: query){System.out.println(acc);}}//查询总记录数@Testpublic void test7(){String sql = "select count(id) from account";Long total = template.queryForObject(sql, Long.class);System.out.println(total);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/480924.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java远程通讯技术及原理分析

在分布式服务框架中&#xff0c;一个最基础的问题就是远程服务是怎么通讯的&#xff0c;在Java领域中有很多可实现远程通讯的技术&#xff0c;例如&#xff1a;RMI、MINA、ESB、Burlap、Hessian、SOAP、EJB和JMS等&#xff0c;这些名词之间到底是些什么关系呢&#xff0c;它们背…

CUDA层硬件debug之路

前记 众所周知&#xff0c;夕小瑶是个做NLP的小可爱。 虽然懂点DL框架层知识&#xff0c;懂点CUDA和底层&#xff0c;但是我是做算法的哎&#xff0c;平时debug很少会遇到深度学习框架层的bug&#xff08;上一次还是三年前被pytorch坑&#xff09;&#xff0c;更从没遇到过CUDA…

研讨会 | 知识图谱大咖云集阿里,他们都说了啥

前言12月20日&#xff0c;由阿里巴巴联合中国中文信息学会语言与知识计算专委会(KG专委)举办的知识图谱研讨会在杭州召开。研讨会由阿里巴巴集团副总裁墙辉&#xff08;玄难&#xff09;主持&#xff0c;知识图谱领域国内知名专家参与了此次研讨。在阿里巴巴持续发力知识图谱这…

置信区间、P值那点事

在假设检验中&#xff0c;我们常常看到跟P值形影不离的一对区间值&#xff0c; 就是大名鼎鼎的置信区间了。 这置信区间和P值是怎么得来的&#xff0c;我想大多数盆友都不会有什么直观的概念&#xff0c;只会注意P值是否小于0.05或者0.01(根据显著性水平确定)。为了给大伙说清楚…

【JavaWeb】HTML+CSS

1 Web概念概述 JavaWeb是使用Java语言开发基于互联网的项目 软件架构 cs架构&#xff1a;优点【资源加载快、用户体验好】、缺点【安装、部署、维护麻烦】bs架构&#xff1a;优点【开发、安装、部署、维护简单】、缺点【应用过大&#xff0c;用户体验会受影响、对硬件有要求…

深度推荐系统2019年度阅读收藏清单

一只小狐狸带你解锁NLP/ML/DL秘籍正文来源&#xff1a;深度传送门今天是2020年新年工作第一天&#xff0c;祝大家开工大吉&#xff0c;新的一年一切顺利&#xff0c;诸事躺赢&#xff01;深度传送门也跟很多号主一样&#xff0c;花了点时间分类整理了一下阅读清单&#xff08;包…

手把手教你协方差分析的SPSS操作

手把手教你协方差分析的SPSS操作 2017-04-27 手把手教你协方差分析的SPSS操作 一、问题与数据 某研究将73例脑卒中患者随机分为现代理疗组&#xff08;38例&#xff09;和传统康复疗法组&#xff08;35例&#xff09;进行康复治疗&#xff0c;采用Fugl-Meyer运动功能评分法&a…

我对DevOps的理解

一、DevOps的意图 究竟什么是DevOps? 要想回答这个问题&#xff0c;首先要明确DevOps这个过程参与的人员是谁&#xff1f;即开发团队和IT运维团队&#xff01;那么&#xff0c;DevOps的意图是什么呢&#xff1f;即在两个团队之间&#xff0c;建立良好的沟通和协作&#xff0c;…

【JavaWeb】JavaScript基础篇+高级篇

文章目录1 介绍2 ECMAScript2.1 基本语法2.2 基本对象3 BOM3.1 window窗口对象3.2 location地址栏对象3.3 history历史记录对象4 DOM4.1 概念4.2 核心DOM4.2.1 Document对象4.2.2 Element对象4.2.3 节点对象4.2.4 案例&#xff1a;动态表格4.2.5 内容切换4.2.6 样式设置5 事件5…

万万没想到,我的炼丹炉玩坏了

一只小狐狸带你解锁NLP/ML/DL秘籍作者&#xff1a;夕小瑶前记众所周知&#xff0c;夕小瑶是个做NLP的小可爱。虽然懂点DL框架层知识&#xff0c;懂点CUDA和底层&#xff0c;但是我是做算法的哎&#xff0c;平时debug很少会遇到深度学习框架层的bug&#xff08;上一次还是三年前…

Reactor三种线程模型与Netty线程模型

一、Reactor三种线程模型 1.1、单线程模型 单个线程以非阻塞IO或事件IO处理所有IO事件&#xff0c;包括连接、读、写、异常、关闭等等。单线程Reactor模型基于同步事件分离器来分发事件&#xff0c;这个同步事件分离器&#xff0c;可以看做是一个单线程的while循环。下图描述了…

图解Transformer-一篇文章看懂transformer

原文标题&#xff1a;The Illustrated Transformer 原文链接&#xff1a;https://jalammar.github.io/illustrated-transformer/ 论文地址&#xff1a;https://arxiv.org/abs/1706.03762 前言 Attention这种机制最开始应用于机器翻译的任务中&#xff0c;并且取得了巨大的成就…

【JavaWeb】前端框架之Bootstrap

文章目录1 概念2 快速入门3 响应式布局4 CSS样式和JS插件1 概念 BootStrap是前端开发框架&#xff0c;基于HTML、CSS、JavaScript。 优点&#xff1a; 定义了很多CSS样式和JS插件&#xff0c;可以直接使用。响应式布局&#xff1a;同一套页面可以兼容不同分辨率的设备。 2 快…

号外号外,第一届沙雕项目竞赛,这些项目以数万Star惨获提名

一只小狐狸带你解锁NLP/ML/DL秘籍正文来源&#xff1a; Python空间 好看的皮囊千篇一律&#xff0c;有趣的灵魂没有底线。作为全球最大的同性交友网站&#xff0c;GayHub GitHub 上不止有鲜活的代码&#xff0c;秃头的算法&#xff0c;还有很多拥有有&#xff08;sha&#…

尼克 | 从专家系统到知识图谱

本文节选自尼克老师的《人工智能简史》第 3 章&#xff1a;从专家系统到知识图谱。从第一个专家系统 DENDRAL 到语义网再到谷歌的开源知识图谱&#xff0c;对知识图谱的发展历程进行了全面回顾和深度点评。尼克&#xff0c;早年曾任职哈佛和惠普&#xff1b;后创业投资&#xf…

Google 资深软件工程师 LeetCode 刷题笔记首次公开

BAT 等国内的一线名企&#xff0c;在招聘工程师的过程中&#xff0c;对算法和数据结构都会重点考察。但算法易学难精&#xff0c;我的很多粉丝技术能力不错&#xff0c;但面试时总败在算法这一关&#xff0c;拿不到好 Offer。但说实话&#xff0c;数据结构和算法花点时间&#…

论文浅尝 | Learning with Noise: Supervised Relation Extraction

Luo B, Feng Y, Wang Z, et al. Learning withNoise: Enhance Distantly Supervised Relation Extraction with Dynamic TransitionMatrix[C]// Meeting of the Association for Computational Linguistics.2017:430-439.链接&#xff1a;http://www.aclweb.org/anthology/P/P1…

项目架构之传统三层架构和领域模型三层架构

一、架构之传统三层架构 传统三层架构是一种软件架构&#xff0c;是一种典型的、基于贫血模型的、面向过程的JavaWeb分层方式。该架构分为以下三个层次&#xff1a; 数据访问层&#xff08;DAL - Data Access Layer&#xff09;即对包括数据库在内的数据源进行操作的部分。业务…

限定域文本语料的短语挖掘(Phrase Mining)

一只小狐狸带你解锁NLP/ML/DL秘籍正文来源&#xff1a;丁香园大数据前言短语挖掘&#xff08;Phrase Mining&#xff09;的目的在于从大量的文本语料中提取出高质量的短语&#xff0c;是NLP领域中基础任务之一。短语挖掘主要解决专业领域&#xff08;如医疗、科技等&#xff09…

论文浅尝 | Hike: A Hybrid Human-Machine Method for Entity Alignment

Zhuang Y,Li G, Zhong Z, et al. Hike: A Hybrid Human-Machine Method for Entity Alignmentin Large-Scale Knowledge Bases[C]// ACM, 2017:1917-1926. ( CIKM 2017 )论文链接&#xff1a;http://dbgroup.cs.tsinghua.edu.cn/ligl/crowdalign.pdfMotivation随着语义网络的迅…