常规
网上有好多教程,大概都差不多,一共有两种.比较简单的就是
//mapper
Long 方法(User user);
<insert id="方法" useGeneratedKeys="true" keyProperty="id" parameterType="com.test.User">
insert into user
(`name`,age)
values
(
#{name},
#{age}
)
</insert>
- useGeneratedKeys 设置true
- keyProperty 对应实体类的字段
- parameterType 参数类型
然后在传入的参数里getId()即可.
坑
我的写法略有不同,结果就一致获取不到,后来灵机一动,感受到了来自mybatis设计者的召唤.具体写法如下:
//mapper
Long 方法(@Param(value = "u") User user);
<insert id="方法" useGeneratedKeys="true" keyProperty="id" parameterType="com.test.User">
insert into user
(`name`,age)
values
(
#{u.name},
#{u.age}
)
</insert>
解决
其实就是参数经过注解的形式命名之后,mapper.xml中的keyProperty就不能直接写字段名了,要加上参数名u.id,如下:
<insert id="方法" useGeneratedKeys="true" keyProperty="u.id" parameterType="com.test.User">
insert into user
(`name`,age)
values
(
#{u.name},
#{u.age}
)
</insert>
总结
在多参数的时候多用@Param来修饰参数,Mapper.xml使用参数时也要对应上,希望能帮到迷路的人.