`
soltex
  • 浏览: 10362 次
  • 来自: ...
社区版块
存档分类
最新评论

菜鸟请教业务层--事务控制

阅读更多
环境:struts +  hibernate

HibernateUtil创建管理Session

Filter 来实现关闭Session

/*
DAO 层
*/

public class UserDAOImpl implements IUserDAO {

private Session s;

public UserDaoImpl(){
this.s = HibernateUtil.getCurrentSession();
}
public void add(PoUser user){
this.session.save(user);
}

public void update(PoUser user){
this.session.save(user);
}
.
.
.
.
.
//
}


//那么我的业务层怎么实现控制事务呢

public class UserServiceImpl implements IUserService {

public addUser(UserDTO user){
//怎么控制事务呢?
//先看用户名是否重复,然后在添加
}

.
.
.
.
}

请指教。。谢谢各位大侠。。:(
分享到:
评论
2 楼 soltex 2007-08-28  
但是如果说是不用Spring来管理事务的话,我该怎么实现呢 ?

我在网上看到一片文章,写道:
业务层应该不应该出现事务控制代码 这个问题已经在业界达成共识:业务层绝对不应该出现事务控制代码,严格的说不应该出现与业务无关的代码。

如果不用Spring的话,是不是就必须在业务层出现事务管理的代码呢 ?



1 楼 smalltiger1984 2007-08-28  
<font>事务处理一般靠现有的框架去做,比如Spring<br/>
我是这样写的:<br/>
<div class='code_title'>java 代码</div>
<div class='dp-highlighter'>
<div class='bar'/>
<ol class='dp-j'>
    <li class='alt'><span><span class='keyword'>public</span><span> UserBO getUserByNameAndPwd(</span><span class='keyword'>final</span><span> String username, </span><span class='keyword'>final</span><span> String pwd) {   </span></span></li>
    <li class=''><span>  </span><span class='keyword'>return</span><span> (UserBO) getHibernateTemplate().execute(</span><span class='keyword'>new</span><span> HibernateCallback() {   </span></li>
    <li class='alt'><span>   </span><span class='keyword'>public</span><span> Object doInHibernate(Session session)   </span></li>
    <li class=''><span>     </span><span class='keyword'>throws</span><span> HibernateException {   </span></li>
    <li class='alt'><span>    Query query = session   </span></li>
    <li class=''><span>      .createQuery(</span><span class='string'>"from UserBO u where u.userName=? and u.userPwd=?"</span><span>);   </span></li>
    <li class='alt'><span>    query.setString(</span><span class='number'>0</span><span>, username);   </span></li>
    <li class=''><span>    query.setString(</span><span class='number'>1</span><span>, pwd);   </span></li>
    <li class='alt'><span>    UserBO index = (UserBO) query.uniqueResult();   </span></li>
    <li class=''><span>    </span><span class='keyword'>return</span><span> index;   </span></li>
    <li class='alt'><span>   }   </span></li>
    <li class=''><span>  }, </span><span class='keyword'>true</span><span>);   </span></li>
    <li class='alt'><span> }  </span></li>
</ol>
</div>
<div class='code_title'>xml 代码</div>
<div class='dp-highlighter'>
<div class='bar'/>
<ol class='dp-xml'>
    <li class='alt'><span><span class='tag'>&lt;</span><span class='tag-name'>bean</span><span> </span><span class='attribute'>id</span><span>=</span><span class='attribute-value'>"GoodsDAO"</span><span> </span><span class='attribute'>class</span><span>=</span><span class='attribute-value'>"com.maidong.mobile.goods.dao.GoodsDAOImpl"</span><span class='tag'>&gt;</span><span class='comments'>&lt;!--注入sessionFactory--&gt;</span><span>  </span></span></li>
    <li class=''><span>        </span><span class='tag'>&lt;</span><span class='tag-name'>property</span><span> </span><span class='attribute'>name</span><span>=</span><span class='attribute-value'>"sessionFactory"</span><span class='tag'>&gt;</span><span>  </span></li>
    <li class='alt'><span>            </span><span class='tag'>&lt;</span><span class='tag-name'>ref</span><span> </span><span class='attribute'>local</span><span>=</span><span class='attribute-value'>"sessionFactory"</span><span class='tag'>/&gt;</span><span>  </span></li>
    <li class=''><span>        </span><span class='tag'>&lt;/</span><span class='tag-name'>property</span><span class='tag'>&gt;</span><span>  </span></li>
    <li class='alt'><span>    </span><span class='tag'>&lt;/</span><span class='tag-name'>bean</span><span class='tag'>&gt;</span><span>  </span></li>
    <li class=''><span>    </span><span class='comments'>&lt;!--使用声明式事务管理代理DAO类,每一个DAO类都需配置一个代理--&gt;</span><span>  </span></li>
    <li class='alt'><span>    </span><span class='tag'>&lt;</span><span class='tag-name'>bean</span><span> </span><span class='attribute'>id</span><span>=</span><span class='attribute-value'>"DAOProxy"</span><span>  </span></li>
    <li class=''><span>        </span><span class='attribute'>class</span><span>=</span><span class='attribute-value'>"org.springframework.transaction.interceptor.TransactionProxyFactoryBean"</span><span class='tag'>&gt;</span><span>  </span></li>
    <li class='alt'><span>        </span><span class='tag'>&lt;</span><span class='tag-name'>property</span><span> </span><span class='attribute'>name</span><span>=</span><span class='attribute-value'>"transactionManager"</span><span class='tag'>&gt;</span><span>  </span></li>
    <li class=''><span>            </span><span class='tag'>&lt;</span><span class='tag-name'>ref</span><span> </span><span class='attribute'>bean</span><span>=</span><span class='attribute-value'>"transactionManager"</span><span> </span><span class='tag'>/&gt;</span><span>      </span></li>
    <li class='alt'><span>        </span><span class='tag'>&lt;/</span><span class='tag-name'>property</span><span class='tag'>&gt;</span><span>  </span></li>
    <li class=''><span>        </span><span class='tag'>&lt;</span><span class='tag-name'>property</span><span> </span><span class='attribute'>name</span><span>=</span><span class='attribute-value'>"target"</span><span class='tag'>&gt;</span><span>  </span></li>
    <li class='alt'><span>            </span><span class='tag'>&lt;</span><span class='tag-name'>ref</span><span> </span><span class='attribute'>local</span><span>=</span><span class='attribute-value'>"GoodsDAO"</span><span> </span><span class='tag'>/&gt;</span><span>  </span></li>
    <li class=''><span>        </span><span class='tag'>&lt;/</span><span class='tag-name'>property</span><span class='tag'>&gt;</span><span>  </span></li>
    <li class='alt'><span>        </span><span class='tag'>&lt;</span><span class='tag-name'>property</span><span> </span><span class='attribute'>name</span><span>=</span><span class='attribute-value'>"proxyTargetClass"</span><span> </span><span class='attribute'>value</span><span>=</span><span class='attribute-value'>"true"</span><span class='tag'>/&gt;</span><span class='comments'>&lt;!-- 使用CGlib --&gt;</span><span>  </span></li>
    <li class=''><span>        </span><span class='tag'>&lt;</span><span class='tag-name'>property</span><span> </span><span class='attribute'>name</span><span>=</span><span class='attribute-value'>"transactionAttributes"</span><span class='tag'>&gt;</span><span>  </span></li>
    <li class='alt'><span>            </span><span class='tag'>&lt;</span><span class='tag-name'>props</span><span class='tag'>&gt;</span><span>  </span></li>
    <li class=''><span>                </span><span class='tag'>&lt;</span><span class='tag-name'>prop</span><span> </span><span class='attribute'>key</span><span>=</span><span class='attribute-value'>"insert*"</span><span class='tag'>&gt;</span><span>PROPAGATION_REQUIRED</span><span class='tag'>&lt;/</span><span class='tag-name'>prop</span><span class='tag'>&gt;</span><span>  </span></li>
    <li class='alt'><span>                </span><span class='tag'>&lt;</span><span class='tag-name'>prop</span><span> </span><span class='attribute'>key</span><span>=</span><span class='attribute-value'>"save*"</span><span class='tag'>&gt;</span><span>PROPAGATION_REQUIRED</span><span class='tag'>&lt;/</span><span class='tag-name'>prop</span><span class='tag'>&gt;</span><span>  </span></li>
    <li class=''><span>                </span><span class='tag'>&lt;</span><span class='tag-name'>prop</span><span> </span><span class='attribute'>key</span><span>=</span><span class='attribute-value'>"get*"</span><span class='tag'>&gt;</span><span>PROPAGATION_REQUIRED,readOnly</span><span class='tag'>&lt;/</span><span class='tag-name'>prop</span><span class='tag'>&gt;</span><span>  </span></li>
    <li class='alt'><span>            </span><span class='tag'>&lt;/</span><span class='tag-name'>props</span><span class='tag'>&gt;</span><span>  </span></li>
    <li class=''><span>        </span><span class='tag'>&lt;/</span><span class='tag-name'>property</span><span class='tag'>&gt;</span><span>  </span></li>
    <li class='alt'><span>    </span><span class='tag'>&lt;/</span><span class='tag-name'>bean</span><span class='tag'>&gt;</span><span>  </span></li>
</ol>
</div>
</font>

相关推荐

    swift菜鸟入门视频教程-05-控制流

    在“Swift菜鸟入门视频教程-05-控制流”这一章节中,我们将深入学习如何通过控制流语句来指导程序执行的顺序,这是编程中的基础概念,对于理解和编写复杂的逻辑至关重要。 控制流主要包括条件语句(如if和switch)...

    菜鸟入侵--利用资源搜索动画教程

    菜鸟入侵--利用资源搜索动画教程,内附有详细的使用说明 菜鸟入侵之利用资源篇 菜鸟在入侵的时候,如果能充分利用现有的资源,那将对自己的入侵起很大的

    股市菜鸟必读----“笑傲股市”学习笔记.pdf

    《股市菜鸟必读----“笑傲股市”学习笔记》是一本针对初级投资者的指南,它强调了理解财务报表和选择有潜力的股票的重要性。在股市投资中,掌握基础的分析技巧是至关重要的,特别是对于新手而言。以下是核心知识点的...

    SBAS-InSAR沉降监测_菜鸟高的博客-CSDN博客.pdf

    差分干涉测量短基线集时序分析技术(SmallBaselineSubsetInSAR,SBAS-InSAR)凭借其独特的优势,在大区 域、长时间序列的地面沉降监测领域具有巨大的应用前景。利用SBAS-InSAR技术对西安市区的14景 ...

    职场菜鸟升职记----完整版

    在《职场菜鸟升职记》这部作品中,作者通过主人公的视角展现了作为一名职场新人所应有的态度。开篇即强调“我是菜鸟”的心态,这种心态不仅意味着对自身能力的认知和定位,更是一种积极向上、勇于学习的态度。它鼓励...

    手打从菜鸟到入门--电脑篇

    手打从菜鸟到入门--电脑篇 此文章推荐刚刚接触电脑的朋友们阅读,书籍会更新,属于网络文章,相信对大多数网友会有帮助!

    DelPhi7教程之菜鸟先飞版--帮你打通任督二脉(第1式).asp.rar

    《Delphi7教程之菜鸟先飞版--帮你打通任督二脉(第1式)》是一份专为初学者设计的教程,旨在帮助新手快速掌握Delphi7编程的基础知识和技巧。Delphi7是一款强大的Windows应用程序开发工具,以其高效的代码生成、直观的...

    菜鸟玩破解--BT5_中文版破解WPA2_WPA简单过程教程

    菜鸟玩破解--BT5_中文版破解WPA2_WPA简单过程教程 如题,简单的WPA2_WPA破解过程教程,首先下载BT5_中文版,然后按图示进行。

    swift菜鸟入门视频教程-02-基本运算符

    本教程“Swift菜鸟入门视频教程-02-基本运算符”将带你深入理解Swift中的基础算术和逻辑操作,帮助你快速上手这门语言。 在Swift中,基本运算符分为几大类:算术运算符、比较运算符、逻辑运算符、位运算符以及赋值...

    swift菜鸟入门视频教程-06-函数

    本节视频教程"swift菜鸟入门视频教程-06-函数"将带你深入理解Swift中的函数概念,它是编程中最基本也是最重要的组成部分之一。 函数在编程中起到模块化的作用,允许我们将一组相关的操作打包成一个可重复使用的单元...

    Arduino学习笔记① 初识Arduino_单片机菜鸟哥的博客-CS.mhtml

    Arduino学习笔记① 初识Arduino_单片机菜鸟哥的博客-CS.mhtml

    Python菜鸟快乐游戏编程-pygame-课件PPT模板.pptx

    - 使用`pygame.time.clock()`来控制游戏帧率,优化游戏性能。 - `pygame.init()`和`pygame.quit()`的使用,确保程序的正确初始化和退出。 通过以上五个章节的学习,你将具备使用Python和Pygame开发简单2D游戏的能力...

    菜鸟网络-浪迹-城市及末端揽配网络的智能化实践1

    在这一领域,菜鸟网络的高级算法专家吴黎霞(浪迹)分享了具体的实践内容,旨在通过智能技术提升物流效率和服务质量。 1. **智慧物流与快递员调度**: - 快递员调度是物流系统中的核心问题,通过智能算法可以实现...

    菜鸟有书推荐-@加四的瘦瘦PPT模板.ppt

    标题中的“菜鸟有书推荐-@加四的瘦瘦PPT模板.ppt”可能是指一个针对初学者或者“菜鸟”级别的设计师或办公人员推荐的PPT模板资源,由加四的瘦瘦(可能是设计师或者作者的昵称)创作。这份资源可能包含了一系列精心...

    提供了菜鸟一套的数据-------nmg.json

    一个完全的案列。放进去就可以运行了 JS路径改一下。其他城市的, 只需要有其他城市的JSON文件就可以了,道理互通的, http://datav.aliyun.com/tools/atlas 这个网站里面可以下载所有城市的JSON文件

    STM32菜鸟成长记录---系统滴答定时器(systick)应用

    操作系统进行运转的时候,也会有“心跳”。它会根据“心跳”的节拍来工作,把整个时间段分成很多小小的时间片,每个任务每次只能运行一个“时间片”的时间长度就得退出给别的任务运行,这样可以确保任何一个任务都...

    Android studio1.3.1从菜鸟到高手--第一季-视频-百度盘

    - **逻辑实现**:在Activity或Fragment中编写业务逻辑代码。 #### 调试与测试 - **断点调试**:在代码中设置断点,逐步执行并查看变量值。 - **单元测试**:利用JUnit等框架编写单元测试代码,确保功能正确性。 - *...

    菜鸟成长手册2009——CPU-内存-硬盘篇 - 硬件知识精华

    菜鸟成长手册2009——CPU-内存-硬盘篇 - 硬件知识精华菜鸟成长手册2009——CPU-内存-硬盘篇 - 硬件知识精华菜鸟成长手册2009——CPU-内存-硬盘篇 - 硬件知识精华菜鸟成长手册2009——CPU-内存-硬盘篇 - 硬件知识精华...

    swift菜鸟入门视频教程-03-字符串和字符

    在Swift编程语言中,字符串(String)和字符(Character)是数据类型的重要组成部分,它们在处理文本信息时起到关键作用...本教程会通过实例讲解这些基础知识,帮助菜鸟快速上手Swift编程,从而更好地处理文本相关的任务。

Global site tag (gtag.js) - Google Analytics