久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

spring mybatis之聲明式事務(wù)管理初識(小實(shí)例)

 Bladexu的文庫 2017-03-28

前幾篇的文章都只是初步學(xué)習(xí)spring和mybatis框架,所寫的實(shí)例也都非常簡單,所進(jìn)行的數(shù)據(jù)訪問控制也都很簡單,沒有加入事務(wù)管理.這篇文章將初步接觸事務(wù)管理.

1.事務(wù)管理

理解事務(wù)管理之前,,先通過一個例子講一下什么是事務(wù)管理:取錢,。

比如你去ATM機(jī)取1000塊錢,大體有兩個步驟:首先輸入密碼金額,,銀行卡扣掉1000元錢;然后ATM出1000元錢。這兩個步驟必須是要么都執(zhí)行要么都不執(zhí)行。如果銀行卡扣除了1000塊但是ATM出錢失敗的話,,你將會損失1000元;如果銀行卡扣錢失敗但是ATM卻出了1000塊,,那么銀行將損失1000元,。所以,如果一個步驟成功另一個步驟失敗對雙方都不是好事,,如果不管哪一個步驟失敗了以后,,整個取錢過程都能回滾,也就是完全取消所有操作的話,,這對雙方都是極好的,。 事務(wù)就是用來解決類似問題的。事務(wù)是一系列的動作,,它們綜合在一起才是一個完整的工作單元,,這些動作必須全部完成,如果有一個失敗的話,,那么事務(wù)就會回滾到最開始的狀態(tài),,仿佛什么都沒發(fā)生過一樣。 在企業(yè)級應(yīng)用程序開發(fā)中,,事務(wù)管理必不可少的技術(shù),用來確保數(shù)據(jù)的完整性和一致性,。

事務(wù)有四個特性:ACID

  • 原子性(Atomicity):事務(wù)是一個原子操作,,由一系列動作組成。事務(wù)的原子性確保動作要么全部完成,,要么完全不起作用,。
  • 一致性(Consistency):一旦事務(wù)完成(不管成功還是失敗),,系統(tǒng)必須確保它所建模的業(yè)務(wù)處于一致的狀態(tài),,而不會是部分完成部分失敗。在現(xiàn)實(shí)中的數(shù)據(jù)不應(yīng)該被破壞,。
  • 隔離性(Isolation):可能有許多事務(wù)會同時處理相同的數(shù)據(jù),,因此每個事務(wù)都應(yīng)該與其他事務(wù)隔離開來,防止數(shù)據(jù)損壞,。
  • 持久性(Durability):一旦事務(wù)完成,,無論發(fā)生什么系統(tǒng)錯誤,它的結(jié)果都不應(yīng)該受到影響,,這樣就能從任何系統(tǒng)崩潰中恢復(fù)過來,。通常情況下,事務(wù)的結(jié)果被寫到持久化存儲器中。

2.小實(shí)例工程

(1)工程目錄:

spring+mybatis之聲明式事務(wù)管理初識(小實(shí)例)

(2)建立數(shù)據(jù)庫transaction,建立一張user表:

(3)建立User.java類:

package com.gnc.model;public class User { private String id; private String name; public String getId { return id; } public void setId(String id) { this.id = id; } public String getName { return name; } public void setName(String name) { this.name = name; } public User { } public User(String id, String name) { super; this.id = id; this.name = name; }}

(4)建立UserDao.java數(shù)據(jù)訪問接口:

package com.gnc.dao;import java.util.List;import java.util.Map;import com.gnc.model.User;public interface UserDao { public int countAll; public void insertUser(User user); public List getAllUser; public User getById(String id); public void deleteUser(String id); public void updateUser(Map map);}

(5)建立實(shí)現(xiàn)UserDaoImpl.java類:

package com.gnc.daoImpl;import java.util.List;import java.util.Map;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.gnc.dao.UserDao;import com.gnc.mapper.UserMapper;import com.gnc.model.User;@Service('userDao')public class UserDaoImpl implements UserDao { @Autowired private UserMapper userMapper; public int countAll { return this.userMapper.countAll; } @Override public void insertUser(User user) { this.userMapper.insertUser(user); } @Override public List getAllUser { return this.userMapper.getAllUser; } @Override public User getById(String id) { return this.userMapper.getById(id); } @Override public void deleteUser(String id) { this.userMapper.deleteUser(id); } @Override public void updateUser(Map map) { this.userMapper.updateUser(map); }}

(6)建立UserDao接口訪問映射文件UserDaoMapper.xml:

INSERT INTO user(id,name) VALUES(?,?) DELETE FROM user WHERE id=#{value} UPDATE user SET name=#{name} WHERE id=#{id}

(7)建立UserService.java接口類:

package com.gnc.service;import java.util.Map;import com.gnc.model.User;public interface UserService { public int countAll; public void insertUser(User user); public void update_insert(Map map, User user);}

(8)建立UserServiceImpl.java實(shí)現(xiàn)類:

package com.gnc.serviceImpl;import java.util.Map;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.gnc.dao.UserDao;import com.gnc.model.User;import com.gnc.service.UserService;@Service('userService')public class UserServiceImpl implements UserService { @Autowired private UserDao userDao; public int countAll { return this.userDao.countAll; } @Override public void insertUser(User user) { this.userDao.insertUser(user); throw new RuntimeException('Error'); } @Override public void update_insert(Map map, User user) { this.userDao.updateUser(map); this.userDao.insertUser(user); throw new RuntimeException('Error'); }}

(9)建立mybatis配置文件MyBatis-Configuration.xml:

(10)建立數(shù)據(jù)庫配置文件config.properties:

db.driverClass=org.gjt.mm.mysql.Driverdb.jdbcUrl=jdbc:mysql://localhost:3306/transactiondb.user=rootdb.password=geningchao#db.initialPoolSize=20db.maxIdleTime=60db.maxPoolSize=200db.minPoolSize=50#db.acquireIncrement=3db.acquireRetryDelay=1000db.acquireRetryAttempts=30db.breakAfterAcquireFailure=false

(11)建立spring配置文件applicationContext.xml:

(12)建立測試類UserServiceTest.java:

package com.gnc.test;import java.util.HashMap;import java.util.Map;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.gnc.model.User;import com.gnc.service.UserService;public class UserServiceTest { @Test public void userServiceTest{ @SuppressWarnings('resource') ApplicationContext context = new ClassPathXmlApplicationContext('applicationContext.xml'); UserService userService = (UserService)context.getBean('userService'); User user =new User; user.setId('003'); user.setName('櫻木花道'); Map map=new HashMap; map.put('id', '001'); map.put('name', '方舟子'); try { System.out.println(userService.countAll); userService.update_insert(map, user); } catch (Exception e) { e.printStackTrace; } }}

3.工程分析

該工程屬于聲明式事務(wù)管理,事務(wù)管理的主要配置是寫在spring的配置文件當(dāng)中,工程運(yùn)行時,先加載spring配置文件,通過spring配置文件得到mybatis配置文件,得到映射文件,進(jìn)行事務(wù)處理以及書屋管理.但是這種事務(wù)管理方式限制了包的分級結(jié)構(gòu)和函數(shù)名的前綴,所以一般情況下,我們使用注解式事務(wù)管理,注解式事務(wù)管理實(shí)例將在下一章節(jié)給出并進(jìn)行說明!

以上僅是個人觀點(diǎn),若有不對,敬請扶正!

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多