欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

OpenJWeb快速開發平臺自動創建基于事務的業務邏

系統 1769 0

OpenJweb快速開發平臺在定義表的頁面中增加了"是否創建業務邏輯類"的選項,當勾選這個選項后,平臺自動生成針對此

表的業務邏輯接口和實現類,一般主明細表的主表應該勾選此選項,當然也可以所有表都生成對應的業務邏輯類.平臺除了生成

java代碼,還自動配置Spring的配置文件,并為新生成的類配置事務代理,下面是由平臺生成的業務邏輯接口的源代碼(接口默認提供一個刪除多行的方法,如果需要別的接口,可在生成后的接口和實現類源文件中自己添加):

?

package org.openjweb.core.service;

import javax.servlet.http.HttpServletRequest;

public interface ICrmDistributionService
{
??? public String deleteByIds(String entityClass, String fieldName, String rowIds[], HttpServletRequest request) throws Exception;
??? public void setDbService(String serviceName);
??? public String getDbService();
}

?

下面是生成的業務邏輯實現類代碼(渠道客戶表的業務邏輯):

package org.openjweb.core.service.impl;

import org.apache.log4j.Logger;
import org.openjweb.core.service.BaseMasterDetailService;
import org.openjweb.core.service.ICrmDistributionService;

public class CrmDistributionServiceImpl extends BaseMasterDetailService implements ICrmDistributionService
{
??? private static final Logger logger = Logger.getLogger(CrmDistributionServiceImpl.class);
}

這個實現類很簡單,deleteByIds方法的實現是寫在抽象類BaseMasterDetailService里了,下面是抽象類的代碼:

?

package org.openjweb.core.service;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.Logger;
import org.openjweb.core.entity.CommMasterDetailRel;
?

public abstract class BaseMasterDetailService
{
?private static final Logger logger = Logger.getLogger( BaseMasterDetailService.class);
?protected String dbService ="";

?public String getDbService()
?{
??return this.dbService;
?}

?public void setDbService(String serviceName)
?{
??this.dbService = serviceName;
?}

?public String deleteByIds(String entityClass, String fieldName, String[] rowIds, HttpServletRequest request) throws Exception
?{
??String sMessage="";
??//如果沒有設置主外鍵,要分別刪除主明細表
??//如果設置了主外鍵,則只刪除主表,如果數據庫沒設置級聯,則需要開發者決定是否同時刪除主明細表還是提示錯誤信息。
??if(rowIds==null||rowIds.length==0)return "";
??IDBSupportService service = (IDBSupportService)ServiceLocator.getBean(this.dbService);
??String masterTableName="";//主表表名
??String masterColName="";//主表字段名
??Object obj = service.getJdbcTemplate().queryForObject("select table_name from comm_table_def where cls_name='"+entityClass+"'", String.class);
??????? if(obj!=null)masterTableName=obj.toString();
??
??????? for(int i=0;i<rowIds.length;i++)//頁面上選中多行,逐行刪除
??????? {
??? ??//刪除明細,這里混合使用hibernate和jdbctemplate有問題,所以全部使用jdbcTemplate
??????????? //從主明細關系表中檢索主表對應哪些明細表,遍歷明細表進行刪除
??????????? List list = service.findListByFieldValue("org.openjweb.core.entity.CommMasterDetailRel", "masterCol", fieldName, true, "masterCol");
??????????? CommMasterDetailRel relEnt = null;
??????????? if(list!=null&&list.size()>0)
??????????? {
??????????? ?for(int j=0;j<list.size();j++)
??????????? ?{
??????????? ??
??????????? ??relEnt = (CommMasterDetailRel)list.get(j);
??????????????? ?String detailTableName="";//子表表名
??????????????? ?String detailColName="";//子表字段名
??????????????? ?detailTableName = relEnt.getDetailTable();
??????????????? ?detailColName = relEnt.getDetailCol();
??????????????? ?service.getJdbcTemplate().execute("delete from "+detailTableName+" where "+detailColName+"='"+rowIds[i]+"'");
??????????? ?}
??????????? }
??????? ?
??? ??//if(true) throw new Exception("test trans");? //這里拋出異常,則整個事務回滾
??????? ?//刪除主表
??????? ?//service.getJdbcTemplate().execute("delete from hr_resume where row_id='"+rowIds[i]+"'");
??????? ?service.getJdbcTemplate().execute("delete from "+masterTableName+" where row_id='"+rowIds[i]+"'");
??? ??
??????? ?//測試事務,如果有異常,事務失敗!
??????? ?//if(true) throw new Exception("刪除失敗!");
??????? }
??return sMessage;
?}

}

