Spring.Net学习笔记(7)-事务
一、开发环境
操作系统:Win7
编译器:VS2010
二、涉及程序集
Spring.Core.dll
Spring.Data.dll
Common.Logging.dll
三、开发过程
1.项目结构
2.IAccountDao.cs
- namespace Dao
- {
- public interface IAccountDao
- {
- void Create(string name, string userName);
- void Delete(string userName);
- }
- }
3.IUserDao.cs
- namespace Dao
- {
- public interface IUserDao
- {
- void Create(string name, int age);
- void Delete(string name);
- DataSet Get(string name);
- }
- }
4.AccountDao.cs
- namespace Dao
- {
- public class AccountDao : AdoDaoSupport, IAccountDao
- {
- public void Create(string name, string userName)
- {
- AdoTemplate.ExecuteNonQuery(CommandType.Text,
- String.Format("INSERT INTO T_Account (UserName, AccountName) VALUES ('{0}', '{1}')", userName, name));
- }
- public void Delete(string userName)
- {
- AdoTemplate.ExecuteNonQuery(CommandType.Text,
- String.Format("DELETE FROM T_Account WHERE UserName = '{0}'", userName));
- }
- }
- }
5.UserDao.cs
- namespace Dao
- {
- public class UserDao : AdoDaoSupport, IUserDao
- {
- public void Create(string name, int age)
- {
- AdoTemplate.ExecuteNonQuery(CommandType.Text,
- string.Format("INSERT INTO T_User (UserName, UserAge) VALUES ('{0}', {1})", name, age));
- }
- public void Delete(string name)
- {
- AdoTemplate.ExecuteNonQuery(CommandType.Text,
- string.Format("DELETE FROM T_User WHERE UserName = '{0}'", name));
- }
- public DataSet Get(string name)
- {
- return AdoTemplate.DataSetCreate(CommandType.Text,
- string.Format("SELECT * FROM T_User WHERE UserName = '{0}'", name));
- }
- }
- }
6.IUserService.cs
- namespace Service
- {
- public interface IUserService
- {
- void SaveData(string name, int age, string accountName);
- void DeleteData(string name);
- DataSet Get(string name);
- }
- }
7.UserService.cs
- namespace Service
- {
- public class UserService : IUserService
- {
- public IUserDao UserDao { get; set; }
- public IAccountDao AccountDao { get; set; }
- [Transaction]
- public void SaveData(string name, int age, string accountName)
- {
- UserDao.Create(name, age);
- AccountDao.Create(accountName, name);
- }
- [Transaction]
- public void DeleteData(string name)
- {
- UserDao.Delete(name);
- throw new Exception("测试数据是否回滚");
- AccountDao.Delete(name);
- }
- [Transaction(ReadOnly = true)]
- public DataSet Get(string name)
- {
- return UserDao.Get(name);
- }
- }
- }
8.App.config

- <?xml version="1.0" encoding="utf-8" ?>
- <configuration>
- <configSections>
- <sectionGroup name="spring">
- <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>
- <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core"/>
- <section name="parsers" type="Spring.Context.Support.NamespaceParsersSectionHandler, Spring.Core"/>
- </sectionGroup>
- </configSections>
- <spring>
- <parsers>
- <parser type="Spring.Data.Config.DatabaseNamespaceParser, Spring.Data"/>
- <parser type="Spring.Transaction.Config.TxNamespaceParser, Spring.Data"/>
- </parsers>
- <context>
- <!--<resource uri="assembly://Dao/Dao/Dao.xml"/>-->
- <resource uri="config://spring/objects"></resource>
- </context>
- <objects xmlns="http://www.springframework.net"
- xmlns:db="http://www.springframework.net/database"
- xmlns:tx="http://www.springframework.net/tx">
- <db:provider id="DbProvider"
- provider="SqlServer-1.1"
- connectionString="Server=(local);Database=CIS;Uid=sa;Pwd=woaini;Trusted_Connection=False"/>
- <object id="userDao" type="Dao.UserDao, Dao">
- <property name="AdoTemplate" ref="adoTemplate"/>
- </object>
- <object id="accountDao" type="Dao.AccountDao, Dao">
- <property name="AdoTemplate" ref="adoTemplate"/>
- </object>
- <object id="userService" type="Service.UserService, Service">
- <property name="UserDao" ref="userDao"/>
- <property name="AccountDao" ref="accountDao"/>
- </object>
- <object id="adoTemplate" type="Spring.Data.Core.AdoTemplate, Spring.Data">
- <property name="DbProvider" ref="DbProvider"/>
- <property name="DataReaderWrapperType" value="Spring.Data.Support.NullMappingDataReader, Spring.Data"/>
- </object>
- <!--事务管理器-->
- <object id="transactionManager"
- type="Spring.Data.Core.AdoPlatformTransactionManager, Spring.Data">
- <property name="DbProvider" ref="DbProvider"/>
- </object>
- <!--事务切面-->
- <tx:attribute-driven/>
- </objects>
- </spring>
- </configuration>
9.控制台文件

