MyBatis返回插入的數據主鍵

在MyBatis開發過程中,我們經常需要解決一個問題:當插入一條數據的時候,我在接下來的操作中我需要知道剛剛插入的是哪條數據,這樣我們需要獲取插入數據的主鍵;如何在MyBatis中解決這個問題呢?


首先,我這裏有兩張表,其中計算層數表和計算參數表有這一對多的關係,層次編號在計算層數表中爲主鍵在計算參數表中爲主鍵,我現在做的操作是,先向計算層數表中插入一條記錄:

	calLayer = new CalLayer();
	calLayer.setCalOrder(Integer.parseInt(str[3*i]));
	calLayer.setPrjid(1);
	int typeId = findTypeIdByName(typeName);
	calLayer.setCalTypeid(typeId);
	calLayerMapper.insert(calLayer);
其中CalLayer類爲計算層數表所對應的實體類。

然後在緊接的操作中我需要向計算參數表中插入數據。並且需要保證這兩次操作的層次編號保持相同。這時,我們需要對CalLayer類所對應的xxxMapper.xml文件進行修改:

將這裏紅色的部分去掉,紅色部分作用是查詢出對應的數據庫中主鍵最大值。


然後在<insert>標籤中加入 useGeneratedKeys="true" keyProperty="layerid"者兩個屬性即可。

<insert id="insert"  useGeneratedKeys="true" keyProperty="layerid" parameterType="cn.caculate.model.CalLayer" >
    insert into cal_layer (layerId, prjid, cal_order, 
      cal_typeid)
    values (#{layerid,jdbcType=INTEGER}, #{prjid,jdbcType=INTEGER}, #{calOrder,jdbcType=INTEGER}, 
      #{calTypeid,jdbcType=INTEGER})
  </insert>

現在,我們就可以像計算參數表進行添加數據了。

layerParms = new LayerParms();
layerParms.setLayerid(calLayer.getLayerid());
其中:calLayer即爲上面創建的CalLayer對象。

calLayer.getLayerid()即獲得上面插入語句calLayerMapper.insert(calLayer)數據的主鍵。

還有其他方法的夥伴們,歡迎共享。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章