zoukankan      html  css  js  c++  java
  • Mybatis 操作数据库的主键自增长

    本篇文章将研究mybatis 实现oracle主键自增的机制

    首先我们看对于同一张student表,对于mysql,sql server,oracle中它们都是怎样创建主键的

    在mysql中

    create table Student(
     Student_ID  int(6) NOT NULL PRIMARY KEY AUTO_INCREMENT,
     Student_Name varchar(10) NOT NULL,
     Student_Age int(2) NOT NULL
    );
    
    insert into student(student_name,student_age) values('zhangsan',20);
    

      

    在sql server中

    create table Student(
     Student_ID  int primary key identity(1,1),
     Student_Name varchar2(10) NOT NULL,
     Student_Age number(2) NOT NULL
    );
    insert into student(student_name,student_age) values('zhangsan',20);
    

      

    在oracle中

    create table Student(
     Student_ID  number(6) NOT NULL PRIMARY KEY,
     Student_Name varchar2(10) NOT NULL,
     Student_Age number(2) NOT NULL
    );

    而oracle如果想设置主键自增长,则需要创建序列

    CREATE SEQUENCE student_sequence 
    INCREMENT BY 1
    NOMAXVALUE
    NOCYCLE
    CACHE 10;
    
    insert into Student values(student_sequence.nextval,'aa',20);
    

      如果使用了触发器的话,就更简单了

     
    create or replace trigger student_trigger
      before insert on student  
      for each row
    begin
      select student_sequence.nextval into :new.student_id from dual;
    end student_trigger;
    /

    此时插入的时候触发器会帮你插入id

    insert into student(student_name,student_age) values('wangwu',20);
    

      至此,mysql,sql server,oracle中怎样创建表中的自增长主键都已完成。

      看一看出oracle的主键自增较mysql和sql sever要复杂些,mysql,sqlserver配置好主键之后,插入时,字段和值一一对应即可,数据库就会完成你想做的,但是在oracle由于多了序列的概念,如果不使用触发器,oracle怎样实现主键自增呢?

    <insert id="add" parameterType="Student">
      <selectKey keyProperty="student_id" resultType="int" order="BEFORE">
          select student_sequence.nextval from dual
        </selectKey>
         insert into student(student_id,student_name,student_age) values(#{student_id},#{student_name},#{student_age})
    </insert>
    

      或者 

    <insert id="save" parameterType="com.threeti.to.ZoneTO" >
        <selectKey resultType="java.lang.Long" keyProperty="id" order="AFTER" >
          SELECT SEQ_ZONE.CURRVAL AS id from dual
        </selectKey>
        insert into TBL_ZONE (ID, NAME ) values (SEQ_ZONE.NEXTVAL, #{name,jdbcType=VARCHAR})
    </insert>
    

      

    MyBatis 插入时候获取自增主键方法有二

      以MySQL5.5为例:

      方法1:

    <insert id="insert" parameterType="Person" useGeneratedKeys="true" keyProperty="id">
            insert into person(name,pswd) values(#{name},#{pswd})
    </insert> 

      方法2:

    <insert id="insert" parameterType="Person">
            <selectKey keyProperty="id" resultType="long">
                select LAST_INSERT_ID()
            </selectKey>
            insert into person(name,pswd) values(#{name},#{pswd})
    </insert>
    

      

      插入前实体id属性为0;

      插入后实体id属性为保存后自增的id;

  • 相关阅读:
    Weex框架源码分析(Android)(一)
    Android之手机振动和振铃
    使用selenium实现模拟淘宝登陆
    Android—修改button属性
    一个ROS的服务,使机器人向前移动指定距离
    用python写一个百度翻译
    python的特殊数字类型(无穷大、无穷小等)
    ESP32 开发笔记(十二)LittlevGL 添加自定义字体和物理按键
    设计的不错的网站
    轻功到底有没有?
  • 原文地址:https://www.cnblogs.com/panie2015/p/5807683.html
Copyright © 2011-2022 走看看