因为自己一直使用的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>