主键回显

记录一次面试经历。

面试官问:如果我们数据库的某一张表使用主键自增策略,当我们执行插入一条数据的时候,怎么获取该条数据的主键值呢?

当时脑子里就反应过来是主键回显,那么什么是主键回显(主键回填)呢?

打个比方,注册用户操作(假设我们使用的是主键自增策略,且后续操作需要用到新插入的主键的值),此时我们需要向数据库中插入一条新数据,数据插入成功后我们要能获取到该条主键的值。
tips:其实不单单只是插入操作需要用到主键回显,更新数据可能也会用到。

JDBC提供了解题思路

点击查看代码
//加载驱动
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/example?characterEncoding=utf-8","root","123456");
//定义插入sql
String sql = "insert into employee (name,age,salary) values (?,?,?)";
//PreparedStatement.RETURN_GENERATED_KEYS,返回生成的主键值
PreparedStatement preparedStatement = connection.preparedStatement(sql,PreparedStatement.RETURN_GENERATED_KEYS);
preparedStatement.setString(1,"tom");
preparedStatement.setInteger(2,24);
preparedStatement.setDouble(3,666.66);
preparedStatement.executeUpdate();
ResultSet rs = preparedStatement.getGeneratedKeys();
if(rs.next()){
//此处取到新增行的主键值
  int primaryKey = rs.getInt(1);
}

思考,如果是使用的Mybatis框架,我们应该如何实现主键回显呢?

例如,EmployeeMapper.xml中

点击查看代码
<insert id="insert" userGeneratedKeys="true" keyProperty="id" keyColumn="emp_id" parameterType="com.example.entity.Employee">
  insert into employee (name,age,salary) values (#{name},#{age},#{salary})
</insert>
userGeneratedKeys为true,即使用生成的主键值,keyProperty为对应实体类中用于存放主键值的属性,keyColumn为数据库表中的列名称
posted @   虚幻的光芒  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示