Spring(十四)之编程性事务(续)
发布时间:2020-12-15 07:12:34 所属栏目:Java 来源:网络整理
导读:Spring 编程式事务管理 编程式事务管理方法允许你在对你的源代码编程的帮助下管理事务。这给了你极大地灵活性,但是它很难维护。 在我们开始之前,至少要有两个数据库表,在事务的帮助下我们可以执行多种 CRUD 操作。 ? 一、准备两张表 CREATE TABLE Student
Spring 编程式事务管理编程式事务管理方法允许你在对你的源代码编程的帮助下管理事务。这给了你极大地灵活性,但是它很难维护。 在我们开始之前,至少要有两个数据库表,在事务的帮助下我们可以执行多种 CRUD 操作。 ? 一、准备两张表 CREATE TABLE Student( ID INT NOT NULL AUTO_INCREMENT,NAME VARCHAR(20) NOT NULL,AGE INT NOT NULL,PRIMARY KEY (ID) ); CREATE TABLE Marks( SID INT NOT NULL,MARKS INT NOT NULL,YEAR INT NOT NULL ); ? 二、编写StudentMarks package com.tutorialspoint; public class StudentMarks { private Integer age; String name; Integer id; Integer marks; Integer year; Integer sid; void setAge(Integer age) { this.age = age; } public Integer getAge() { return setName(String name) { this.name = name; } String getName() { setId(Integer id) { this.id = id; } Integer getId() { setMarks(Integer marks) { this.marks = marks; } Integer getMarks() { setYear(Integer year) { this.year = year; } Integer getYear() { setSid(Integer sid) { this.sid = sid; } Integer getSid() { sid; } } ? 三、编写StudentDAO import java.util.List; javax.sql.DataSource; interface StudentDAO { /** * This is the method to be used to initialize * database resources ie. connection. */ setDataSource(DataSource ds); * This is the method to be used to create * a record in the Student and Marks tables. create(String name,Integer age,Integer marks,Integer year); * This is the method to be used to list down * all the records from the Student and Marks tables. public List<StudentMarks> listStudents(); } ? 四、编写StudentMapper.java java.sql.ResultSet; java.sql.SQLException; org.springframework.jdbc.core.RowMapper; class StudentMapper implements RowMapper<Student> { public Student mapRow(ResultSet rs,int rowNum) throws SQLException { Student student = new Student(); student.setId(rs.getInt("id")); student.setName(rs.getString("name")); student.setAge(rs.getInt("age")); student; } } ? 五、编写StudentJDBCTemplate.java org.springframework.dao.DataAccessException; org.springframework.jdbc.core.JdbcTemplate; org.springframework.transaction.PlatformTransactionManager; org.springframework.transaction.TransactionDefinition; org.springframework.transaction.TransactionStatus; org.springframework.transaction.support.DefaultTransactionDefinition; class StudentJDBCTemplate implements DataSource dataSource; JdbcTemplate jdbcTemplateObject; PlatformTransactionManager transactionManager; setDataSource(DataSource dataSource) { this.dataSource = dataSource; this.jdbcTemplateObject = JdbcTemplate(dataSource); } setTransactionManager( PlatformTransactionManager transactionManager) { this.transactionManager = transactionManager; } DefaultTransactionDefinition(); TransactionStatus status = transactionManager.getTransaction(def); try { String SQL1 = "insert into Student (name,age) values (?,?)"; jdbcTemplateObject.update( SQL1,name,age); // Get the latest student id to be used in Marks table String SQL2 = "select max(id) from Student"; int sid = jdbcTemplateObject.queryForInt( SQL2 ); String SQL3 = "insert into Marks(sid,marks,year) " + "values (?,?,1)">; jdbcTemplateObject.update( SQL3,sid,year); System.out.println("Created Name = " + name + ",Age = " + age); transactionManager.commit(status); } catch (DataAccessException e) { System.out.println("Error in creating record,rolling back"); transactionManager.rollback(status); throw e; } ; } listStudents() { String SQL = "select * from Student,Marks where Student.id=Marks.sid"; List <StudentMarks> studentMarks = jdbcTemplateObject.query(SQL, StudentMarksMapper()); studentMarks; } } ? 六、编写MainApp.java org.springframework.context.ApplicationContext; org.springframework.context.support.ClassPathXmlApplicationContext; com.tutorialspoint.StudentJDBCTemplate; MainApp { static main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml"); StudentJDBCTemplate studentJDBCTemplate = (StudentJDBCTemplate)context.getBean("studentJDBCTemplate"); System.out.println("------Records creation--------" ); studentJDBCTemplate.create("Zara",11,99,2010); studentJDBCTemplate.create("Nuha",20,97,1)">); studentJDBCTemplate.create("Ayan",25,100,2011); System.out.println("------Listing all the records--------" ); List<StudentMarks> studentMarks = studentJDBCTemplate.listStudents(); for (StudentMarks record : studentMarks) { System.out.print("ID : " + record.getId() ); System.out.print(",Name : " + record.getName() ); System.out.print(",Marks : " + record.getMarks()); System.out.print(",Year : " + record.getYear()); System.out.println(",Age : " + record.getAge()); } } } ? 七、编写Beans.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http:www.springframework.org/schema/beans/spring-beans-3.0.xsd "> <!-- Initialization for data source --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/test"/> <property name="username" value="root"/> <property name="password" value="1234"/> </bean> <!-- Initialization for TransactionManager --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <!-- Definition for studentJDBCTemplate bean --> <bean id="studentJDBCTemplate" class="com.tutorialspoint.StudentJDBCTemplate"> <property name="dataSource" ref="dataSource" /> <property name="transactionManager" ref="transactionManager" /> </bean> </beans> ? 八、运行MainApp.java 结果如图: 通常情况不报错,就表示没有问题。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |