本文以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 paramMap);
}
首先第一种情况(01、在mapper接口传参时,以java实体类传参)
首先创建一个User实体类:
public class User {
private Integer id;
private String name;
set get...方法忽略
}
然后在xml中加如下代码(暂不解释代码,在"02、"统一解释):
select USER_SEQ.nextval from DUAL
insert into USER
(id, name)
values
(#{id}, #{name})
在业务层的代码如下:
User user = new User();
user.setName("zhangsan");
//向用户表中新加一个用户,返回数据库受影响的行数
int count = userMapper.insertUser(user);
//获取新用户的主键id值,并打印到控制台
System.out.print(user.getId());
其次第二种情况下(02、在mapper接口传参时,以map传参)
首先在xml中加如下代码:
select USER_SEQ.nextval from DUAL
insert into USER
(ID, NAME)
values
(#{paramMap.id}, #{paramMap.name})
对上面代码简单解释一下:order = "BEFORE" 代表在执行insert语句之前先执行selectKey中的语句,这时我们先获取了User表的序列的下一个值,keyProperty="paramMap.id" 就是将获取到的序列值赋值给paramMap中的id,这时再执行insert语句的时候#{paramMap.id} 就已经是获取到的序列值了,这样我们在程序中也就获取到了新插入数据的id值,关键代码在下面贴上;
然后在代码里面(service层或者controller层),调用dao层时添加如下代码(只贴关键代码)
@Autowired
private UserMapper userMapper;
Map paramMap = new HashMap();
paramMap.put("id", null);
paramMap.put("name","zhangsan");
//向用户表中新加一个用户,返回数据库受影响的行数
int count = userMapper.insertUser(paramMap);
//获取新用户的主键id值,并打印到控制台
System.out.print(paramMap.get("id").toString());