`
amosleaf
  • 浏览: 60250 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Nutz的 数据库事务

    博客分类:
  • Nutz
阅读更多

鄙人原本打算对nutz做一个顺序的介绍,zozoh知道后就说:“你这么做不是很有必要,因为用户不如去看wiki,refrence 或者 manual ”。你怎么想呢? 我觉得他说的有道理,于是决定按照乱针绣(一种刺绣针法)的方式来介绍,和大家来交流对nutz的使用和看法。

1.数据库事务
 数据库的事务是作为单个逻辑工作单元执行的一系列操作。一个逻辑工作单元必须有四个属性,称为原子性、一致性、隔离性和持久性 (ACID) 属性,只有这样才能成为一个事务。一般来讲,隔离性是通过锁机制来实现,而其他三个特性通过日志机制实现。
 当一个数据库的某些数据由多个客户端并发访问操作的时候,可能会出现一系列的问题:(1)脏读(dirty read),(2)不可重复读(unrepeatable read),(3)幻象读(phantom read),(4)丢失更新

2.使用Nutz来处理事务
 在nutz中使用一个类org.nutz.trans.Trans来处理事务,使用方式如下:

  //TODO 选择事务级别 
  int level=Connection.TRANSACTION_SERIALIZABLE;
  Trans.exec(level, new Atom(){
   @Override
   public void run() {
    //TODO 事务内的操作逻辑
   }   
  });

   
  当然你也可是使用如下默认方式:

  Trans.exec(new Atom(){
   @Override
   public void run() {
    //TODO 
   }
  });

 
  在这种情况下,level默认是Connection.TRANSACTION_READ_COMMITTED
  注:如果你使用jdbc来直接操作事务,当然你可以在某一个位置设置保存点,如果事务失败,可以回滚到那个点,在nutz中整个事务要么成功,要么失败,全部回滚。如果你希望使用savepoint改怎么办呢,你可以这么用:

  Dao dao=null;
  dao.run(new ConnCallback(){
   @Override
   public void invoke(Connection conn) throws Exception {
    // TODO 在这里面使用Connection来操作   
   }   
  });

  
  Nutz没有提供其他的接口给用户设置SavePoint,当您使用的时候如果有这种需求,那么请告诉我或者直接给nutz报Bug.
  
    
3.ThreadLocal
 Nutz在实现Trans这个类的时候用到了ThreadLcoal(方便了使用者存储变量到当前线程。),用来存储用户的每一次事务动作。具体实现请参见源代码类org.nutz.trans.Trans。 
 

参考文档:

(1)http://www.iteye.com/topic/103804?page=1

(2)http://hi.baidu.com/splendor518/blog/item/59ea983089567593a8018e34.html

2
1
分享到:
评论
5 楼 hhxyjsj 2012-06-16  
是不是应该为事务加一个返回值,要么执行的成不成功都不清楚!
4 楼 cosmo1987 2012-02-14  
那如果rollback失败了抛出SQLException异常,捕获后应该如何处理呢?
3 楼 nwangwei 2010-01-10  
Trans.exec(level, new Atom(){  
@Override 
public void run() {  
  //TODO 事务内的操作逻辑  
}     
});

我觉得可能是匿名类的缘故,很多人不适应这种使用方法。根本的解决方法还是改变Java的语法,呵呵,比如把Function当作一等公民。
2 楼 amosleaf 2010-01-04  
@lovemylover:仅仅是写法原因?还是有其他原因,原闻其详。
1 楼 lovemylover 2009-12-30  
这种写法真的很不爽,当用习惯了Spring的事务处理方式之后,我再也不愿意手动开启Transaction

相关推荐

    nutz需要的jar包

    `nutz-dao`包含的jar包如`jdbc-driver`,用于连接不同的数据库,而`nutz-runtimex`则提供了运行时环境的扩展功能,如异常处理和缓存管理。 另外,`nutz-mvc`是Nutz的模型视图控制器组件,它负责处理HTTP请求并将其...

    nutz代码生成器

    【Nutz代码生成器】是基于Nutz框架开发的一款实用工具,主要用于自动化生成Action和实体类代码,极大地提高了...在实际开发中,结合Nutz的其他特性,如事务管理、拦截器、插件等,可以构建出更加高效稳定的Web应用。

    使用Nutz[1.b.38]对数据库表的CRUD操作

    Nutz是一个轻量级且功能强大的Java框架,它提供了全面的数据访问支持,包括对数据库的操作。在本教程中,我们将深入探讨如何使用Nutz 1.b.38版本进行数据库表的CRUD操作。 首先,Nutz的核心组件Nutz DAO(Data ...

    nutz学习资料2

    3. **AOP(Aspect-Oriented Programming)**:Nutz支持面向切面编程,方便进行日志记录、事务管理等横切关注点的处理。 4. **SQL支持**:Nutz提供了强大的数据库操作API,可以方便地进行SQL查询和结果映射。 5. **...

    nutz框架使用手册.zip

    它使用简单的API来执行SQL语句,支持动态SQL,事务控制,以及实体对象与数据库表的映射,极大地简化了数据库操作。 3. **Nutz MVC**:Nutz MVC是构建Web应用的模块,它处理HTTP请求,将请求分发给相应的控制器,...

    wendal-nutz-master.zip

    3. **AoP(Aspect-Oriented Programming)**:NUTZ的AOP模块支持切面编程,允许开发者定义横切关注点,如日志记录、事务管理,这些关注点可以被编织到业务逻辑中。 4. **MVC(Model-View-Controller)**:NUTZ提供...

    在Nutz[1.b.38]中使用视图对关联数据表的操作

    Nutz 是一个轻量级的Java框架,它提供了丰富的功能来支持数据库操作,包括视图的使用。视图在数据库设计中扮演着重要角色,允许开发者以简化的方式查询多个相关表的数据,而无需每次都进行复杂的联接操作。这篇博客...

    nutz迷你项目

    5. **AOP(面向切面编程)**:Nutz集成的AOP功能,可以方便地进行日志记录、事务管理等通用逻辑的编写。 6. **缓存管理**:Nutz支持多种缓存策略,如本地缓存和分布式缓存,提高应用程序的响应速度。 7. **异常...

    Nutz开发用到的jar包

    Nutz DAO提供了简单易用的API,用于执行SQL查询、事务管理等操作,支持多种数据库类型,如MySQL、Oracle、PostgreSQL等。 4. **依赖注入(IoC)**:Nutz也实现了依赖注入的概念,允许开发者通过配置或注解来管理...

    nutz 初体验

    例如,Nutz-orm模块负责数据库操作,Nutz-aop模块处理切面逻辑,Nutz-ioc则负责对象的生命周期管理。这种设计使得开发者可以根据实际需求选择性地引入相关模块,避免了不必要的性能开销。 在实际开发中,Nutz的使用...

    nutz-1.b.52.zip

    Dao -- 针对 JDBC 的薄封装,事务模板,无缓存 Ioc -- JSON 风格的配置文件,声明时切片支持 Mvc -- 注解风格的配置,内置多文件上传功能 Json -- 解析和渲染 Castors -- Java 对象类型转换 Lang -- 更简洁的 Java ...

    Nutz的插件与集成库-nutzmore

    1. **ORM(对象关系映射)**:Nutz ORM提供了强大的数据库操作支持,包括SQL构建、事务管理、缓存机制等。通过Nutzmore,你可以找到更多定制化的ORM解决方案,如更灵活的查询构造器或特定数据库的适配器。 2. **Web...

    nutz-1.b.48-manual.pdf 文档

    Nutz的Dao模块提供针对JDBC的薄封装、事务模板和无缓存支持,为数据库操作带来了便捷。Ioc模块采用JSON风格的配置文件,支持声明式切片,使得依赖注入更为简洁。Mvc模块则采用注解风格的配置,内置了多文件上传功能...

    springboot+nutz+beetl整合工程

    Nutz可以自动映射Java对象到数据库表,支持SQL编写、事务管理等功能。在本项目中,`dao层`的实现将基于Nutz,通过其提供的注解和API来实现对数据库的操作,如增删改查等。 再来看Beetl,这是一款高性能的Java模板...

    nutz学习资料4

    3. **Nutz DAO**:详细介绍Nutz的数据库操作API,包括SQL的动态生成、事务管理、缓存策略等。 4. **Nutz插件**:Nutz有丰富的插件系统,如WebSocket支持、RESTful API生成、JSON序列化等,这些可能会在资料中有所...

    nutz pdf学习文档

    例如,Nutz.Dao提供了针对JDBC的薄封装、事务模板,以及无缓存处理,这为需要直接操作JDBC的场景提供了极大的便利。Nutz.Ioc支持JSON风格的配置文件和声明式的切片支持,它使得依赖注入变得更加简单。Nutz.Mvc则采用...

    nutz-jar包,20170512

    4. **数据库操作**:Nutz提供了强大的ORM(Object-Relational Mapping)工具,能够将Java对象映射到数据库表,简化数据库访问。它支持SQL动态执行、事务管理,以及多种数据库方言。 5. **插件机制**:Nutz拥有灵活...

    有关Nutz工程

    Nutz ORM支持多种数据库,如MySQL、Oracle、SQL Server等,并且提供了事务管理、数据缓存等功能,增强了系统的稳定性和性能。 在MVC模式下,Nutz提供了Controller、Service、DAO三层架构,使得业务逻辑与视图层分离...

    nutz-master

    2. **DAO支持**:Nutz的DAO模块是其数据库操作的核心,支持多种数据库(如MySQL、Oracle等),提供了SQL执行、事务管理、对象关系映射等功能。通过简单的配置和注解,开发者可以方便地进行数据库操作。 3. **Ioc...

Global site tag (gtag.js) - Google Analytics