亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

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

系統 1681 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元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 五月婷婷综合色 | 欧美男女性生活视频 | 在线免费观看毛片 | 99热久久国产精品这里 | 香蕉视频网站免费观视频 | 国产大片中文字幕 | 欧洲精品在线观看 | 国产高清国内精品福利99久久 | jizz成熟丰满中国妇女 | 热久久影院| 中国女人精69xxx | 国产特黄一级毛片特黄 | 亚洲欧美一区二区三区不卡 | 亚洲精品tv久久久久久久久 | 狠狠干影视 | 国产在线视频福利 | 欧美高清视频www夜色资源网 | 亚洲精品99久久一区二区三区 | 神马影院我不卡888 神马影院我不卡手机 | 鲁丝丝国产一区二区 | 九九99| 日韩在线视精品在亚洲 | 国产成人免费a在线视频色戒 | 亚洲精品影院一区二区 | 久久精品加勒比中文字幕 | 亚洲国产中文字幕 | 伊人久久亚洲综合天堂 | 国产一久久香蕉国产线看观看 | 久久国产精品久久精品国产 | 真人毛片免费拍拍拍aa视频 | 久久这里只精品热免费99 | 精品一本久久中文字幕 | 亚洲成a人在线播放www | 2021国产精品久久久久 | 国产伦精品一区二区三区免 | 国产成人亚洲综合网站不卡 | 亚洲综合激情九月婷婷 | 久久久久久久久久爱 | 日韩毛片基地一区二区三区 | 成熟热自由日本语亚洲人 | 九九视频免费观看 |