方式一
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()
方法