- namespace SpringNetTrans
- {
- class Program
- {
- static void Main(string[] args)
- {
- AdoTransaction();
- Console.ReadKey();
- }
- public static void AdoTransaction()
- {
- IApplicationContext ctx = ContextRegistry.GetContext();
- IUserService service = (IUserService)ctx.GetObject("userService");
- service.SaveData("Kimisme", 27, "1233456");
- }
- public static void AdoDeleteTransaction()
- {
- IApplicationContext ctx = ContextRegistry.GetContext();
- IUserService service = (IUserService)ctx.GetObject("userService");
- service.DeleteData("Kimisme");
- }
- }
- }
Spring.Net学习笔记(7)-事务的更多相关文章
- 【转】Spring.NET学习笔记——目录
目录 前言 Spring.NET学习笔记——前言 第一阶段:控制反转与依赖注入IoC&DI Spring.NET学习笔记1——控制反转(基础篇) Level 200 Spring.NET学习笔 ...
- Spring.NET学习笔记——目录(原)
目录 前言 Spring.NET学习笔记——前言 第一阶段:控制反转与依赖注入IoC&DI Spring.NET学习笔记1——控制反转(基础篇) Level 200 Spring.NET学习笔 ...
- Spring Boot学习笔记2——基本使用之最佳实践[z]
前言 在上一篇文章Spring Boot 学习笔记1——初体验之3分钟启动你的Web应用已经对Spring Boot的基本体系与基本使用进行了学习,本文主要目的是更加进一步的来说明对于Spring B ...
- Spring框架学习笔记(1)
Spring 框架学习笔记(1) 一.简介 Rod Johnson(spring之父) Spring是分层的Java SE/EE应用 full-stack(服务端的全栈)轻量级(跟EJB比)开源框架, ...
- 软件测试之loadrunner学习笔记-01事务
loadrunner学习笔记-01事务<转载至网络> 事务又称为Transaction,事务是一个点为了衡量某个action的性能,需要在开始和结束位置插入一个范围,定义这样一个事务. 作 ...
- WCF学习笔记之事务编程
WCF学习笔记之事务编程 一:WCF事务设置 事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元: WCF通过System.ServiceModel.TransactionFlowA ...
- Spring MVC 学习笔记一 HelloWorld
Spring MVC 学习笔记一 HelloWorld Spring MVC 的使用可以按照以下步骤进行(使用Eclipse): 加入JAR包 在web.xml中配置DispatcherServlet ...
- SpringBoot + Spring Security 学习笔记(五)实现短信验证码+登录功能
在 Spring Security 中基于表单的认证模式,默认就是密码帐号登录认证,那么对于短信验证码+登录的方式,Spring Security 没有现成的接口可以使用,所以需要自己的封装一个类似的 ...
- SpringBoot + Spring Security 学习笔记(三)实现图片验证码认证
整体实现逻辑 前端在登录页面时,自动从后台获取最新的验证码图片 服务器接收获取生成验证码请求,生成验证码和对应的图片,图片响应回前端,验证码保存一份到服务器的 session 中 前端用户登录时携带当 ...
随机推荐
- 编程精粹--编写高质量C语言代码(3):自己设计并使用断言(二)
接着上一遍文章<<编程精粹--编写高质量C语言代码(2):自己设计并使用断言(一)>>,继续学习怎样自己设计并使用断言,来更加easy,更加不费力地自己主动寻找出程序中的错误. ...
- <a href="javascript:;"></a>
有时会在网页a标签中看到这样的代码,比如: <a href="javascript:;">反选</a> 这是啥意思呢? 我们知道标签的 href属性用于指定 ...
- react 项目实战(八)图书管理与自动完成
图书管理 src / pages / BookAdd.js // 图书添加页 /** * 图书添加页面 */ import React from 'react'; // 布局组件 import H ...
- Android之——jni通用工具方法
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47002207 1.将java字符串转化为c++字符串 /** *工具方法 *将ja ...
- WEB安全实战(四)关于 Cookie
前言 这几天中,一直再跟漏洞打交道,而在这些漏洞中,出现的最多的就是 Cookie 和 Session 了.这篇文章就简单的介绍一些 Cookie 中最经常使用的四个属性.也算是为兴许的文章做一个铺垫 ...
- HDU 3308 线段树单点更新+区间查找最长连续子序列
LCIS Time Limit: 6000/2000 MS (Java/Oth ...
- ios28--UIScrollView
// // ViewController.m // UIScrollVIew #import "ViewController.h" @interface ViewControlle ...
- HttpClient-03Http状态管理
最初,Http被设计成一个无状态的,面向请求/响应的协议,所以它不能在逻辑相关的http请求/响应中保持状态会话.由于越来越多的系统使用http协议,其中包括http从来没有想支持的系统,比如电子商务 ...
- Bootstrap4 网格系统
学习注意事项 col-*-* 第一个*是设备类型,第二个*是控件宽度的占比 屏幕被等分为12,col-1宽度是1/12,col-6宽度是50%,col-12宽度是100% 给应用了class的elem ...
- ubuntu安装Android Studio
参考 https://developer.android.com/guide/?hl=zh-CN 下载 https://developer.android.com/studio/?hl=zh-CN 解 ...