在上面的抽象類里,從主明細表關系表中獲取此表是否有子表,如果有子表,則刪除子表記錄,刪除后再刪除主表記錄,當然在實際應用中主子表有可能建立了主外鍵級聯刪除,如果沒有建主外鍵,則上面的操作先刪除子表,后刪除主表,如果中間有異常,則整個事務回滾.在上面的代碼中沒有事務處理的代碼,這是因為事務管理是由Spring容器控制的,下面是平臺生成的spring配置文件:

??? <!-- OpenJWeb create Service,don't delete this row -->
??? <bean id="ICrmDistributionService" parent="txProxyTemplate1">
??????? <property name="target">
??????????? <bean class="org.openjweb.core.service.impl.CrmDistributionServiceImpl">
??????????????? <property name="dbService" value="IDBSupportService3"/>
??????????? </bean>
??????? </property>
??? </bean>

其中 parent="txProxyTemplate1">指明了一個事務代理:

?

<bean id="txProxyTemplate1" abstract="true"
??class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
??<property name="transactionManager">
???<ref bean="demoTxManager" />
??</property>
??<property name="transactionAttributes">
??<props>
??<!-- 如果下面的被注釋掉,則方法內部第一次寫數據庫成功后下一步拋異常,數據庫數據回提交 -->
?? ?<prop key="update*">PROPAGATION_REQUIRED,-Exception</prop>
???<prop key="insert*">PROPAGATION_REQUIRED,-Exception</prop>
???<prop key="*">PROPAGATION_REQUIRED,readOnly,-Exception</prop>
?
???</props>
??</property>
?</bean>

此事務代理指定update,insert,*等方法當出現Exception異常時回滾,*表示所有方法出現異常都回滾.

?

由于OpenJWeb實現了由平臺生成業務邏輯類并自動配置 Spring配置文件,所以對于不是很熟悉Spring的朋友提供了很大的方便.在實際開發中如果需要實現更多的業務邏輯,可在生成的源文件中添加新的方法.

?

作者聯系方式:

QQ:29803446

msn:baozhengw999@hotmail.com

?

?

?

?

OpenJWeb快速開發平臺自動創建基于事務的業務邏輯接口和實現類


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。。?/p>

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 一级毛片免费视频 | 亚洲精品国产自在久久出水 | 天天色综合社区 | 国产精品久久久久久久久免费 | 9久久99久久久精品齐齐综合色圆 | 国产亚洲一区二区三区在线观看 | 欧美777精品久久久久网 | www.久久久| 免费香蕉视频 | 欧美一级久久久久久久大片 | 欧美系列第一页 | 欧美操操操 | 久久综合九色综合欧洲 | 国产二区三区毛片 | 欧美精品一区二 | 99re热这里只有精品视频 | 国产视频网 | 成人免费视频观看 | 中文字幕日韩欧美 | 日韩欧美中文字幕在线观看 | 一个看片免费视频www | 三级网站免费观看 | 亚洲综合一二三区 | 五月婷婷综合在线视频 | av日韩一区二区三区 | 12306播播影院午夜 | 亚洲天堂av在线 | 日本免费一区二区三区视频 | 中文区永久区 | 午夜精品久久久久久久99黑人 | 欧美精品九九99久久在观看 | 99精品丰满人妻无码A片 | 成人网在线 | 欧美高清18 | 91免费看片 | 999精品嫩草久久久久久99 | 精品成人免费 | 亚洲一区二区色 | 日本高清色本在线www | www.国产欧美 | 午夜精品久久久久久99热软件 |