|
在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)数据的主键。
还有其他方法的伙伴们,欢迎共享。
|
|
|