1月15日java假期学习读书笔记

一、学习目标
深入理解事务管理:掌握事务的隔离级别及其应用场景。
学习批量操作:通过PreparedStatement实现批量插入和更新。
了解连接池的使用:学习如何使用连接池优化数据库连接管理。
二、学习内容
(一)事务管理的深入学习
事务的隔离级别
READ UNCOMMITTED(未提交读):最低隔离级别,允许读取未提交的数据,可能出现脏读、不可重复读和幻读。
READ COMMITTED(已提交读):只能读取已提交的数据,避免脏读,但可能出现不可重复读和幻读。
REPEATABLE READ(可重复读):保证在同一个事务中多次读取同样记录的结果是一致的,避免不可重复读,但可能出现幻读。
SERIALIZABLE(串行化):最高隔离级别,完全隔离并发事务,避免脏读、不可重复读和幻读,但性能开销最大。
设置事务隔离级别
在JDBC中,可以通过Connection对象设置事务隔离级别:
java
复制
connection.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
示例代码
设置隔离级别并执行事务:
java
复制
connection.setAutoCommit(false); // 关闭自动提交
connection.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ); // 设置隔离级别

try {
String insertSql = "INSERT INTO students (name, age) VALUES (?, ?)";
PreparedStatement pstmt = connection.prepareStatement(insertSql);
pstmt.setString(1, "David");
pstmt.setInt(2, 25);
pstmt.executeUpdate();

String updateSql = "UPDATE students SET age = ? WHERE name = ?";
PreparedStatement updateStmt = connection.prepareStatement(updateSql);
updateStmt.setInt(1, 26);
updateStmt.setString(2, "David");
updateStmt.executeUpdate();

connection.commit(); // 提交事务
System.out.println("事务提交成功!");

} catch (Exception e) {
connection.rollback(); // 回滚事务
System.out.println("事务回滚!");
e.printStackTrace();
} finally {
connection.setAutoCommit(true); // 恢复自动提交
}
(二)批量操作
批量插入和更新
使用PreparedStatement的addBatch()和executeBatch()方法可以实现批量操作,提高性能。
示例代码
批量插入数据:
java
复制
String insertSql = "INSERT INTO students (name, age) VALUES (?, ?)";
PreparedStatement pstmt = connection.prepareStatement(insertSql);

pstmt.setString(1, "Eve");
pstmt.setInt(2, 27);
pstmt.addBatch();

pstmt.setString(1, "Frank");
pstmt.setInt(2, 28);
pstmt.addBatch();

int[] result = pstmt.executeBatch(); // 执行批量操作
System.out.println("批量插入成功,影响行数:" + Arrays.toString(result));
批量更新数据:
java
复制
String updateSql = "UPDATE students SET age = ? WHERE name = ?";
PreparedStatement updateStmt = connection.prepareStatement(updateSql);

updateStmt.setInt(1, 29);
updateStmt.setString(2, "Eve");
updateStmt.addBatch();

updateStmt.setInt(1, 30);
updateStmt.setString(2, "Frank");
updateStmt.addBatch();

int[] result = updateStmt.executeBatch();
System.out.println("批量更新成功,影响行数:" + Arrays.toString(result));
(三)连接池的使用
什么是连接池?
连接池是一种资源管理技术,用于管理数据库连接的生命周期,提高连接的复用性,减少连接创建和销毁的开销。
常见的连接池
DBCP(Apache Commons DBCP)
C3P0
HikariCP(推荐):性能优异,是Spring Boot的默认连接池。
使用HikariCP
添加依赖(Maven):
xml
复制

com.zaxxer
HikariCP
5.0.0

配置连接池并获取连接:
java
复制
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/mydatabase");
config.setUsername("root");
config.setPassword("password");
config.setMaximumPoolSize(10); // 设置最大连接数

HikariDataSource dataSource = new HikariDataSource(config);
Connection connection = dataSource.getConnection();
三、学习心得
事务隔离级别的选择:
不同的隔离级别适用于不同的业务场景。在实际开发中,需要根据具体需求选择合适的隔离级别。
高隔离级别虽然更安全,但可能会导致性能下降和并发问题。
批量操作的优势:
使用PreparedStatement的批量操作可以显著提高性能,尤其是在处理大量数据时。
批量操作减少了网络交互次数,提高了数据库的吞吐量。
连接池的重要性:
连接池可以有效管理数据库连接,提高连接的复用性,减少资源浪费。
HikariCP是目前性能最好的连接池之一,推荐在项目中使用。
实践的重要性:
通过实际编写代码,我更好地理解了事务管理、批量操作和连接池的使用方法。
练习是巩固知识的最佳方式。

posted @   头发少的文不识  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示