因爲自己一直使用的Siebel的BC,簡直太方便了,師父把java和Siebel集成後,各種Model進行的增刪改查簡直不要太簡單。根本不需要考慮類。直接使用通用的增刪改,集成的時候提供BC與Model映射,getRawMapping,以及BC,BO名字,Siebel就知道什麼類型的Model.比如:合同,訂單,報價等等,都可以使用通用的方法。asynEdit,asynDel.
可能用的太方便了,導致我一下子意識不到自己開發的時候該怎麼去進行增刪改查?比如通用的,不使用Siebel BC的話。該怎麼去做呢?因爲你要分辨 傳入的參數是哪些?類型是什麼?更改的時候哪些字段是需要進行更改的?ID是怎麼區分是哪個表的(合同?訂單?)這些看起來還是有點複雜的。後來問了師父,師父說了,有一個模塊不是用Siebel的BC,而是直接操作數據庫的,增刪改都要寫很多類型,該模塊爲沙盤,又分爲客戶基本信息塊,工作內容塊,地區塊,生態塊,採購歷史塊。等都要進行CRUD.
很可能我從這裏出去後,很少會再次接觸Siebel.所以下面的這些CRUD纔是我以後應該要寫的。看看師父的代碼吧:
moduel: xxxxx.crm.web
包: com.xxxxx.web.sand
C:Controller層:
/**
*沙盤模塊
*/
@Controller
@RequestMapping("/sand")
public class SandController{
@Autowired
SandTableMapper mapper;
@Autowired
ContractController contractController;
//客戶基本信息塊--查詢列表
@RequestMapping("/selectBaseInfo.do")
@ResponseBody
public String selectBaseInfo( SandTableBaseInfoModel model )throws Exception{
model.setLoginId(SystemUtils.getUserModel().getRowId());
model.setLoginName(SystemUtils.getUserModel().getLoginName());
List<?> list = mapper.selectBaseInfo(model);
return StringUtils.resultSuccessToJson(list);
}
//刪除
@RequestMapping("/asynDelete.do")
@ResponseBody
public String asynDelete(String method,String rowId)throws Exception{
if(StringUtils.isBlank(rowId)){ throw new ExceptionWithCode("sand.0008"); }
//利用反射進行刪除
Class<? extends SandTableMapper> clazz = mapper.getClass(); //獲取字節碼對象
clazz.getMethod(method,String.class).invoke(mapper,rowId);//調用方法
return StringUtils.resultSuccessToJson(rowId);
}
//添加修改
@RequestMapping("/asynEdit.do")
@ResponseBody
public String asynEditBaseInfo( @RequestBody SandTableBaseInfoModel model ,HttpServeltRequest request,HttpServletResponse response )throws Exception{
model.setLoginId(SystemUtils.getUserModel().getRowId());
ContractorModel contractorModel = new ContractorModel();
contractorModel.setJobtitle(model.getJobTitle());
contractorModel.setEmail(model.getEmailAddr());
contractorModel.setBirthdate(model.getBirthday());
contractorModel.setRowId(model.getContractId());
conrtractController.asynEdit(contractorModel,request,response);
if(StringUtils.isNotNullOrEmptyStr(model.getRowId())){
mapperupdateBaseInfo(model);
}else{
//新增
model.setRowId(mapper.getNewRowId());
mapper.insertBaseInfo(model);
}
return StringUtils.resultSuccessToJson(model.getRowId());
}
//沙盤下其他塊也類似。
}//類尾巴
moduel: xxxxx.crm.domain
包: com.xxxxx.domain.sand
public interface SandTableMapper{
//獲取新rowId
String getNewRowId();
//平臺基礎信息塊
List<SandTableBaseInfoModel> selectBaseInfo( SandTableBaseInfoModel model );
void insertBaseInfo( SandTableBaseInfoModel model );
void updateBaseInfo( SandTableBaseInfoModel mdoel );
void deleteBaseInfo(String rowId); //方法名要告訴前端。
}
SandTableMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.xxxxx.domain.sand.SandTableMapper" >
<!--獲取下一個RowId-->
<select id="getNewRowId" ResultType="String">
select s_sequence_pkg.get_next_rowid from dual
</select>
<!--平臺基礎信息-->
<resultMap id="ResultBaseInfoMapper" type="com.xxxxx.model.sand.SandTableBaseInfoModel" >
<id column="ROW_ID" property="rowId" />
<result column="" property="" />
<result column="" property="" />
<result column="" property="" />
<result column="" property="" />
<result column="" property="" />
<result column="" property="" />
<result column="" property="" />
<result column="" property="" />
</resultMap>
<!--平臺基礎信息-->
<select id="selectBaseInfo" resultMap="ResultBaseInfoMapper" parameterType>
select T2.ROW_ID ,
T1.ROW_ID AS ACC_ID,/*客戶id*/
T1.NAME AS ACC_NAME,/*客戶名稱*/
T2.RELATION,/*與大話的關係*/
T3.LAST_NAME AS CONTACT_NAME,/*姓名*/
。。。
from SIEBEL.S_ORG_EXT T1,
SIEBEL.T_ACCOUNT_BASEINFO T2,
....
<where>
T1.ROW_ID(+) = T2.ACCOUNT_ID AND
T2.CONTACT_ID= T3.PAR_ROW_ID(+)
...
<if test ="accountId != null and accountId != '' ">AND T2.ACCOUNT_ID = #{accountId} </if>
<if test ="rowId!= null and rowId!= '' ">AND T2.ROW_ID = #{rowId} </if>
</where>
order by T3.JOB_TITLE,T3.LAST_NAME
</select>
<!--插入語句-->
<select id="insertBaseInfo" parameterType="com.xxxxx.model.sand.SandTableBaseInfoModel" >
insert into SIEBEL.T_ACCOUNT_BASEINFO
(ROW_ID,CREATED,LAST_UPD......)
select #{rowId,jdbcType=VARCHAR}, systimestamp, systimestamp... from dual
<!---也可以使用 values (#{rowId,jdbcType=VARCHAR}, systimestamp, systimestamp... )->
</select>
<!--更新語句-->
<select id="updateBaseInfo" parameterType="com.xxxxx.model.sand.SandTableBaseInfoModel" >
update SIEBEL.T_ACCOUNT_BASEINFO
<trim prefix = "set" suffixOverrides="," >
CREATED = systimestamp,
LAST_UPD = systimestamp,
LAST_UPD_BY = #{loginId},
<if test = "relation != null "> RELATION = #{relation} </if>
</trim>
where ROW_ID = #{rowId}
</select>
<!--刪除語句-->
<select id="deleteBaseInfo" parameterType = "string">
delete from SIEBEL.T_ACCOUNT_BASEINFO where ROW_ID = #{rowId}
</select>
</mapper>