zoukankan      html  css  js  c++  java
  • 主键回填的几种方式

    主键回填的几种方式

    JDBC原生写法

    Connection con = null;
    PreparedStatement pa = null;
    ResultSet rs = null;
    
    con = JDBCUtils.getConnection();
    
    ps = con.prepareStatement("INSERT INTO person(username,password) VALUES(?,?)", PreparedStatement.RETURN_GENERATED_KEYS);
    
    ps.setObject(1,person.getUsername());
    ps.setObject(2,person.getPassword());
    int i = ps.executeUpdate();
    
    rs = ps.getGeneratedKeys();
    int id = -1;
    if(rs.next()){
    	id = rs.getInt(1);
    }
    
    // 主键
    System.out.println(id);
    
    解析:

    一、在构造 PreparedStatement 时加上PreparedStatement.RETURN_GENERATED_KEYS,指定需要主键回填。

    二 、执行更新操作后,调用getGeneratedKeys(),返回一个结果集,从这个游标集可以获取到刚刚插入主键id。

    mybatis写法

    方式一:

    在insert语句上,添加useGeneratedKeys=“true” keyProperty=“id”

    <mapper namespace="com.mapper.UserMapper">
        <insert id="insert" useGeneratedKeys="true" keyProperty="id" parameterType="com.domain.User">
            insert into t_user VALUES (#{id},#{username},#{sex},#{birthday},#{address})
        </insert>
    </mapper>
    
    方式二:

    利用MySQL自带的 last_insert_id() 函数查询刚刚插入的id

    <insert id="insert" parameterType="com.domain.User">
        <!--通过mybatis框架提供的selectKey标签获得自增产生的ID值-->
        <selectKey resultType="Integer" order="AFTER" keyProperty="id">
            select LAST_INSERT_ID()
        </selectKey>
    
        insert into t_user VALUES (#{id},#{username},#{sex},#{birthday},#{address})
    </insert>
    
    结果为:

    在这里插入图片描述

    总结:

    主键回显常用的有三种方式,这里推荐mybatis的两种方式。

    主键回填

    利用主键回填来获得主键值以便于以后的关联其他功能。

    JDBC中的Statement对象在执行插入SQL后,可以通过getGenetatedKeys方法来获得数据库生成的主键。在insert语句中有一个开关属性useGeneratedKeys,用来控制是否打开这一个功能,它的默认值是false。当打开了这一个开关,还要配置其属性keyProperty,告诉系统把主键的值放在哪一个属性中,如果存在多个主键,可以用","来隔开。

    1. <!--包含主键回填功能-->
    2. <insert id="insertRole" parameterType="role" useGeneratedKeys="true" keyProperty="id">
    3. insert into t_role(role_name,note) values(#{roleName},#{note})
    4. </insert>

    则主键的ID会对应赋值给这一个role 的POJO对象。

    =========================

    工作机会(内部推荐):发送邮件至gaoyabing@126.com,看到会帮转内部HR。

    邮件标题:X姓名X_X公司X_简历(如:张三_东方财富_简历),否则一律垃圾邮件!

    公司信息:

    1. 1.东方财富|上海徐汇、南京|微信客户端查看职位(可自助提交信息,微信打开);
  • 相关阅读:
    写了一个好玩的小软件, 监视鼠标以及键盘的动作, 全局钩子. HowTired
    2005的五一计划
    给你的爱一直很安静
    沉重悼念蓝色理想经典论坛原Flash版主[手工感情][Handmade]
    一不小心就成就了一段姻缘,哈哈
    基于dotnet的代码统计工具新版发布
    四天三夜 刻骨铭心 颠峰战将 永不言败
    怎么回事?现在博客园极不稳定
    屋漏偏逢连夜雨, 船迟又遇打头风
    适用于IE浏览器及非IE浏览器的xmlhttp脚本
  • 原文地址:https://www.cnblogs.com/Chary/p/14333283.html
Copyright © 2011-2022 走看看