9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想

连接池

连接池简述及原理

原始:
9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想
连接池:
9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想

连接池简述及原理

DataSource 由厂商去实现
市面上常见的几种连接池:
DBCP连接池、C3p0连接池、Druid连接池(阿里)

DBCP连接池和c3p0连接池的对比:

Dbcp:效率高,但是安全性一般
C3p0:安全性很高,效率偏低

DBCP连接池

DBCP也是一个开源的连接池,是Apache Common成员之一,在企业开发中也比较常见,tomcat内置的连接池。

DBCP连接池目前市面上极为高效的连接池。
DBCP连接池一秒钟可以创建并传递10万个左右的连接对象。

DBCP安全性并不高,有可能在高速运转丢失连接数据

连接池的使用

导入jar包:
9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想
9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想

配置文件导入

配置文件名称:*.properties
配置文件位置:可存放任意目录,但开发建议src根目录
配置文件内容:properties尽量不要在eclipse中编写中文,容易乱码。如果需要写入中文,建议使用记事本修改内容,可以解决中文乱码问题
9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想

编写连接池工具

9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想
9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想

常见配置项

9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想
9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想
参考文档:
http://commons.apache.org/proper/commons-dbcp/configuration.html
9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想

C3P0连接池

C3P0开源免费的连接池!目前使用它的开源项目有:Spring、Hibernate(mybatis)等。
spring全家桶:spring、springmvc、springdata、springboot、springCloud
项目分成:(MVC模式)
Web:springmvc
业务层:service
dao层:专门和数据库打交道

使用第三方工具需要导入jar包,c3p0使用时还需要添加配置文件 c3p0-config.xml

导入jar包

9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想
9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想

配置文件引入

配置文件名称:c3p0-config.xml (固定)
配置文件位置:src (类路径)
9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想
9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想

编写连接池工具—命名配置

9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想

常见配置项

9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想
9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想
9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想

DBUtils工具

DBUtils是java编程中的数据库操作实用工具,小巧简单实用。
DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码。

Dbutils三个核心功能介绍

  1. QueryRunner中提供对sql语句操作的API.(CRUD增删改查)
  2. ResultSetHandler接口,用于定义select操作后,怎样封装结果集.
  3. DbUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法(事务)

导入一系列jar包:
9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想
9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想
9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想
9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想
导入配置文件 放在src目录下:
9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想

DBUtils核心类-QueryRunner创建

  1. 自动模式:9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想
  2. 手动模式:
    9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想

使用DBUtils核心类完成数据更新操作

9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想
9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想

使用DBUtils核心类完成数据查询操作

9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想
ResultSetHandler 结果集处理程序 ----定义好的接口
9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想
9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想

JavaBean

JavaBean是满足一个特殊格式的Java类。
作用:就是封装数据。
9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想

BeanHandler

应用:根据商品id查询商品、根据用户名密码查询用户
单表查询-封装伪表的第一行数据,会把伪表的第一行数据封装到一个JavaBean中。
9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想会直接使用伪表的字段名 和 setXxx 中 xxx进行对应。 setPid setPname setPrice
如果对应上,正常封装。
否则忽略该数据。
9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想

BeanListHandler

单表查询-封装所有查询数据
9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想
9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想

MapHandler

多表查询-封装整个伪表的第一条数据。封装成一个map集合 map<String,Object>
Key:字段名
Object:字段值
9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想
9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想

MapListHandler

多表查询-将整个伪表数据封装起来。 一行一个map, List
9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想
9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想

ScalarHandler

用于SQL语句运算返回并封装单值----Object
9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想
9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想

事务

事务的应用场景说明

在实际的业务开发中,有些业务操作要多次访问数据库。一个业务要发送多条SQL语句给数据库执行。需要将多次 访问数据库的操作视为一个整体来执行,要么所有的SQL语句全部执行成功。如果其中有一条SQL语句失败,就进行事务的回滚,所有的SQL语句全部执行失败。 例如: jack给tom转账,jack账号减钱,tom账号加钱

操作事务

MYSQL中可以有两种方式进行事务的操作:
自动提交事务:默认
手动提交事务:
9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想

手动提交事务使用步骤:

9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想

回滚点

概述:在某些成功的操作完成之后,后续的操作有可能成功有可能失败,但是不管成功还是失败,前面操作都已经成功, 可以在当前成功的位置设置一个回滚点。可以供后续失败操作返回到该位置,而不是返回所有操作,这个点称之为 回滚点。
设置回滚点语法:
savepoint 回滚点名字
回到回滚点语法:
rollback to 回滚点名字

事务的四大特性(ACID)

9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想

分层思想

9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想9.18 [MySQL] 连接池.DBUtils工具.事务.分层思想

分层

包结构 包名:公司域名的倒写

Com.offcn.domain 实体层(用于封装数据)
Com.offcn.web 控制层(控制和页面数据交互的一层)
Com.offcn.service 业务层(专门写业务)
Com.offcn.dao 数据访问层(专门和数据库打交道)
Com.offcn.utils 专门存放工具类