在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)數據的主鍵。
還有其他方法的夥伴們,歡迎共享。