`
zengshaotao
  • 浏览: 787815 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

注解驱动,事务切面

    博客分类:
  • java
 
阅读更多

package com.cpic.a2.backend.sales.business.channel.service;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import com.cpic.a2.backend.sales.dao.channel.ChannelBranchRelaDao;
import com.cpic.a2.backend.sales.dao.channel.ChannelDao;
import com.cpic.a2.backend.sales.dao.channel.ChannelSoluRelaDao;
import com.cpic.a2.sales.vo.channel.ChannelBranchRelaVO;
import com.cpic.a2.sales.vo.channel.ChannelSoluRelaVO;
import com.cpic.a2.sales.vo.channel.ChannelVO;
import com.cpic.a2.util.exception.PersistentException;
import com.cpic.common.base.service.BaseService;
@Service("channelService")
@Transactional(value="hibernateTransactionManager", propagation = Propagation.REQUIRED, rollbackFor = {PersistentException.class,RuntimeException.class })
public class ChannelService extends BaseService implements IChannelService {

    @Autowired   
    private ChannelDao channelDao;
   
    @Autowired   
    private ChannelBranchRelaDao channelBranchRelaDao;
   
    @Autowired   
    private ChannelSoluRelaDao channelSoluRelaDao;
   
    public String generateChannelCode() {       
       
        Date newDate = new Date();
        int i = (int)(Math.random()*(9999-1000))+1000;
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
        return "CH"+dateFormat.format(newDate).concat(""+i);
       
    }

    public void createChannel(ChannelVO channelVO,List<ChannelBranchRelaVO> channelBranchRelaVOs) throws PersistentException {
        channelVO.setChannelStatus("1");
        //如果用户没有选择企业团购类型,系统自动设置为01(网购)
        if (channelVO.getCooperationType()==null) {
            channelVO.setCooperationType("01");
        }
        channelVO.setCreationDtime(new Date());
        channelDao.saveOrUpdate(channelVO);
        for (int i=0;i<channelBranchRelaVOs.size();i++) {
            channelBranchRelaVOs.get(i).setChannelId(channelVO.getChannelId());
            channelBranchRelaDao.saveOrUpdate(channelBranchRelaVOs.get(i));
        }
       
    }
   
    public void updateChannel(ChannelVO channelVO,
            List<ChannelBranchRelaVO> channelBranchRelaVOs) throws PersistentException {
           
            if (channelVO.getChannelStatus()==null) {
                channelVO.setChannelStatus("1");
            }   
           
            //如果用户没有选择企业团购类型,系统自动设置为01(网购)
            if (channelVO.getCooperationType()==null) {
                channelVO.setCooperationType("01");
            }
            channelDao.saveOrUpdate(channelVO);
            if (channelBranchRelaVOs!=null) {
                ChannelBranchRelaVO queryParametersVO = new ChannelBranchRelaVO();
                queryParametersVO.setChannelId(channelVO.getChannelId());
               
                //delete channel branch rela vo first
                List<ChannelBranchRelaVO> relaList = channelBranchRelaDao.queryChannelBranchRela(queryParametersVO);
                if (relaList!=null) {
                    for (int i=0;i<relaList.size();i++) {
                        ChannelBranchRelaVO relaVO = relaList.get(i);
                        channelBranchRelaDao.delete(ChannelBranchRelaVO.class,relaVO.getListId());
                    }
                }
                for (int i=0;i<channelBranchRelaVOs.size();i++) {
                    channelBranchRelaVOs.get(i).setChannelId(channelVO.getChannelId());
                    channelBranchRelaDao.saveOrUpdate(channelBranchRelaVOs.get(i));
                }
            }       
                       
                               
    }
   
    public List<ChannelVO> queryChannelList(ChannelVO queryParametersVO,
            Integer currentPage, Integer pageSize) throws PersistentException {
        this.log("normal message", "INFO", queryParametersVO.toString(), "queryChannelList", null);
        if (currentPage ==null && pageSize==null) {
            return null;
        } else {
            return channelDao.queryChannelList(queryParametersVO, currentPage.intValue(), pageSize.intValue());
        }
       
    }

    public Long queryChannelListCount(ChannelVO queryParametersVO) throws PersistentException {       
        return channelDao.queryChannelListCount(queryParametersVO);
    }

    public ChannelVO getChannel(Long channelId) throws PersistentException {       
        return (ChannelVO) channelDao.get(ChannelVO.class,channelId);
    }

    public List<ChannelBranchRelaVO> queryChannelBranchRelaVO(Long channelId) throws PersistentException {
       
        return channelDao.queryChannelBranchRelaVO(channelId);
    }

    public void removeAllChannelSoluRela(Long channelId) throws PersistentException {
        List<ChannelSoluRelaVO> relaList = channelSoluRelaDao.queryByChannelId(channelId);
        if (relaList!=null) {
            for (int i=0;i<relaList.size();i++) {
                channelSoluRelaDao.delete(ChannelSoluRelaVO.class,((ChannelSoluRelaVO)relaList.get(i)).getListId());
            }
        }
       
    }

    public void createChannelSoluRela(ChannelSoluRelaVO relaVO) throws PersistentException {       
        channelSoluRelaDao.saveOrUpdate(relaVO);
    }
   
   
    public List<ChannelSoluRelaVO> queryChannelSoluRelaVOByChannelId(Long channelId) throws PersistentException {       
        return channelSoluRelaDao.queryByChannelId(channelId);       
    }

    //更新渠道方案经办人关联信息 2012-11-22
    public boolean updateChanSolu(String[] updArr) {
        return channelSoluRelaDao.updateChanSolu(updArr);
    }

   
}

分享到:
评论

相关推荐

    Spring AOP面向切面三种实现

    Spring AOP提供了三种实现方式:代理模式、AspectJ切面和注解驱动的切面。 1. **代理模式** Spring AOP的基础是动态代理,它可以创建目标对象的代理对象来实现切面功能。有两种代理方式:JDK动态代理和CGLIB代理。...

    spring2.5注解驱动

    这样,我们就可以在不修改业务代码的情况下,添加跨切面的功能,如日志记录、事务管理等。 在实际应用中,我们可以创建一个名为`springExample`的项目,将上述概念付诸实践。在`springExample`项目中,我们可以创建...

    spring切面小例子

    在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者将关注点从核心业务逻辑中分离出来,例如日志记录、事务管理、性能监控等。本示例将深入探讨如何在Spring中实现AOP,特别是通过注解的方式。...

    基于框架的Web开发-基于注解的事务配置.doc

    - `tx:advice` 和 `aop config` 配置通常是用于配置AOP(面向切面编程)的,但在使用`&lt;tx:annotation-driven&gt;`时,它们通常是不必要的,因为该元素本身就包含了处理事务切面的功能。所以,我们可以将这些配置注释掉...

    spring 3.05 + spring 3.05 mvc + mybatis (注解驱动) maven整合应用示例

    1. **Spring 3.0.5**: 这是Spring框架的一个较早版本,它包含了大量的核心特性,如依赖注入、AOP(面向切面编程)、事务管理等。在3.0版本中,Spring引入了更多的模块化,使得开发者可以选择性地引入所需模块,降低...

    aspectj的切面优化线程切换

    总结来说,AspectJ的切面优化线程切换是一种有效的编程实践,它利用注解驱动的AOP技术减少了代码的冗余,增强了代码的结构和可维护性。通过定义切面和自定义注解,我们可以将复杂的线程管理逻辑封装起来,让代码更加...

    Spring源码深度解析与注解驱动开发1

    5. AOP(面向切面编程):Spring的AOP模块允许我们在不修改代码的情况下,对程序进行横切关注点的处理,如日志、事务管理等。`@Aspect`、`@Before`、`@After`等注解用于定义切面和通知。 6. 声明式事务:在Spring中...

    使用Spring的声明式事务----Annotation注解方式

    与编程式事务(即手动编写事务管理代码)不同,声明式事务是通过AOP(面向切面编程)实现的,它将事务管理逻辑与业务逻辑分离,使得事务管理更加灵活且易于维护。 在Spring中,我们可以使用XML配置文件来声明事务,...

    SpringJDBC注解事务.zip

    2. **注解驱动的事务管理** Spring框架支持基于注解的事务管理,这使得在方法级别声明事务边界变得非常简单。主要使用的注解有`@Transactional`,它可以应用到方法或类上,表示该方法或类的所有方法都在一个事务内...

    面向切面的编程(AOP)及在Spring中的应用

    2. 注解配置:在切面类上使用`@Aspect`,在方法上使用通知注解(如`@Before`、`@After`等),并开启Spring的注解驱动AOP支持。 3. 自动代理:Spring可以自动检测并创建代理,无需显式配置。 使用AOP时,需要注意的...

    spring注解驱动

    Spring注解驱动是Spring框架中的一个重要特性,它极大地简化了Java应用的配置,使得开发者能够通过在类或方法上添加注解来声明依赖关系和服务行为。这种“注解驱动”的方式,让代码更加简洁,降低了XML配置的复杂性...

    注解实现声明式事务管理

    例如,如果你使用的是Hibernate,还需要在配置文件中启用注解驱动的事务管理,如下: ```xml ``` 这里的`transactionManager`是之前提到的PlatformTransactionManager的bean名称。 此外,Spring还提供了一种基于...

    基于注解驱动的Struts_Spring_Hibernate开发

    **Spring框架** 是一个全面的企业级应用开发框架,包括依赖注入(DI)、面向切面编程(AOP)和许多其他功能。Spring的注解驱动能力极大地简化了配置。例如,`@Autowired`注解用于自动装配bean,`@Service`和`@...

    spring3 struts2 Mybatis3 组件注解 事务注解 实例

    Spring的`&lt;tx:annotation-driven&gt;`标签启用注解驱动的事务管理,使`@Transactional`生效。Struts2的配置文件需要指定Action类及其结果映射,而Mybatis3的配置则包括数据源、SqlSessionFactory和Mapper扫描。 在业务...

    java面向切面编程

    为了配置AOP,我们需要在Spring配置文件中声明切面和通知,或者使用注解驱动的方式。例如,我们可以创建一个带有切点注解的切面类,并在其中定义通知方法: ```java @Aspect @Component public class LoggingAspect...

    有关java切面和通知

    面向切面编程(AOP)是Java开发中的一个重要概念,它是对传统面向对象编程(OOP)的一种补充,尤其在处理系统级服务如事务管理时非常有用。在Spring框架中,AOP提供了声明式服务,使得开发者无需在业务逻辑代码中...

    aop切面插件包

    1. **注解驱动的AOP**:使用`@Aspect`定义切面,`@Before`、`@After`、`@Around`等注解定义通知,以及`@Pointcut`定义切入点。 2. **XML配置的AOP**:在Spring的配置文件中定义切面、通知和切入点。 3. **基于...

    Spring 整合mybatis(注解&xml版声明式事务).pdf

    它通过提供一套完整的解决方案,帮助开发者进行分层开发,包括控制反转(IoC)、面向切面编程(AOP)等。而MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC...

    JAVA简单AOP切面编程;依赖注入;代码配置Bean源码

    - **注解驱动**:使用`@Aspect`定义切面,`@Before`, `@After`, `@Around`, `@AfterReturning`, `@AfterThrowing`定义不同类型的通知。 3. **依赖注入(Dependency Injection, DI)** - **DI原则**:将对象间的...

    Spring注解驱动之AOP功能测试

    Spring注解驱动之AOP功能测试 Spring框架提供了一个强大的功能,即Aspect-Oriented Programming(面向方面编程),也就是AOP。AOP是一种编程范式,它提供了一种将横切关注点模块化的方法,例如日志记录、安全检查...

Global site tag (gtag.js) - Google Analytics