Java面试题冲刺第三十天–数据库(6)

Java面试题冲刺第三十天--数据库(6)”这篇文章主要介绍了关于数据库中的事务控制及其实现方式等内容。下面是该文章的完整攻略:

事务控制

事务是指在数据库中执行的一个操作序列,这些操作要么全部执行成功,要么全部执行失败,不会出现执行了部分操作后停止的情况。事务控制是指保证事务的正确性和完整性,及其一致性的机制。

事务的ACID特性

  1. 原子性(Atomicity):事务是原子工作单位,事务中的所有操作要么全部成功,要么全部失败撤销,即具有 “原子性” 。

  2. 一致性(Consistency): 在事务开始和完成时,数据都必须保持一致状态,也就是说事务操作前后,数据库都必须处于一致性状态。

  3. 隔离性(Isolation):事务隔离性指的是一个事务在执行的时候,与其他事务是隔离的,执行中的事务数据不会被其他事务看到。

  4. 持久性(Durability):在事务成功完成之后,对数据的改变是持久的,即使发生系统崩溃也不会失去。

事务的实现方式

  1. 编程式事务管理:在代码中进行手动控制事务的提交或回滚操作。适合较小系统和少量数据的操作。

java
// 手动控制事务提交和回滚操作
try {
// 开始事务
conn.setAutoCommit(false);
// 执行SQL语句
// ...
// 提交事务
conn.commit();
} catch (SQLException e) {
e.printStackTrace();
// 回滚事务
if (conn != null) {
try {
conn.rollback();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
} finally {
// 关闭连接
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

  1. 声明式事务管理:在配置文件中进行事务的管理,通过注解或XML文件标识事务边界以及默认事务属性等。适合较大系统和复杂事务处理。

```xml


```

示例演示

以 Spring Boot + MyBatis 实现对用户表的 CRUD 操作为例,演示事务的控制方式:

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    // 编程式事务管理
    @Override
    public void addUser(User user) {
        try {
            // 开始事务
            userMapper.addUser(user);
            userMapper.addUserDetails(user);
            // 提交事务
            DataSourceUtils.getConnection(userMapper.getSqlSession().getConfiguration().getEnvironment().getDataSource()).commit();
            DataSourceUtils.getConnection(userMapper.getSqlSession().getConfiguration().getEnvironment().getDataSource()).setAutoCommit(true);
        } catch (SQLException e) {
            e.printStackTrace();
            // 回滚事务
            if (DataSourceUtils.getConnection(userMapper.getSqlSession().getConfiguration().getEnvironment().getDataSource()) != null) {
                try {
                    DataSourceUtils.getConnection(userMapper.getSqlSession().getConfiguration().getEnvironment().getDataSource()).rollback();
                } catch (SQLException ex) {
                    ex.printStackTrace();
                }
            }
        } finally {
            // 关闭连接
            if (DataSourceUtils.getConnection(userMapper.getSqlSession().getConfiguration().getEnvironment().getDataSource()) != null) {
                try {
                    DataSourceUtils.getConnection(userMapper.getSqlSession().getConfiguration().getEnvironment().getDataSource()).close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    // 声明式事务管理
    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
    @Override
    public void updateUser(User user) {
        userMapper.updateUser(user);
        userMapper.updateUserDetails(user);
    }
}

在编程式事务管理中,通过获取数据库连接对象手动来控制事务的提交和回滚。在声明式事务管理中,通过@Transactional 注解和配置文件等方式, Spring 框架会自动完成事务的开启、提交 与回滚等操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java面试题冲刺第三十天–数据库(6) - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • ActiveMQ简单入门(新手必看篇)

    ActiveMQ简单入门(新手必看篇) ActiveMQ是一个流行的开源消息队列系统,它具有高可用性、高性能、多语言支持等诸多优点,被广泛应用于分布式系统的消息通信场景中。本篇文章将详细讲解ActiveMQ的入门步骤,帮助新手快速上手使用。 安装ActiveMQ 首先需要在官网(http://activemq.apache.org/)上下载ActiveMQ二…

    Java 2023年6月15日
    00
  • Spring Security基本架构与初始化操作流程详解

    Spring Security基本架构与初始化操作流程详解 什么是Spring Security Spring Security是一个基于Spring框架的安全解决方案,主要解决应用程序的认证和授权问题。它提供了一整套安全服务,并可在Web请求级和方法调用级处理身份验证和授权。 Spring Security基本架构 Spring Security的基本架构…

    Java 2023年5月20日
    00
  • Java 操作Properties配置文件详解

    Java操作Properties配置文件详解 在Java开发中,Properties是一种经常使用的配置文件格式。Properties文件是一种键值对的格式,它通常用来存储应用程序的配置信息,比如数据库的连接信息、系统参数等等。 Properties的基本格式 Properties文件通常是一个以.properties为后缀的文本文件,其中每一行都是一个键值…

    Java 2023年5月20日
    00
  • JavaSpringBoot报错“ClassNotFoundException”的原因和处理方法

    原因 “ClassNotFoundException” 错误通常是以下原因引起的: 类路径不正确:如果您的类路径不正确,则可能会出现此错误。在这种情况下,需要检查您的类路径并确保它们正确。 缺少依赖项:如果您的依赖项缺失,则可能会出现此错误。在这种情况下,需要检查您的依赖项并确保它们存在。 解决办法 以下是解决 “ClassNotFoundException…

    Java 2023年5月4日
    00
  • Spring Boot启动过程全面解析(三)

    针对“SpringBoot启动过程全面解析(三)”这篇文章,我将进行以下详细讲解: 1. 文章简介 这篇文章主要讲解Spring Boot应用程序的启动过程。通过分析Spring Boot框架的源代码,介绍了Spring Boot启动时各个关键步骤的实现过程,帮助读者更好地理解Spring Boot框架的运作机制。 2. Spring Boot的静态资源加载…

    Java 2023年5月15日
    00
  • 浅谈JAVA中输入输出流实例详解

    浅谈JAVA中输入输出流实例详解 Java中的输入输出流(IO流)是指用于处理与设备或文件之间的输入输出的一组类和接口。Java中的IO流分为输入流和输出流,输入流主要是将数据从文件或其他设备读入到内存中,输出流主要是将数据从内存中写入到文件或其他设备中。 Java中的输入输出流分类 Java中的输入输出流可以分为四类: 字节流:以字节为单位进行数据传输。字…

    Java 2023年5月26日
    00
  • MyBatis后端对数据库进行增删改查等操作实例

    下面是MyBatis后端对数据库进行增删改查等操作实例的详细攻略: 1. 准备工作 在进行MyBatis操作之前,我们需要准备好以下内容: 数据库:我们需要在本地或远程服务器上搭建好相应的数据库,并在其中创建好表格。 MyBatis环境:我们需要使用Maven或Gradle等工具引入MyBatis相关依赖,并在项目中配置好MyBatis的相关信息,如数据库连…

    Java 2023年5月19日
    00
  • java实现自定义时钟并实现走时功能

    当我们需要在Java程序中实现一个自定义的时钟控制器时,我们可以借助Java中提供的Timer和TimerTask类来实现。具体的步骤和示例如下: 步骤一:创建时钟控制器 首先,我们需要创建一个类来实现我们的时钟控制器,其中需要包含一些必需的属性和方法: public class ClockController { private Timer timer; …

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部