<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                添加事務步驟如下: **1. 啟動類添加注解`@EnableTransactionManagement`開啟事務支持** ```java @SpringBootApplication @MapperScan("com.example.sboot.dao") @EnableTransactionManagement public class SbootApplication { public static void main(String[] args) { SpringApplication.run(SbootApplication.class, args); } } ``` **2. 在service層的方法上添加注解`@Transactional`開啟事務** 你可以在接口方法上添加或者在接口實現類的方法上添加都可以。 ```java public interface StudentService { //在接口的方法上添加 @Transactional int batchInserts(List<Student> studentList); } ``` ```java @Service public class StudentServiceImpl implements StudentService { @Autowired private StudentDao studentDao; @Override @Transactional //或者在接口實現類的方法上添加 public int batchInserts(List<Student> studentList) { for (int i = 0; i < studentList.size(); i++) { Student student = studentList.get(i); if (i == 4) { int d = 10 / 0; //除0異常 } studentDao.insert(student); } return studentList.size(); } } ``` **3. 測試事務效果** ```java @RestController @RequestMapping("/student") public class StudentController { @Autowired private StudentService studentService; @RequestMapping("/batch/insert") public void batchInsert() { List<Student> studentList = new ArrayList<>(1); studentList.add(new Student("李四", 20, "男")); studentList.add(new Student("王五", 21, "男")); studentList.add(new Student("趙六", 22, "男")); studentList.add(new Student("田七", 23, "男")); studentList.add(new Student("周八", 24, "男")); int result = studentService.batchInsert(studentList); System.out.println(result); } } ``` 當插入第4條數據時發生除0異常,查看數據庫沒有被任何修改,事務配置成功。 <br/> 事務其他參數配置:*`org.springframework.transaction.annotationl.Transactional`* ```java @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) public @interface Transactional { @AliasFor("transactionManager") String value() default ""; @AliasFor("value") String transactionManager() default ""; //事務傳播行為:當事務方法被另一個事務方法調用時,指定事務應該如何傳播。 //(1)REQUIRED:如果有事務在運行,當前的方法就在這個事務內運行,否則就啟動一個新的事務,并在自己的事務內運行。 //(2)REQUIRED_NEW:當前方法必須啟動事務,并在它自己的事務內運行,如果有事務正在運行,應該將他掛起。 //(3)SUPPORTS:如果有事務在運行,當前的方法就在這個事務內運行,否則他可以不運行在事務中。 //(4)NOT_SUPPORTE:當前的方法不應該運行在事務中,如果有運行的事務,將他掛起。 //(5)MANDATORY:當前的方法必須運行在事務內部,如果沒有正在運行的事務,就拋出異常。 //(6)NEVER:當前方法不應該運行在事務中,如果有運行的事務,就拋出異常。 //(7)NESTED:如果有事務在運行,當前的方法就應該在這個事物的嵌套事務內運行, // 否則,就啟動一個新的事務,并在它自己的事務內運行。 Propagation propagation() default Propagation.REQUIRED; //事務隔離級別。 //(1)READ_UNCOMMITTED:讀未提交。允許事務A讀取事務B未提交的修改。 //(2)READ_COMMITTED:讀已提交。要求事務A只能讀取事務B已提交的修改。 //(3)REPEATABLE_READ:可重復讀。確保事務A可以多次從一個字段中讀取到相同的值, // 即事務A執行期間禁止其它事務對這個字段進行更新。 //(4)SERIALIZABLE:串行化。確保事務A可以多次從一個表中讀取到相同的行, // 在事務A執行期間,禁止其它事務對這個表進行添加、更新、刪除操作。可以避免任何并發問題,但性能十分低下。 Isolation isolation() default Isolation.DEFAULT; //超時時間:事務需要在一定時間內進行提交,如果不提交進行回滾 //-1為永不超時,以秒單位進行計算。 int timeout() default -1; //是否只讀,false為可以查詢,可以添加修改刪除操作 //讀:查詢操作 //寫:添加修改刪除操作 boolean readOnly() default false; //指定出現哪些異常進行事務回滾 Class<? extends Throwable>[] rollbackFor() default {}; String[] rollbackForClassName() default {}; //指定出現哪些異常不進行事務回滾 Class<? extends Throwable>[] noRollbackFor() default {}; String[] noRollbackForClassName() default {}; } ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看