zoukankan      html  css  js  c++  java
  • mybatis获取自增主键

    一、使用JDBC的方式返回主键自增的值

    <insert id="insertSysUser" parameterType="SysUser" useGeneratedKeys="true" keyProperty="id" >
            insert into sys_user(user_name,password,user_info,head_img,create_time) values(
            #{userName},#{password},#{userInfo},#{headImg},#{createTime});
    </insert>
    <!--这里仅做主键的演示功能,没有做非空判断-->

    useGeneratedKeys :默认值为 false 如果设置为 true, MyBatis 使用 JDBgetGeneratedKeys 方法来取出由数据库内部生成的主键;
    keyProperty: MyBatis 通过 getGeneratedKeys 获取键值后将要赋值的属性;

    二、使用SelectKey返回主键的值

    使用JDBC返回主键的方法只适用于支持主键自增的数据库。有些数据库(如 Oracle )不提供主键自增的功能,而是使用序列得到 个值,然后将这个值赋给 id ,再将数据插入数据库对于这种情况,可以采用另外 种方式:使用< selectKey>标签来获取主键的值,这种方式不仅适用于不提供主键自增功能的数据库,也适用于提供主键自增功能的数据库;

    <!--这里使用mysql数据库-->
    <insert id="insertSysUser" parameterType="SysUser" > insert into sys_user(user_name,password,user_info,head_img,create_time) values( #{userName},#{password},#{userInfo},#{headImg},#{createTime}); <selectKey keyColumn="id" keyProperty="id" resultType="long" order="AFTER"> SELECT LAST_INSERT_ID () </selectKey> </insert>

    Oracle使用selectKey返回自增主键

    注:Oracle 方式的insert 语句中明确写出了 id列 和#{id}值,因为执行 selectKey 中的语句后 id 就有值了,我们需要把这个序列值作为主键值插入到数据库中,所以必须指定 id列,如果不指定这一列,数据库就会因为主键不能为空而抛出异常

    <selectKey keyColumn="id" keyProperty="id" resultType="long" order="BEFORE" > 
      SELECT IDSEQUENCE.NEXTVAL FROM DUAL
    </selectKey>

    selectKey标签 keyColumn keyProperty和上面useGeneratedKeys的用法含义相同,这esultType用于设置返回值类型rder属性的设置和使用的数据库有关MySQL 数据库中, order 属性设置的值是 AFTER,因为当前记录的主键值在 insert 语句执行成功后才能获取 而在 Oracle 数据库中, order 的值要设置为 BEFORE ,这是因为 Oracl中需要先从序列获取值,然后将值作为主键插入到数据库中;

    其他数据库使用selectKey返回主键如下:

    DB2 使用 VALUES IDENTITY VAL LOCAL ()
    SQLSERVER 使用 SELECT SCOPE IDENTITY ()。
    CLOUDSCAPE 使用 VALUES IDENTITY VAL LOCAL ()
    DERBY 使用 VALUES IDENTITY VAL LOCAL ()
    HSQLDB 使用 CALL IDENTITY ()
    SYBASE 使用 SELE CT @@IDENTITY
    DB2_MF 使用 SELECT IDENTITY VAL LOCAL(} FROM SYSIBM  SYSDUMMYl
    FORMIX 使用 select dbinfo ('sq lea  sqlerrdl ’ ) from systables where 
    tabid=l
  • 相关阅读:
    忍者X2简介+安装包+安装环境说明 [复制链接]
    拖拽的功能,可以看看这个
    openNI驱动控制kinect马达
    室内机器人漫游
    石头剪子布 C++多态实现
    PCL的KinectFusion开源实现
    Microsoft Kinect SDK中的Event Model
    小说下载阅读器_章节保存为XML并显示
    面试题:猫叫、老鼠跑、人醒的一点看法
    JQuery EasyUI之treegrid级联勾选的简单改进版
  • 原文地址:https://www.cnblogs.com/Yly-G/p/10570152.html
Copyright © 2011-2022 走看看