一、开发环境

操作系统: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)-事务的更多相关文章

  1. 【转】Spring.NET学习笔记——目录

    目录 前言 Spring.NET学习笔记——前言 第一阶段:控制反转与依赖注入IoC&DI Spring.NET学习笔记1——控制反转(基础篇) Level 200 Spring.NET学习笔 ...

  2. Spring.NET学习笔记——目录(原)

    目录 前言 Spring.NET学习笔记——前言 第一阶段:控制反转与依赖注入IoC&DI Spring.NET学习笔记1——控制反转(基础篇) Level 200 Spring.NET学习笔 ...

  3. Spring Boot学习笔记2——基本使用之最佳实践[z]

    前言 在上一篇文章Spring Boot 学习笔记1——初体验之3分钟启动你的Web应用已经对Spring Boot的基本体系与基本使用进行了学习,本文主要目的是更加进一步的来说明对于Spring B ...

  4. Spring框架学习笔记(1)

    Spring 框架学习笔记(1) 一.简介 Rod Johnson(spring之父) Spring是分层的Java SE/EE应用 full-stack(服务端的全栈)轻量级(跟EJB比)开源框架, ...

  5. 软件测试之loadrunner学习笔记-01事务

    loadrunner学习笔记-01事务<转载至网络> 事务又称为Transaction,事务是一个点为了衡量某个action的性能,需要在开始和结束位置插入一个范围,定义这样一个事务. 作 ...

  6. WCF学习笔记之事务编程

    WCF学习笔记之事务编程 一:WCF事务设置 事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元: WCF通过System.ServiceModel.TransactionFlowA ...

  7. Spring MVC 学习笔记一 HelloWorld

    Spring MVC 学习笔记一 HelloWorld Spring MVC 的使用可以按照以下步骤进行(使用Eclipse): 加入JAR包 在web.xml中配置DispatcherServlet ...

  8. SpringBoot + Spring Security 学习笔记(五)实现短信验证码+登录功能

    在 Spring Security 中基于表单的认证模式,默认就是密码帐号登录认证,那么对于短信验证码+登录的方式,Spring Security 没有现成的接口可以使用,所以需要自己的封装一个类似的 ...

  9. SpringBoot + Spring Security 学习笔记(三)实现图片验证码认证

    整体实现逻辑 前端在登录页面时,自动从后台获取最新的验证码图片 服务器接收获取生成验证码请求,生成验证码和对应的图片,图片响应回前端,验证码保存一份到服务器的 session 中 前端用户登录时携带当 ...

随机推荐

  1. Ubuntu 16.04错误:正在读取软件包列表... 有错误! E: Encountered a section with no Package: header E: Problem with MergeList /var/lib/apt/lists/ppa.launchpad.net_t-tujikawa_ppa_ubuntu_dists_xenial_main_i18n_Translatio

    错误: 正在读取软件包列表... 有错误! E: Encountered a section with no Package: header E: Problem with MergeList /va ...

  2. MongoDB小结04 - update【$inc】

    update方法很强大,它有两个参数,一是查询文档,用来找出需要更新的文档,另一个是修改器(modifier)文档,描述对找到的文档做哪些修改. 亮点 更新操作是原子的,若两个更新同时发生,先到达服务 ...

  3. SAS学习笔记 - 基本原理与概念

    1.赋值符号 由一个尖括号和一个符号组成,可以从左到右也可以从右到左,即“->”或者“<-”. 赋值号也可以使用等号“=”. 如果对象已经存在,那么原先的值会被覆盖.除了可以赋一个数值,还 ...

  4. Cookies 初识 Dotnetspider EF 6.x、EF Core实现dynamic动态查询和EF Core注入多个上下文实例池你知道有什么问题? EntityFramework Core 运行dotnet ef命令迁移背后本质是什么?(EF Core迁移原理)

    Cookies   1.创建HttpCookies Cookie=new HttpCookies("CookieName");2.添加内容Cookie.Values.Add(&qu ...

  5. ios7 UIBarButtonItem 默认蓝色

    [self.navigationItem setLeftBarButtonItem:leftButton]; 这样设置在ios7上button默认是蓝色 解决方法: leftButton.tintCo ...

  6. POJ 1651 Multiplication Puzzle 区间dp(水

    题目链接:id=1651">点击打开链 题意: 给定一个数组,每次能够选择内部的一个数 i 消除,获得的价值就是 a[i-1] * a[i] * a[i+1] 问最小价值 思路: dp ...

  7. 后台发送http请求通用方法,包括get和post

    package com.examsafety.service.sh; import java.io.BufferedReader; import java.io.IOException; import ...

  8. HDU4403 A very hard Aoshu problem DFS

    A very hard Aoshu problem                           Time Limit: 2000/1000 MS (Java/Others)    Memory ...

  9. text recognizer (OCR) Engine 光学字符识别

    https://github.com/tesseract-ocr/tesseract/wiki https://github.com/UB-Mannheim/tesseract/wiki C:\Use ...

  10. Centos7 防火墙firewalld配置

    开启80端口 firewall-cmd --zone=public --add-port=80/tcp --permanent  出现success表明添加成功 移除某个端口 firewall-cmd ...