增刪改查--直接操作的數據庫

因爲自己一直使用的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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章