加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

结果如图:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读