📜  java 事务示例 - Java (1)

📅  最后修改于: 2023-12-03 15:01:33.174000             🧑  作者: Mango

Java事务示例

在开发中,事务是非常常见的概念,特别是在涉及到数据修改的操作中。Java提供了很多方便的方式来处理事务,本文将提供一个Java事务示例,涉及如何使用Spring框架来处理事务。

前置条件
  • 已安装Java及开发环境,推荐使用IntelliJ IDEA作为开发工具。
  • 已安装Maven,用于管理项目依赖。
创建项目
  1. 在IntelliJ IDEA中创建一个新的Maven项目。
  2. 在pom.xml中添加Spring和MySQL的依赖:
<dependencies>  
    <dependency>  
        <groupId>org.springframework</groupId>  
        <artifactId>spring-core</artifactId>  
        <version>5.2.0.RELEASE</version>  
    </dependency>  
    <dependency>  
        <groupId>org.springframework</groupId>  
        <artifactId>spring-jdbc</artifactId>  
        <version>5.2.0.RELEASE</version>  
    </dependency>  
    <dependency>  
        <groupId>org.springframework</groupId>  
        <artifactId>spring-tx</artifactId>  
        <version>5.2.0.RELEASE</version>  
    </dependency>  
    <dependency>  
        <groupId>mysql</groupId>  
        <artifactId>mysql-connector-java</artifactId>  
        <version>8.0.11</version>  
    </dependency>  
</dependencies>  
  1. 在resources文件夹中创建jdbc.properties文件,并添加MySQL数据库配置信息:
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/testdb?useSSL=false
jdbc.username=root
jdbc.password=123456
  1. 在resources文件夹中创建schema.sql文件,并添加创建测试表的SQL语句:
CREATE TABLE `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
  1. 在resources文件夹中创建data.sql文件,并添加测试数据的SQL语句:
INSERT INTO `test` (`name`) VALUES ('aaa'), ('bbb'), ('ccc');
  1. 在src/main/java文件夹中创建com.example.demo包,用于存放Java代码。
编写Java代码
  1. 在com.example.demo包中创建TestDAO接口:
public interface TestDAO {  
    public void insert(String name);  
}
  1. 在com.example.demo包中创建TestDAOImpl类,实现TestDAO接口:
@Repository  
public class TestDAOImpl implements TestDAO {  
    @Autowired  
    private JdbcTemplate jdbcTemplate;  
      
    @Transactional  
    public void insert(String name) {  
        String sql = "insert into test(name) values(?)";  
        jdbcTemplate.update(sql, name);  
    }  
}

注解说明:

  • @Repository:表示该类是一个Spring组件,并将其添加到Spring容器中。
  • @Autowired:表示自动装配JdbcTemplate对象。
  • @Transactional:表示该方法需要事务支持。
  1. 在com.example.demo包中创建TestService接口:
public interface TestService {  
    public void insert(String name);   
}
  1. 在com.example.demo包中创建TestServiceImpl类,实现TestService接口:
@Service  
public class TestServiceImpl implements TestService {  
    
    @Autowired  
    private TestDAO testDAO;  
      
    @Transactional  
    public void insert(String name) {  
        testDAO.insert(name);  
    }  
}

注解说明:

  • @Service:表示该类是一个Spring服务,并将其添加到Spring容器中。
  • @Autowired:表示自动装配TestDAO对象。
  • @Transactional:表示该方法需要事务支持。
  1. 在com.example.demo包中创建App类,用于启动Spring应用程序:
@SpringBootApplication  
public class App {  
  
    public static void main(String[] args) {  
        SpringApplication.run(App.class, args);  
    }  
      
    @Bean  
    public CommandLineRunner commandLineRunner(ApplicationContext ctx) {  
        return args -> {  
            TestService testService = (TestService) ctx.getBean(TestService.class);  
            testService.insert("ddd");  
            List<Map<String, Object>> list =   
                ctx.getBean(JdbcTemplate.class).queryForList("select * from test");  
            for (Map<String, Object> map : list) {  
                System.out.println(map.get("name"));  
            }  
        };  
    }  
}

注解说明:

  • @SpringBootApplication:表示该类是Spring应用程序的入口点。
  • @Bean:表示该方法将生成一个Spring组件,并将其添加到Spring容器中。
  • CommandLineRunner:是一个接口,用于在Spring应用程序启动后执行一些代码。
运行程序
  1. 在IntelliJ IDEA中启动该Spring应用程序。
  2. 检查输出中是否打印了"aaa"、"bbb"、"ccc"和"ddd",表示测试数据已成功插入MySQL数据库中。
总结

本文提供了一个Java事务示例,涉及如何使用Spring框架来处理事务。通过学习本文,可以更好地理解Java的事务概念,以及如何使用Spring框架来有效地处理事务操作。