spring service 事务事务放在service层效率会不会很低

扫二维码下载作业帮
2亿+学生的选择
下载作业帮安装包
扫二维码下载作业帮
2亿+学生的选择
spring MVC 我想在控制层或者Service添加一个事务,就是同时对一张表的两种操作
騷B雪的桃qjf
扫二维码下载作业帮
2亿+学生的选择
这是spring的批注式事务管理你应该去找spring的书 或 官方文档看看这里你需要理解的是 事务的传播行为传播行为主要是用来告知何时该开始一个新的事务 或者 何时暂停一个事务等如:Propagation.REQUIRED 就是传播行为中的一种表示如果它的外部已经存在一个事务;则无需再开始新的事务;(他自然在这个事务中)如果外面没有事务;则开始一个新的事务所有这种事务声明是可以嵌套的(虽然事务声明可以嵌套,但事务本身并没有嵌套,当然事务是不可嵌套的;正像上面讲的一样)---------------------------------------------------------------------------如你的问题中 同时对一张表的两种操作如果这两个操作封装在不同的方法中,只需将这两个方法都声明为Propagation.REQUIRED并把更上一层调用这两个子方法的 方法也声明为Propagation.REQUIRED这种方式比较灵活,两个方法即可独立开始事务;也可加入上层事务;具体要看业务需要如果这两个操作封装在一个方法中,只需要将这个方法都声明为Propagation.REQUIRED即可
为您推荐:
扫描下载二维码这个问题我是解决了。原来我对spring的事务切如原理不是特别了解。
解决方案如下:
原理:spring aop& 异常捕获原理:被拦截的方法需显式抛出异常,并不能经任何处理,这样aop代理才能捕获到方法的异常,才能进行回滚,默认情况下aop只捕获runtimeexception的异常,但可以通过&tx:method name="upd*" propagation="REQUIRED" rollback-for="java.lang.Exception"/&配置来捕获特定的异常并回滚
换句话说在service的方法中不使用try catch 或者在catch中最后加上throw new runtimeexcetpion(),这样程序异常时才能被aop捕获进而回滚
解决方案:
方案1.例如service层处理事务,那么service中的方法中不做异常捕获,或者在catch语句中最后增加throw new&RuntimeException()语句,以便让aop捕获异常再去回滚,并且在service上层(webservice客户端,view层action)要继续捕获这个异常并处理
方案2.在service层方法的catch语句中增加:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();语句,手动回滚,这样上层就无需去处理异常(现在项目的做法)
&&bean id="transactionManager"&&class="org.springframework.orm.hibernate3.HibernateTransactionManager"&&&&property name="sessionFactory" ref="sessionFactory" /&&&/bean&
&&tx:advice id="txAdvice" transaction-manager="transactionManager"&&&&tx:attributes&&&&&tx:method name="add*" propagation="REQUIRED" /&&&&&tx:method name="upd*" propagation="REQUIRED" rollback-for="java.lang.Exception"/&&&&&tx:method name="del*" propagation="REQUIRED" /&&&&&tx:method name="*" propagation="SUPPORTS" /&&&&/tx:attributes&&&/tx:advice&
&&aop:config&&&&aop:pointcut id="canyin" expression="execution(* com.laphone.base.baseservice.*.*(..)) ||execution(* com.laphone.canyin.*.service.*.*(..)) || execution(* com.laphone.canyin.*.*.service.*.*(..))"/&&&&aop:advisor advice-ref="txAdvice" pointcut-ref="canyin" /&&&/aop:config&
阅读(...) 评论()1、现在的绝大多数web应用,通常都以action、service、dao三层去组织代码,这样划分结构很清晰,分工明确
2、一般情况下,我们会把事务控制在service层。
3、action和dao层,会使用一些框架技术。比如action层可能选择有springmvc、struts等,dao层有、mybatis等选择,所以action的dao有可能遂根据情况变化,而service层关注业务逻辑,业务代码都是自己完成的,代码对自己是透明的。
基于1,我们的每个业务,可能都需要这三层代码,也就是因为一个很简单的业务,我们会写dao层及实现,service层及实现,action层,这样会造成很多的类。所以最好做到dao层必须通用,service层绝大部分通用,这样就会减少大量的类。
基于2,我们应把业务逻辑写在service层,这样才能控制住事务。例如我们的一个业务:删除A记录,插入B记录(需要在一个事务里进行),如果我们把这个业务逻辑写在了action层,我们再action层调用删除A的service,然后再调用插入B的service,如果说插入B失败了,那我们删除A这个操作将不能回滚,因为事务控制在了service层,这样写已不是一个事务。删除A操作的service已经完成,事务已经提交了,插入B的操作在另外的事务里运行。根据需要,业务逻辑尽量放在service层。通过配置事务控制的传播行为,在service层可以达到大部分的业务事务要求,而不需另加一层。
基于3,我们更应该把与业务相关的代码移至service层,如果service层的事务不容易控制了,可以增加额外的support层(个人理解,其实还是业务逻辑层)协助控制事务。这主要发生在我们把整个业务逻辑放在了service的一个方法,而这个方法以及调用的方法的事务配置为required(或其他),但业务的部分操作需要在不同的事务中进行,我们不想写另外的方法,也不想去更改事务配置,所以引入support层(或许你说可以把这种逻辑向action层移动,在action层处理,但记住我们的前提,action的框架是会变的,我们想尽量做到更改action层时,更简单。而且从分工来说,action层应该只关注视图逻辑,个人自扫门前雪,休管他人瓦上霜)。support层当然不是只为处理这种事务问题的,我把它定义为业务处理时需要的一些辅助层,可以协助处理业务,比如刚才说的事务问题,还有可以提供工具类支持等。&
对于dao层,应该只关注连接执行结果封装这些事。
我们的通用,是基于以上的分析结论进行,下面贴上代码:
通用dao层:
package&com.wls.websvn.&&&&import&java.io.S&&import&java.util.L&&import&java.util.M&&&&import&com.wls.websvn.support.P&&&&public&interface&CommonDao&{&&&&&&&&&&&&&&&&&public&&T&extends&Serializable&&int&save(T&pojo);&&&&&&&&&&&&&&&&&&&&&public&&T&extends&Serializable&&int&deleteById(Class&T&&clazz,&&&&&&&&&&&&&&Serializable&id);&&&&&&&&&&&&&&&&&&&&&public&&T&extends&Serializable&&T&getById(Class&T&&clazz,&Serializable&id);&&&&&&&&&&&&&&&&&&&&public&&T&extends&Serializable&&List&T&&listAll(Class&T&&clazz);&&&&&&&&&&&&&&&&&&&&&&&&&public&&T&extends&Serializable&&Page&T&&pageSelect(Class&T&&clazz,Page&T&&p,String[]attrs,Object[]values);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&public&&T&extends&Serializable&&int&pageCount(Class&T&&clazz,String[]attrs,Object[]values);&&&&&&&&&&&&&&&&&&&&public&&T&extends&Serializable&&int&countAll(Class&T&&clazz);&&&&&&&&&&&&&&&&&&&&&List&Map&String,Object&&&&selectMap(String&statment,&Map&String,&Object&&paraMap);&&&&} &
dao层实现:
package&com.wls.websvn.dao.&&&&import&java.io.S&&import&java.util.HashM&&import&java.util.L&&import&java.util.M&&&&import&javax.annotation.R&&&&import&mons.lang.StringU&&import&org.apache.ibatis.session.SqlSessionF&&import&org.springframework.stereotype.R&&&&import&com.wls.monD&&import&com.wls.websvn.support.P&&&&@Repository(&commonDao&)&&public&class&CommonDaoImpl&implements&CommonDao&{&&&&&&&&@Resource(name&=&&sqlSessionFactory&)&&&&&&protected&SqlSessionFactory&sqlSessionF&&&&&&&&protected&&T&&String&getStatement(Class&T&&clazz,&String&prefix)&{&&&&&&&&&&String&entityName&=&clazz.getSimpleName();&&&&&&&&&&if&(entityName.endsWith(&Model&))&{&&&&&&&&&&&&&&entityName&=&entityName.substring(0,&entityName.length()&-&5);&&&&&&&&&&}&&&&&&&&&&entityName&=&prefix&+&entityN&&&&&&&&&&return&entityN&&&&&&}&&&&&&&&@Override&&&&&&public&&T&extends&Serializable&&int&save(T&pojo)&{&&&&&&&&&&String&statement&=&getStatement(pojo.getClass(),&&insert&);&&&&&&&&&&return&sqlSessionFactory.openSession().insert(statement,&pojo);&&&&&&}&&&&&&&&@Override&&&&&&public&&T&extends&Serializable&&int&deleteById(Class&T&&clazz,&&&&&&&&&&&&&&Serializable&id)&{&&&&&&&&&&String&statement&=&getStatement(clazz,&&idDelete&);&&&&&&&&&&return&sqlSessionFactory.openSession().update(statement,&id);&&&&&&}&&&&&&&&@Override&&&&&&public&&T&extends&Serializable&&T&getById(Class&T&&clazz,&Serializable&id)&{&&&&&&&&&&String&statement&=&getStatement(clazz,&&idGet&);&&&&&&&&&&return&sqlSessionFactory.openSession().selectOne(statement,&id);&&&&&&}&&&&&&&&@Override&&&&&&public&&T&extends&Serializable&&List&T&&listAll(Class&T&&clazz)&{&&&&&&&&&&String&statement&=&getStatement(clazz,&&list&);&&&&&&&&&&return&sqlSessionFactory.openSession().selectList(statement);&&&&&&}&&&&&&&&&&&&&&&&&&&&&private&String&genOrderStr(String&sort,&String&order)&{&&&&&&&&&&String&orderBy&=&&&;&&&&&&&&&&if&(StringUtils.isNotBlank(sort))&{&&&&&&&&&&&&&&if&(StringUtils.isNotBlank(order))&{&&&&&&&&&&&&&&&&&&StringBuilder&sb&=&new&StringBuilder(&&&);&&&&&&&&&&&&&&&&&&String[]&aSort&=&sort.split(&,&);&&&&&&&&&&&&&&&&&&String[]&aOrder&=&order.split(&,&);&&&&&&&&&&&&&&&&&&for&(int&i&=&0;&i&&&aSort.&i++)&{&&&&&&&&&&&&&&&&&&&&&&sb.append(aSort[i]).append(&&&);&&&&&&&&&&&&&&&&&&&&&&if&(i&&&aOrder.length)&{&&&&&&&&&&&&&&&&&&&&&&&&&&sb.append(aOrder[i]).append(&,&);&&&&&&&&&&&&&&&&&&&&&&}&else&{&&&&&&&&&&&&&&&&&&&&&&&&&&sb.append(&ASC&).append(&,&);&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&sb.deleteCharAt(sb.length()&-&1);&&&&&&&&&&&&&&&&&&orderBy&=&sb.toString();&&&&&&&&&&&&&&&&}&else&{&&&&&&&&&&&&&&&&&&orderBy&=&&&order&by&&&+&&&&&&&&&&&&&&&}&&&&&&&&&&}&&&&&&&&&&&&return&orderBy;&&&&&&}&&&&&&&&@Override&&&&&&public&&T&extends&Serializable&&int&pageCount(Class&T&&clazz,&&&&&&&&&&&&&&String[]&attrs,&Object[]&values)&{&&&&&&&&&&Map&String,&Object&&paraMap&=&new&HashMap&String,&Object&();&&&&&&&&&&&&if&(values&!=&null&&&&attrs&!=&null)&{&&&&&&&&&&&&&&for&(int&i&=&0;&i&&&values.&i++)&{&&&&&&&&&&&&&&&&&&if&(i&&&attrs.length)&{&&&&&&&&&&&&&&&&&&&&&&paraMap.put(attrs[i],&values[i]);&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&}&&&&&&&&&&}&&&&&&&&&&String&statement&=&getStatement(clazz,&&pageCount&);&&&&&&&&&&Object&o&=&sqlSessionFactory.openSession().selectOne(statement,paraMap);&&&&&&&&&&return&Integer.parseInt(o.toString());&&&&&&}&&&&&&&&@Override&&&&&&public&&T&extends&Serializable&&Page&T&&pageSelect(Class&T&&clazz,&&&&&&&&&&&&&&Page&T&&p,&String[]&attrs,&Object[]&values)&{&&&&&&&&&&int&startNum&=&p.getStartIndex();&&&&&&&&&&int&pageSize&=&p.getPageSize();&&&&&&&&&&String&orderBy&=&genOrderStr(p.getSort(),&p.getOrder());&&&&&&&&&&Map&String,&Object&&paraMap&=&new&HashMap&String,&Object&();&&&&&&&&&&&&if&(values&!=&null&&&&attrs&!=&null)&{&&&&&&&&&&&&&&for&(int&i&=&0;&i&&&values.&i++)&{&&&&&&&&&&&&&&&&&&if&(i&&&attrs.length)&{&&&&&&&&&&&&&&&&&&&&&&paraMap.put(attrs[i],&values[i]);&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&}&&&&&&&&&&}&&&&&&&&&&String&statement&=&getStatement(clazz,&&page&);&&&&&&&&&&p.setTotal(pageCount(clazz,&attrs,&values));&&&&&&&&&&&&paraMap.put(&startNum&,&startNum);&&&&&&&&&&paraMap.put(&pageSize&,&pageSize);&&&&&&&&&&paraMap.put(&endNum&,&startNum&+&pageSize);&&&&&&&&&&paraMap.put(&orderBy&,&orderBy);&&&&&&&&&&List&T&&list&=&sqlSessionFactory.openSession().selectList(statement,&&&&&&&&&&&&&&&&&&paraMap);&&&&&&&&&&p.setData(list);&&&&&&&&&&return&p;&&&&&&}&&&&&&&&@Override&&&&&&public&&T&extends&Serializable&&int&countAll(Class&T&&clazz)&{&&&&&&&&&&String&statement&=&getStatement(clazz,&&count&);&&&&&&&&&&Object&o&=&sqlSessionFactory.openSession().selectOne(statement);&&&&&&&&&&return&Integer.parseInt(o.toString());&&&&&&}&&&&&&&&@Override&&&&&&public&List&Map&String,&Object&&&selectMap(String&statement,&&&&&&&&&&&&&&Map&String,&Object&&paraMap)&{&&&&&&&&&&return&sqlSessionFactory.openSession().selectList(statement,&paraMap);&&&&&&}&&&&} &
package&com.wls.websvn.&&&&import&java.util.L&&&&public&class&Page&T&&{&&&&&&&&&&&&&&&&private&int&page&=&1;&&&&&&&&&&&&&&&&private&int&pageSize&=&10;&&&&&&&&&&&&&&&&private&long&&&&&&&&&&&&&&&&&private&String&&&&&&&&&&&&&&&&&private&String&&&&&&&&&&&&&&&&&private&List&T&&&&&&&&&&public&Page()&{&&&&&&&&&&this.page&=&1;&&&&&&&&&&this.pageSize&=&10;&&&&&&}&&&&&&&&&&&&&&public&Page(int&page,&int&pageSize)&{&&&&&&&&&&this.page&=&&&&&&&&&&&this.pageSize&=&pageS&&&&&&}&&&&&&&&&&&&&&&&&public&int&getPage()&{&&&&&&&&&&return&&&&&&&}&&&&&&&&&&&&&&&&&public&void&setPage(int&page)&{&&&&&&&&&&this.page&=&&&&&&&}&&&&&&&&&&&&&&&&&public&int&getPageSize()&{&&&&&&&&&&return&pageS&&&&&&}&&&&&&&&&&&&&&&&&public&void&setPageSize(int&pageSize)&{&&&&&&&&&&this.pageSize&=&pageS&&&&&&}&&&&&&&&&&&&&&&&&public&List&T&&getData()&{&&&&&&&&&&return&&&&&&&}&&&&&&&&&&&&&&&&&public&void&setData(List&T&&data)&{&&&&&&&&&&this.data&=&&&&&&&}&&&&&&&&&&&&&&&&&public&long&getTotal()&{&&&&&&&&&&return&&&&&&&}&&&&&&&&&&&&&&&&&public&void&setTotal(long&total)&{&&&&&&&&&&this.total&=&&&&&&&}&&&&&&&&public&String&getSort()&{&&&&&&&&&&return&&&&&&&}&&&&&&&&public&void&setSort(String&sort)&{&&&&&&&&&&this.sort&=&&&&&&&}&&&&&&&&&&&&&&&&public&String&getOrder()&{&&&&&&&&&&return&&&&&&&}&&&&&&&&&&&&&&&&public&void&setOrder(String&order)&{&&&&&&&&&&this.order&=&&&&&&&}&&&&&&&&&&&&&&&&&&&public&int&getStartIndex()&{&&&&&&&&&&if(page&1){&&&&&&&&&&&&&&return&0;&&&&&&&&&&}&&&&&&&&&&return&(page&-&1)&*&pageS&&&&&&}&&} &
service层:
package&com.wls.websvn.&&&&import&java.io.S&&import&java.util.L&&import&java.util.M&&&&import&com.wls.websvn.support.P&&&&public&interface&CommonService&{&&&&&&&&&&&&&&&&&&&public&&T&extends&Serializable&&int&save(T&pojo);&&&&&&&&&&&&&&&&&&&&&public&&T&extends&Serializable&&int&deleteById(Class&T&&clazz,&&&&&&&&&&&&&&Serializable&id);&&&&&&&&&&&&&&&&&&&&&public&&T&extends&Serializable&&T&getById(Class&T&&clazz,&Serializable&id);&&&&&&&&&&&&&&&&&&&&public&&T&extends&Serializable&&List&T&&listAll(Class&T&&clazz);&&&&&&&&&&&&&&&&&&&&&&&&&public&&T&extends&Serializable&&Page&T&&pageSelect(Class&T&&clazz,Page&T&&p,String[]attrs,Object[]values);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&public&&T&extends&Serializable&&int&pageCount(Class&T&&clazz,String[]attrs,Object[]values);&&&&&&&&&&&&&&&&&&&&public&&T&extends&Serializable&&int&countAll(Class&T&&clazz);&&&&&&&&&&&&&&&&&&&&&List&Map&String,Object&&&&selectMap(String&statment,&Map&String,&Object&&paraMap);&&&&} &
service层实现:
package&com.wls.websvn.service.&&&&import&java.io.S&&import&java.util.L&&import&java.util.M&&&&import&javax.annotation.R&&&&import&org.springframework.stereotype.S&&&&import&com.wls.monD&&import&com.wls.monS&&import&com.wls.websvn.support.P&&&&&&&&&&&&@Service(&commonService&)&&public&class&CommonServiceImpl&implements&CommonService&{&&&&&&&&@Resource(name&=&&commonDao&)&&&&&&protected&CommonDao&commonD&&&&&&&&&&@Override&&&&&&public&&T&extends&Serializable&&int&save(T&pojo)&{&&&&&&&&&&return&commonDao.save(pojo);&&&&&&}&&&&&&&&@Override&&&&&&public&&T&extends&Serializable&&int&deleteById(Class&T&&clazz,&&&&&&&&&&&&&&Serializable&id)&{&&&&&&&&&&return&commonDao.deleteById(clazz,&id);&&&&&&}&&&&&&&&@Override&&&&&&public&&T&extends&Serializable&&T&getById(Class&T&&clazz,&Serializable&id)&{&&&&&&&&&&return&commonDao.getById(clazz,&id);&&&&&&}&&&&&&&&@Override&&&&&&public&&T&extends&Serializable&&List&T&&listAll(Class&T&&clazz)&{&&&&&&&&&&return&commonDao.listAll(clazz);&&&&&&}&&&&&&&&&&@Override&&&&&&public&&T&extends&Serializable&&int&pageCount(Class&T&&clazz,&&&&&&&&&&&&&&String[]&attrs,&Object[]&values)&{&&&&&&&&&&return&commonDao.pageCount(clazz,&attrs,&values);&&&&&&}&&&&&&&&@Override&&&&&&public&&T&extends&Serializable&&Page&T&&pageSelect(Class&T&&clazz,&&&&&&&&&&&&&&Page&T&&p,&String[]&attrs,&Object[]&values)&{&&&&&&&&&&return&commonDao.pageSelect(clazz,&p,&attrs,&values);&&&&&&}&&&&&&&&@Override&&&&&&public&&T&extends&Serializable&&int&countAll(Class&T&&clazz)&{&&&&&&&&&&return&commonDao.countAll(clazz);&&&&&&}&&&&&&&&@Override&&&&&&public&List&Map&String,&Object&&&selectMap(String&statement,&&&&&&&&&&&&&&Map&String,&Object&&paraMap)&{&&&&&&&&&&return&commonDao.selectMap(statement,&paraMap);&&&&&&}&&&&} &
通过泛型,这里做到了service层可以查询各种实体。如果实体的操作简单,完全没有必要再写service层,commonService应该就够用,当然你还可以增加CommonService增加方法(当然可能需要同步增加CommonDao),使其更通用。
如果CommonService不够用了,你的接口应该继承CommonService接口,你的实现应该继承CommonServiceImpl实现,然后根据需要override其中的一些方法。
需要说明一下,我们把protected &T& String getStatement(Class&T& clazz, String prefix)放置在dao层,因为它并不是业务逻辑的一部分,而且对于mybaits框架,你需要这个方法,而对应hibenate你可能根本不需要(或则可以把这个方法重构到另外的一个接口)。
最后附上例子model和mapping:
package&com.wls.websvn.&&&&import&java.io.S&&import&java.util.D&&&&public&class&BaseModel&implements&Serializable{&&&&&&&&&&&&&&&&private&static&final&long&serialVersionUID&=&-182045L;&&&&&&&&&&&&protected&Long&&&&&&&&&&&&&protected&Date&createD&&&&&&&&public&Long&getId()&{&&&&&&&&&&return&&&&&&&}&&&&&&&&public&void&setId(Long&id)&{&&&&&&&&&&this.id&=&&&&&&&}&&&&&&&&public&Date&getCreateDate()&{&&&&&&&&&&return&createD&&&&&&}&&&&&&&&public&void&setCreateDate(Date&createDate)&{&&&&&&&&&&this.createDate&=&createD&&&&&&}&&&&&&&&} &
package&com.wls.websvn.&&&&public&class&UserModel&extends&BaseModel&{&&&&&&&&&&&&&&&&private&static&final&long&serialVersionUID&=&9117755L;&&&&&&&&&&&&private&String&userN&&&&&&&&&&&&private&String&realN&&&&&&&&&&&&private&String&userP&&&&&&&&&&&&private&String&phoneN&&&&&&&&public&String&getUserName()&{&&&&&&&&&&return&userN&&&&&&}&&&&&&&&public&void&setUserName(String&userName)&{&&&&&&&&&&this.userName&=&userN&&&&&&}&&&&&&&&&&public&String&getRealName()&{&&&&&&&&&&return&realN&&&&&&}&&&&&&&&public&void&setRealName(String&realName)&{&&&&&&&&&&this.realName&=&realN&&&&&&}&&&&&&&&public&String&getUserPwd()&{&&&&&&&&&&return&userP&&&&&&}&&&&&&&&public&void&setUserPwd(String&userPwd)&{&&&&&&&&&&this.userPwd&=&userP&&&&&&}&&&&&&&&public&String&getPhoneNum()&{&&&&&&&&&&return&phoneN&&&&&&}&&&&&&&&public&void&setPhoneNum(String&phoneNum)&{&&&&&&&&&&this.phoneNum&=&phoneN&&&&&&}&&&&} &
&version=&1.0&&encoding=&UTF-8&&&&&&&&!DOCTYPE&mapper&PUBLIC&&-//mybatis.org//DTD&Mapper&3.0//EN&&&http://mybatis.org/dtd/mybatis-3-mapper.dtd&&&&&&namespace=&com.wls.websvn.model.UserModel&&&&&&&&&&&&&&&&&&&&id=&insertUser&&parameterType=&com.wls.websvn.model.UserModel&&&&&&&&&&&insert&into&&&&&&&&&&SVN_USER(ID_,&&&&&&&&&&NAME_,&REALNAME_,&PASSWORD_,&MOBILEPHONE_,CREATE_TIME_)&&&&&&&&&&values&&&&&&&&&&(#{id,&&&&&&&&&&jdbcType=BIGINT},&&&&&&&&&&#{userName,&jdbcType=VARCHAR},&&&&&&&&&&#{realName,&&&&&&&&&&jdbcType=VARCHAR},&&&&&&&&&&#{userPwd,&jdbcType=VARCHAR},&&&&&&&&&&#{phoneNum,&&&&&&&&&&jdbcType=VARCHAR},&&&&&&&&&&#{createDate,&&&&&&&&&&jdbcType=TIMESTAMP})&&&&&&&&&&&&&&&id=&idDeleteUser&&parameterType=&long&&&&&&&&&&&DELETE&FROM&&&&&&&&&&SVN_USER&WHERE&ID_=#{id,jdbcType=BIGINT}&&&&&&&&&&&&&&&&&id=&userResultMap&&type=&com.wls.websvn.model.UserModel&&&&&&&&&&&&property=&id&&column=&ID_&&jdbcType=&BIGINT&&&&&&&&&&&&&property=&userName&&column=&NAME_&&jdbcType=&VARCHAR&&&&&&&&&&&&&property=&realName&&column=&REALNAME_&&jdbcType=&VARCHAR&&&&&&&&&&&&&property=&userPwd&&column=&PASSWORD_&&jdbcType=&VARCHAR&&&&&&&&&&&&&property=&phoneNum&&column=&MOBILEPHONE_&&jdbcType=&VARCHAR&&&&&&&&&&&&&property=&createDate&&column=&CREATE_TIME_&&jdbcType=&VARCHAR&&&&&&&&&&&&&&&&&id=&idGetUser&&parameterType=&string&&resultMap=&userResultMap&&&&&&&&&&&SELECT&*&&&&&&&&&&FROM&SVN_USER&WHERE&ID_=#{id,jdbcType=BIGINT}&&&&&&&&&&&&&&&id=&countUser&&resultType=&int&&&&&&&&&&&SELECT&COUNT(1)&FROM&&&&&&&&&&SVN_USER&&&&&&&&&&&&&&&id=&listUser&&resultMap=&userResultMap&&&&&&&&&&&SELECT&*&FROM&SVN_USER&&&&&&&&&&&&&&&id=&pageCountUser&&resultType=&int&&parameterType=&map&&&&&&&&&&&select&count(1)&from&SVN_USER&ST&&&&&&&&&&&&&&&&&&&&&&&&&test=&id!=null&and&id!=''&&&&&&&&&&&&&&&&&&&&ST.ID_&=&#{id}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&test=&name!=&null&and&name!=&''&&&&&&&&&&&&&&&&&&&&AND&ST.NAME_&LIKE&CONCAT(CONCAT('%',&#{name}),'%')&&&&&&&&&&&&&&&&&&&&&&&&&&&&&test=&codePrefix&!=null&and&codePrefix!=''&&&&&&&&&&&&&&&&&&&&AND&ST.CODEPREFIX_&=&#{codePrefix}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&test=&active&!=null&&&&&&&&&&&&&&&&&&&&AND&ST.ACTIVE_&=&#{active}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&test=&description&!=null&and&description!=''&&&&&&&&&&&&&&&&&&&&AND&ST.DESCRIPTION_&=&#1、现在的绝大多数web应用,通常都以action、service、dao三层去组织代码,这样划分结构很清晰,分工明确
2、一般情况下,我们会把事务控制在service层。
3、action和dao层,会使用一些框架技术。比如action层可能选择有springmvc、struts等,dao层有hibernate、mybatis等选择,所以action的dao有可能遂根据情况变化,而servi&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&id=&pageUser&&resultMap=&userResultMap&&&&&&&&&&&parameterType=&map&&&&&&&&&&&select&*&from&SVN_USER&ST&&&&&&&&&&&&&&&&&&&&&&&&&test=&id!=null&and&id!=''&&&&&&&&&&&&&&&&&&&&ST.ID_&=&#{id}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&test=&name!=&null&and&name!=&''&&&&&&&&&&&&&&&&&&&&AND&ST.NAME_&LIKE&CONCAT(CONCAT('%',&#{name}),'%')&&&&&&&&&&&&&&&&&&&&&&&&&&&&&test=&codePrefix&!=null&and&codePrefix!=''&&&&&&&&&&&&&&&&&&&&AND&ST.CODEPREFIX_&=&#{codePrefix}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&test=&active&!=null&&&&&&&&&&&&&&&&&&&&AND&ST.ACTIVE_&=&#{active}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&test=&description&!=null&and&description!=''&&&&&&&&&&&&&&&&&&&&AND&ST.DESCRIPTION_&=&#1、现在的绝大多数web应用,通常都以action、service、dao三层去组织代码,这样划分结构很清晰,分工明确
2、一般情况下,我们会把事务控制在service层。
3、action和dao层,会使用一些框架技术。比如action层可能选择有springmvc、struts等,dao层有hibernate、mybatis等选择,所以action的dao有可能遂根据情况变化,而servi&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&test=&startNum!=null&&&&&&&&&&&&&&&LIMIT&${startNum}&,&${pageSize}&&&&&&&&&&&&&&&&&&&&&&&test=&orderBy!=null&and&orderBy!=''&&&&&&&&&&&&&&&&${orderBy}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&id=&selectMap&&resultType=&map&&parameterType=&map&&&&&&&&&&&SELECT&*&&&&&&&&&&FROM&SVN_USER&&&&&&&&&&&&
部分spring配置:
applicationContext-dao.xml
&?xml version=&1.0& encoding=&UTF-8&?&
&beans xmlns=&http://www.springframework.org/schema/beans&
xmlns:xsi=&http://www.w3.org/2001/XMLSchema-instance& xmlns:context=&http://www.springframework.org/schema/context&
xsi:schemaLocation=&http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd&&
&bean id=&dataSource& class=&mons.dbcp.BasicDataSource&
destroy-method=&close&&
&property name=&driverClassName& value=&${jdbc.driver}& /&
&property name=&url& value=&${jdbc.url}& /&
&property name=&username& value=&${jdbc.username}& /&
&property name=&password& value=&${jdbc.password}& /&
&!-- 初始化连接大小 --&
&property name=&initialSize& value=&${initialSize}&&&/property&
&!-- 连接池最大数量 --&
&property name=&maxActive& value=&${maxActive}&&&/property&
&!-- 连接池最大空闲 --&
&property name=&maxIdle& value=&${maxIdle}&&&/property&
&!-- 连接池最小空闲 --&
&property name=&minIdle& value=&${minIdle}&&&/property&
&!-- 获取连接最大等待时间 --&
&property name=&maxWait& value=&${maxWait}&&&/property&
&!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 --&
&bean id=&sqlSessionFactory& class=&org.mybatis.spring.SqlSessionFactoryBean&&
&property name=&dataSource& ref=&dataSource& /&
&!-- 自动扫描mapping.xml文件 --&
&property name=&mapperLocations& value=&classpath:com/wls/websvn/mapping/*.xml&&&/property&
&!-- DAO接口所在包名,Spring会自动查找其下的类 --&
&bean class=&org.mybatis.spring.mapper.MapperScannerConfigurer&&
&property name=&basePackage& value=&com.wls.websvn.dao& /&
&property name=&sqlSessionFactoryBeanName& value=&sqlSessionFactory&&&/property&
&!-- (事务管理)transaction manager, use JtaTransactionManager for global tx --&
&bean id=&transactionManager&
class=&org.springframework.jdbc.datasource.DataSourceTransactionManager&&
&property name=&dataSource& ref=&dataSource& /&
applicationContext-service.xml
&version=&1.0&&encoding=&UTF-8&&&&xmlns=&http://www.springframework.org/schema/beans&&&&&&&xmlns:xsi=&http://www.w3.org/2001/XMLSchema-instance&&xmlns:aop=&http://www.springframework.org/schema/aop&&&&&&&xmlns:context=&http://www.springframework.org/schema/context&&xmlns:tx=&http://www.springframework.org/schema/tx&&&&&&&xsi:schemaLocation=&http://www.springframework.org/schema/beans&http://www.springframework.org/schema/beans/spring-beans-3.1.xsd&&&&&&&&&&&&&&http://www.springframework.org/schema/aop&http://www.springframework.org/schema/aop/spring-aop-3.1.xsd&&&&&&&&&&&&&&http://www.springframework.org/schema/context&http://www.springframework.org/schema/context/spring-context-3.1.xsd&&&&&&&&&&&&&&http://www.springframework.org/schema/tx&http://www.springframework.org/schema/tx/spring-tx-3.1.xsd&&&&&&&default-lazy-init=&true&&&&&&&&&&&&&&&&&&id=&managerTx&&advice-ref=&txAdvice&&&&&&&&&&&&&&&pointcut=&execution(*&*..service.*Manager.*(..))&&order=&0&&&&&&&&&&&&&&&id=&managerTxService&&advice-ref=&txAdvice&&&&&&&&&&&&&&&pointcut=&execution(*&*..service.*Service.*(..))&&order=&1&&&&&&&&&&&&&&&&&&&&&&&&&transaction-manager=&transactionManager&&&&&&&&&&&&&&&&&proxy-target-class=&true&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&base-package=&com.dcfs.qed&&&&&&&&&&&&&id=&txAdvice&&&&&&&&&&&&&&&&&&&&&&&&&&name=&get*&&read-only=&true&&&&&&&&&&&&&&&&&name=&set*&&read-only=&true&&&&&&&&&&&&&&&&&name=&exist*&&read-only=&true&&&&&&&&&&&&&&&&&name=&find*&&read-only=&true&&&&&&&&&&&&&&&&&name=&load*&&read-only=&true&&&&&&&&&&&&&&&&&name=&query*&&read-only=&true&&&&&&&&&&&&&&&&&name=&list*&&read-only=&true&&&&&&&&&&&&&&&&&name=&paging*&&read-only=&true&&&&&&&&&&&&&&&&&&&name=&update*&&propagation=&REQUIRED&&&&&&&&&&&&&&&&&&&rollback-for=&Exception&&&&&&&&&&&&&&&&&name=&del*&&propagation=&REQUIRED&&rollback-for=&Exception&&&&&&&&&&&&&&&&&name=&remove*&&propagation=&REQUIRED&&&&&&&&&&&&&&&&&&&rollback-for=&Exception&&&&&&&&&&&&&&&&&name=&save*&&propagation=&REQUIRED&&&&&&&&&&&&&&&&&&&rollback-for=&Exception&&&&&&&&&&&&&&&&&&&name=&add*&&propagation=&REQUIRED&&rollback-for=&Exception&&&&&&&&&&&&&&&&&&&name=&create*&&propagation=&REQUIRED&&&&&&&&&&&&&&&&&&&rollback-for=&Exception&&&&&&&&&&&&&&&&&&&&&&
hibernate的通用下次再整理
本文已收录于以下专栏:
相关文章推荐
在dao层上还可以包含一层,比如叫business,但是比dao更复杂点,一般一个dao类只对一个表操作,但是business可能会同时操作几个dao,这里不介绍。
        dao也叫业务...
Pat 的疑惑最近关注于 Spring 提供的数据访问技术,对于 Spring 相关的这几个项目有何不同我不是太明白:Spring-DAO (http://docs.spring.io/spring/...
DAO组件是整个java应用的吃就成访问的重要组件,Dao模式的主要内容为:应用中所有对数据库的访问都通过Dao组件完成,Dao组件封装了对数据库的增、删、改、查等操作。具体实现
下面对Spring面向切面编程(AOP)展开介绍,
基于bean的依赖注入基本解决的是对于一个功能将类之间的关系进行解耦
的问题,而面向切面编程基本是进一步将类的实现概念解耦成不同的部分。
其基本的功...
package com.jade.basung.
import com.jade.framework.base.criterion.C
springmvc 中dao层和service层的区别
由于项目中多个应用访问同一个数据库,并部署在同一个tomcat下面,所以没必要每个应用都配置连接池信息,这样可能导致数据库的资源分布不均,所以这种情况完全可以配置一个tomcat的全局连接池,所涉及应...
#最常用配置
#initialPoolSize:连接池初始化时创建的连接数,default : 3,取值应在minPoolSize与maxPoolSize之间
c3p0.initialPool...
本文转载自:/CQY/p/5854418.html
一:Dbutils是什么?(当我们很难理解一个东西的官方解释的时候,就让我们记...
本文提供了对c3p0与DBCP连接池连接MySql数据库时, 8小时内无请求自动断开问题的连接方案。首先介绍一下我在项目中遇到的问题,后面提供了使用DBCP连接池的解决方案。
基本问题解决
项目环境:...
他的最新文章
讲师:王哲涵
讲师:王渊命
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

我要回帖

更多关于 springmvc webservice 的文章

 

随机推荐