mybatis插入数据返回主键一般都是利用实体类,插入之后mybatis会自动将主键赋值给实体类的id。
可是只为了一个id重新写一个实体类太麻烦了。所以写这篇利用map方式插入返回主键 防止自己忘记。
插入方式跟插入实体类一样
运行环境:spring springmvc mybatis
首先利用map插入时,map里要有你的主键字段。
这里我的主键id是xtxxbm
controller控制器:
Map<String,Object> map=new HashMap<String,Object>();
map.put("xtxxbm",123);
map.put("xxbt", getParam(req, "xxbt"));
map.put("xxnr", getParam(req, "xxnr"));
map.put("jsbm_jsr", getParam(req, "jsbm_jsr"));
map.put("rybm_fsr", "123");
map.put("ryxm_fsr", "123456");
map.put("fssj", "123456");
ly0701Service.insertxtxx(map);
System.out.println( "i "+i+
" --"+map.get("xtxxbms").toString());
xml:
<insert id="insertxtxx" parameterType="java.util.Map" useGeneratedKeys="true" keyColumn="xtxxbm" keyProperty="xtxxbm">
insert into
lyl_xtxx(xxbt,xxnr,rybm_fsr,ryxm_fsr,jsbm_jsr,fssj)
values(
#{xxbt},
#{xxnr},
#{rybm_fsr},
#{ryxm_fsr},
#{jsbm_jsr},
#{fssj}
)
<selectKey resultType="int" order="AFTER" keyProperty="xtxxbm">
SELECT LAST_INSERT_ID()
</selectKey>
</insert>
serviceImp:
@Override
public int insertxtxx(Map map) {
// TODO Auto-generated method stub
return ly0701Dao.insertxtxx(map);
}
运行结果:
可以看出 最后返回的主键是放在map里的 而i只是代表插入是否成功
注意:map里的字段必须和主键字段相同。即使你用别名也不行。
我测试了一下:
xtxxbms不是主键字段,比主键字段多了一个s,虽然xml 写了as xtxxbms.但是map里的xtxxbms仍然是123.不是主键值。(SELECT LAST_INSERT_ID() as xtxxbms 这个会执行出来。但是xtxxbms无法通过map获取到真正的主键值)
map.put(“xtxxbms”,123);
SELECT LAST_INSERT_ID() as xtxxbms
所以即使你用别名 也必须是主键字段xtxxbm
参考网址:http://blog.youkuaiyun.com/liuxiao723846/article/details/44085703