之前在网上搜了很多教程示例,但是实现起来都没有成功,弄了一下午终于给弄好了。
首先是DAO里,声明方法,注意我传入的参数是自定义的类型。还有注意我这儿方法返回类型是void。int也行,返回的是数据库改变行的行数。
public void addAtlas(@Param("atlas")Atlas atlas);
<insert id="addAtlas" parameterType="Atlas" useGeneratedKeys="true" keyProperty="atlas.id" keyColumn="图册ID" >
insert into 矿权图册 (
用户ID,
图册名称,
年度,
图册类型,
是否发布
<if test="atlas.atlasDescription!=null">,描述信息</if>
)
values(
#{atlas.userId},
#{atlas.atlasName},
#{atlas.atlasYear},
#{atlas.atlasType},
#{atlas.published}
<if test="atlas.atlasDescription!=null">,#{atlas.atlasDescription}</if>
)
</insert>
这里keyProperty="atlas.id"这句话很重要,由于我传入的是atlas,所以要这样写才对,意思是将返回的ID值设置到atlas这个对象的id属性上,如果直接写成“id”,将一直报错。Parameter 'id' not found. Available parameters are [param1, atlas]] with root cause。Parameter 'id' not found. Available parameters are [param1, atlas]
然后在biz类里,进行处理。
System.out.println(atlasDao.addAtlas(atlas));
System.out.println(111111111);
System.out.println(atlas.getId());
然后由于在mapper文件里设置了atlas.id,所以用getId()方法就可以正确取到主键的值了。还有貌似实体类和数据库字段起名不一样,也要先配置下resultMap,好像是这样。