03.save 回填主键值
在上面 save 的基础上进行更改
1.获取自增主键的值
接口方法
java
// 保存
int save(User user);
方法映射
xml
<!--
useGeneratedKeys="true": 开启获取自增主键的策略
keyColumn: 指定数据库主键的列名
keyProperty: 指定对应的主键属性, ps(获取到主键值后, 将这个值封装给javaBean的哪个属性)
-->
<insert id="save" parameterType="org.hong.pojo.User" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
insert into user(name, pwd) values(#{name}, #{pwd})
</insert>
测试用例
java
@Test
public void save(){
// 1.获取sqlSession对象
SqlSession sqlSession = MyBatisUtil.getSqlSession();
// 2.获取需要的mapper接口的代理对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
// 3.调用对应的方法执行操作
User user = new User();
user.setName("SAVE ID");
user.setPwd("123");
int save = mapper.save(user);
System.out.println(save);
System.out.println(user);
// 4.提交事务
sqlSession.commit();
// 5.关闭sqlSession
sqlSession.close();
}
控制台打印
shell
## 发送的sql语句
[main] [org.hong.mapper.UserMapper.save]-[DEBUG] ==> Preparing: insert into user(name, pwd) values(?, ?)
[main] [org.hong.mapper.UserMapper.save]-[DEBUG] ==> Parameters: SAVE ID(String), 123(String)
[main] [org.hong.mapper.UserMapper.save]-[DEBUG] <== Updates: 1
1
## 主键回填到了对象中
User(id=4, name=SAVE ID, pwd=123)
2.获取 Oracle 序列的值
这里就不具体演示了,看不懂就算了,反正用的也不多。
xml
<insert id="addEmp">
<!--
selectKey: 配置查询主键的sql语句
keyProperty:查出的主键值封装给javaBean的哪个属性
order:
BEFORE:当前sql在插入sql之前运行
AFTER:当前sql在插入sql之后运行
resultType:查出的数据的返回值类型
BEFORE运行顺序:
先运行selectKey查询id的sql;查出id值封装给javaBean的id属性
再运行插入的sql;就可以取出id属性对应的值
AFTER运行顺序:
先运行插入的sql(从序列中取出新值作为id);
再运行selectKey查询id的sql, 回填到javaBean的id属性中
-->
<selectKey keyProperty="id" order="BEFORE" resultType="Integer">
<!-- 编写查询主键的sql语句 -->
select EMPLOYEES_SEQ.nextval from dual
</selectKey>
<!-- 插入时的主键是从序列中拿到的 -->
<!-- BEFORE:-->
insert into employees(EMPLOYEE_ID,LAST_NAME,EMAIL)
values(#{id},#{lastName},#{email})
</insert>