- 封装已有的数据库链接
以前每次操作数据库时都需要写链接数据库与关闭资源的代码,导致代码冗余,所以我们将其封装,使其便于使用,并降低代码的冗余
例子:
package com.qf.demo01;
import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
public class MyConnectionUtils {
static{
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getConnection(){
Properties properties = new Properties();
InputStream is = MyConnectionUtils.class.getResourceAsStream("DBInfo.properties");
//加载输入流
try {
properties.load(is);
String url = properties.getProperty("url");
String username = properties.getProperty("username");
String password = properties.getProperty("password");
Connection connection = DriverManager.getConnection(url, username, password);
return connection;
} catch (IOException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
public static void close(ResultSet set, Statement statement,Connection connection){
try {
if(set!=null&&!set.isClosed()){
set.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(statement!=null&&!statement.isClosed()){
statement.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(connection!=null&&!connection.isClosed()){
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
对应的配置文件内容
配置文件名DBInfo.properties
配置文件位置:与MyConnection
- JDBC处理事务
方法:
Void setAutocommit(Boolean autocommit)
作用:设置自动提交
参数:是否自动提交,默认为true,需要关闭自动提交将参数设为false.
Void commit()
作用:提交
Void rollback()
作用:回滚
注意:以上方法有数据库链接对象(Connection)提供,除提交或回滚外,当链接关闭后,其中的事情也将被销毁
- 三层架构
分包
Controlle
Service:业务处理
Dao:操作数据库
Bean:对应实体
Utils:工具类
- 数据库连接池
简介
作用:存储与管理数据库链接,帮助我们创建,销毁,复用数据库链接
因为自己封装数据库链接有以下弊端:
优化不足
复用不足
难度较大
所以使用市面上流行的数据库连接池
市面上流行的数据库连接池
C3p0,Druid,Spring带的
综合能力最好的Druid
性能上最好的Spring自带的
Druid的使用
步骤:
- 下载Druid的jar包,下载地址: https://mvnrepository.com/
- 导入jar包,方法与Day29导入数据库链接的方法一致
- 编写代码
DBUtils的使用
- 下载jar包
- 导包
- 编写代码
- 核心类
QueryRunner
方法:
Query:
作用:执行DQL语句,类似于executeQuery方法
Update:
作用:执行DML语句,类似于executeUpdate方法
ResultSetHandler:接口
子类:
BeanHandler:返回一个对象
注意:
Bean类必须提供无参构造函数,如果没有无参构造会报错
Bena类的属性名要与查询的结果名一致,如果名称不一致可能会取不到值
BeanListHandler:返回一个集合
Bean类必须提供无参构造函数,如果没有无参构造会报错
Bena类的属性名要与查询的结果名一致,如果名称不一致可能会取不到值
ScalarHandler:返回一个值