附注:相信很多小伙伴在学习mybatis的时候,会有疑问,在插入数据后,怎么获取主键的id值,后续利用这个ID值,应用在其他方面,比如前端。本文根据如何获取自增主键ID值,提出相应的解决办法。
背景:
在开发过程中,我们有时会用到自增主键的值来进行一些操作,但是当主键id是自增的情况下,添加一条记录时,其主键id是不能使用的,发现主键id的值为null,应该如何解决呢?
解决方案:useGeneratedKeys=”true” keyProperty=”id”
xml文件:
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
insert into t_user values (null,#{username}, #{password}, #{age}, #{sex}, #{email})
</insert>
MyBatis层:
package com.mapper;
import com.pojo.User;
import java.util.List;
import java.util.Map;
public interface SelectMapper {
void insertUser(User user);
}
Service层:
@Test
public void insertUser() throws Exception{
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession(true);
SelectMapper selectMapper = sqlSession.getMapper(SelectMapper.class);
User user = new User(null, "ton", "123", 23, "男", "123@321.com");
selectMapper.insertUser(user);
System.out.println(user);
}
useGeneratedKeys=”true”
含义:设置是否使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty设置的领域模型属性中。Mybatis 配置文件 useGeneratedKeys 参数只针对 insert 语句生效,默认为 false。当设置为 true 时,表示如果插入的表以自增列为主键,则允许 JDBC 支持自动生成主键,并可将自动生成的主键返回,通过这个设置可以解决在主键自增的情况下通过实体的getter方法获取主键
另外,要注意的是,上面返回的主键是会映射到原来实体类中的,实体类中的参数会自动填充id 属性(由 keyProperty=“id” 指定),所以我们需要的id值绝不是sql注入返回的id值,因为sql注入返回的是受影响的行数。
keyproperty指明数据库中返回的主键id给实体类中的哪个属性
注意:这两个属性主要是在主键是自增的情况下,添加成功后可以直接使用主键值,其中keyProperty的值是对象的属性值不是数据库表中的字段名
看到这了,还不能点个赞吗?呜呜呜~