博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring(十四)之编程性事务(续)
阅读量:7096 次
发布时间:2019-06-28

本文共 6058 字,大约阅读时间需要 20 分钟。

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;   private String name;   private Integer id;   private Integer marks;   private Integer year;   private Integer sid;   public void setAge(Integer age) {      this.age = age;   }   public Integer getAge() {      return age;   }   public void setName(String name) {      this.name = name;   }   public String getName() {      return name;   }   public void setId(Integer id) {      this.id = id;   }   public Integer getId() {      return id;   }   public void setMarks(Integer marks) {      this.marks = marks;   }   public Integer getMarks() {      return marks;   }   public void setYear(Integer year) {      this.year = year;   }   public Integer getYear() {      return year;   }   public void setSid(Integer sid) {      this.sid = sid;   }   public Integer getSid() {      return sid;   }}

 

三、编写StudentDAO

package com.tutorialspoint;import java.util.List;import javax.sql.DataSource;public interface StudentDAO {   /**     * This is the method to be used to initialize    * database resources ie. connection.    */   public void setDataSource(DataSource ds);   /**     * This is the method to be used to create    * a record in the Student and Marks tables.    */   public void 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
listStudents();}

 

四、编写StudentMapper.java

package com.tutorialspoint;import java.sql.ResultSet;import java.sql.SQLException;import org.springframework.jdbc.core.RowMapper;public class StudentMapper implements RowMapper
{ 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")); return student; }}

 

五、编写StudentJDBCTemplate.java

package com.tutorialspoint;import java.util.List;import javax.sql.DataSource;import org.springframework.dao.DataAccessException;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.transaction.PlatformTransactionManager;import org.springframework.transaction.TransactionDefinition;import org.springframework.transaction.TransactionStatus;import org.springframework.transaction.support.DefaultTransactionDefinition;public class StudentJDBCTemplate implements StudentDAO {   private DataSource dataSource;   private JdbcTemplate jdbcTemplateObject;   private PlatformTransactionManager transactionManager;   public void setDataSource(DataSource dataSource) {      this.dataSource = dataSource;      this.jdbcTemplateObject = new JdbcTemplate(dataSource);   }   public void setTransactionManager(      PlatformTransactionManager transactionManager) {      this.transactionManager = transactionManager;   }   public void create(String name, Integer age, Integer marks, Integer year){      TransactionDefinition def = new 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 (?, ?, ?)";         jdbcTemplateObject.update( SQL3, sid, marks, 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;      }      return;   }   public List
listStudents() { String SQL = "select * from Student, Marks where Student.id=Marks.sid"; List
studentMarks = jdbcTemplateObject.query(SQL, new StudentMarksMapper()); return studentMarks; }}

 

六、编写MainApp.java

package com.tutorialspoint;import java.util.List;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.tutorialspoint.StudentJDBCTemplate;public class MainApp {   public static void 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, 2010);      studentJDBCTemplate.create("Ayan", 25, 100, 2011);      System.out.println("------Listing all the records--------" );      List
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

 

八、运行MainApp.java

结果如图:

通常情况不报错,就表示没有问题。

转载地址:http://uoaql.baihongyu.com/

你可能感兴趣的文章
SQLite数据库_实现简单的增删改查
查看>>
批量查询 xml的方式 还一种是表变量
查看>>
Java7/8 中 HashMap 和 ConcurrentHashMap的对比和分析
查看>>
Java 实现多线程切换等待唤醒交替打印奇偶数
查看>>
1077. Kuchiguse (20)
查看>>
HotSpot模板解释器目标代码生成过程源码分析
查看>>
c99标准 数据类型
查看>>
一维最大子数组和(续)
查看>>
Hillstone基础上网配置
查看>>
几种session存储方式比较
查看>>
习惯的颠覆
查看>>
HDOJ 1097 A hard puzzle
查看>>
Linux的关机与重启命令
查看>>
java成员变量和局部变量的初始化和内存中的运行机制
查看>>
NGUI_slider
查看>>
在几何画板上画椭圆可以根据椭圆第二定义
查看>>
Entity Framework技术系列之3:对象-关系映射
查看>>
java基础
查看>>
端口占用查看
查看>>
paramiko模块
查看>>