背景:目前有个插入语句需要获取插入记录的id 因为id是自增长的,所以要在插入后返回这个id
错误1:
mapper.xml:
<!-- 新增 返回自增长id-->
<insert id="save" parameterType="pd" resultType="int">
insert into sys_push(
username,title,content,publisher,pushtime
) values (
#{username},#{title},#{content},#{publisher},#{pushtime}
)
</insert>
我天真的以为 需要用resultType返回一个int类型的,结果项目启动直接报错了,因为insert方法根本就没有resultType! 哎 基础不扎实啊。。。
之后百度了下 哦 原来返回id是这么用的
正确: keyProperty="id" useGeneratedKeys="true"
<!-- 新增 返回自增长id-->
<insert id="save" keyProperty="id" useGeneratedKeys="true" parameterType="pd">
insert into sys_push(
username,title,content,publisher,pushtime
) values (
#{username},#{title},#{content},#{publisher},#{pushtime}
)
</insert>
重新启动后 调用查询语句发现:
int id = pushService.save(pd);
怎么id都是1。。。。
错误2:
又百度了一下,原来insert这个返回值返回的是插入成功的条数,不是id啊。。。哎 基础不扎实啊。。。
正确:
在查询后,要获取的id其实已经在传入对象的参数里了,用xx.getId()方法就可以直接获取到了。
int insertNum = pushService.save(pd);//插入的条数
Long id = (Long) pd.get("id");//获取id
我这里传入的是封装的pd对象,获取方法是get("id")
如果是传入user类,获取方式是 Long id = user.getId();//该对象的自增ID
注意: 返回的id是long类型
over!