方式一
1
2
3
4
5
<insert id="insertAndGetId" useGeneratedKeys="true" keyProperty="userId"
parameterType="com.chenzhou.mybatis.User">
insert into user(userName, password, comment)
values(#{userName}, #{password}, #{comment})
</insert>
1
2
3
4
5
User user = new User();
user.setUserName("ceshi");
user.setPassword("123456");
userDao.insertUser(user);
System.out.println("插入后主键为:" + user.getUserId());
useGeneratedKeys="true"表示给主键设置自增长keyProperty="userId"表示将自增长后的id赋值给实体类中的userId字段parameterType="com.chenzhou.mybatis.User"这个属性指向传递的参数实体类- 实体类中uerId要有
getter()和setter()方法
方式二
1
2
3
4
5
6
7
<insert id="insertProduct" parameterType="domain.model.ProductBean" >
<selectKey resultType="java.lang.Long" order="AFTER" keyProperty="productId">
SELECT LAST_INSERT_ID()
</selectKey>
INSERT INTO t_product(productName, productDesrcible, merchantId)
values(#{productName}, #{productDesrcible}, #{merchantId})
</insert>
<insert></insert>中没有resultType属性,但是<selectKey></selectKey>标签是有的order="AFTER"表示先执行插入语句,之后再执行查询语句,可被设置为BEFORE或AFTER,如果设置为BEFORE,那么它会首先选择主键,设置keyProperty然后执行插入语句,如果设置为AFTER,那么先执行插入语句,然后是selectKey元素,这和如Oracle数据库相似,可以在插入语句中嵌入序列调用keyProperty="userId"表示将自增长后的id赋值给实体类中的userId字段SELECT LAST_INSERT_ID()表示MySQL语法中查询出刚刚插入的记录自增长id- 实体类中uerId要有
getter()和setter()方法