mybatis 向数据库插入数据时获取其主键值(序列值)的实现小记

来源:互联网 发布:可以看腐剧的软件 编辑:程序博客网 时间:2024/05/21 01:32

本文以oracle数据库为例,简单说明(演示项目用的springboot+mybatis+oracle,只贴部分关键代码):

分两种情况:

01、在mapper接口传参时,以java实体类传参;

public interface UserMapper {      int insertUser(@Param("user") User user);}

02、在mapper接口传参时,以map传参;

public interface UserMapper {      int insertUser(@Param("paramMap") Map<String, Object> paramMap);}

首先第一种情况(01、在mapper接口传参时,以java实体类传参)

  首先创建一个User实体类:

public class User {private Integer id;private String name;set get...方法忽略}
然后在xml中加如下代码(暂不解释代码,在"02、"统一解释):

<insert id="insertUser" parameterType="com.test.User" >    <selectKey keyProperty="id" resultType="int" order="BEFORE" >        select USER_SEQ.nextval from DUAL     </selectKey>    insert into USER    (id, name)    values    (#{id}, #{name})</insert>
在业务层的代码如下:
User user = new User();user.setName("zhangsan");//向用户表中新加一个用户,返回数据库受影响的行数int count = userMapper.insertUser(user);//获取新用户的主键id值,并打印到控制台System.out.print(user.getId());

其次第二种情况下(02、在mapper接口传参时,以map传参)

首先在xml中加如下代码:

<insert id="insertUser" parameterType="hashMap" >    <selectKey keyProperty="paramMap.id" resultType="int" order="BEFORE" >        select USER_SEQ.nextval from DUAL     </selectKey>    insert into USER    (ID, NAME)    values    (#{paramMap.id}, #{paramMap.name})</insert>

对上面代码简单解释一下:order = "BEFORE" 代表在执行insert语句之前先执行selectKey中的语句,这时我们先获取了User表的序列的下一个值,keyProperty="paramMap.id" 就是将获取到的序列值赋值给paramMap中的id,这时再执行insert语句的时候#{paramMap.id} 就已经是获取到的序列值了,这样我们在程序中也就获取到了新插入数据的id值,关键代码在下面贴上;

然后在代码里面(service层或者controller层),调用dao层时添加如下代码(只贴关键代码)

@Autowiredprivate UserMapper userMapper;
Map<String, Object> paramMap = new HashMap<String, Object>();paramMap.put("id", null);paramMap.put("name","zhangsan");//向用户表中新加一个用户,返回数据库受影响的行数int count = userMapper.insertUser(paramMap);//获取新用户的主键id值,并打印到控制台System.out.print(paramMap.get("id").toString());
阅读全文
0 0
原创粉丝点击