主鍵生成方式、獲取主鍵值


1、主鍵生成方式
  1) 支持主鍵自增,例如MySQL,SQL Server數據庫
  2) 不支持主鍵自增,例如Oracle數據庫
    需求: 插入一條新數據,立馬查詢這條數據.
2、獲取主鍵值
  ①對於JDBC原生代碼,需要在預編譯語句中設置返回參數,然后通過輸出獲取自增的主鍵值。🔗
  對於mybatis,若數據庫支持自動生成主鍵的字段(比如 MySQL 和 SQL Server),則可以設置 useGeneratedKeys=”true”,然后再把 keyProperty 設置到目標屬性上。通過目標屬性就可以獲得自增主鍵值。
 <!-- 
    useGeneratedKeys:可以使用自動生成的主鍵
    keyProperty:將自動生成的主鍵賦值給傳遞過來的參數的哪一個屬性
  -->
<
insert id="insertEmployee" parameterType="com.atguigu.mybatis.beans.Employee" databaseId="mysql" useGeneratedKeys="true" keyProperty="id"> insert into tbl_employee(last_name,email,gender) values(#{lastName},#{email},#{gender}) </insert>

 

package com.atguigu.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import com.atguigu.bean.Emp;
import com.atguigu.mapper.EmpMapper;
import com.atguigu.mapper.ParamMapper;

public class TestParam {

    @Test
    public void testCRUD() throws IOException {
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        ParamMapper mapper = sqlSession.getMapper(ParamMapper.class);
 Emp emp = new Emp(null, "admin", 23, "男"); mapper.insertEmp(emp); System.out.println(emp.getEid()); //emp對象的get方法
    }
}

 

  而對於不支持自增型主鍵的數據庫(例如 Oracle),則可以使用 selectKey 子元素:selectKey  元素將會首先運行,id  會被設置,然后插入語句會被調用:

<insert id="insertEmployee" 
        parameterType="com.atguigu.mybatis.beans.Employee"  
            databaseId="oracle">
        <selectKey order="BEFORE" keyProperty="id" 
                                       resultType="integer">
            select employee_seq.nextval from dual 
        </selectKey>    
        insert into orcl_employee(id,last_name,email,gender) values(#{id},#{lastName},#{email},#{gender})
</insert>

<insert id="insertEmployee" 
        parameterType="com.atguigu.mybatis.beans.Employee"  
            databaseId="oracle">
        <selectKey order="AFTER" keyProperty="id" 
                                         resultType="integer">
            select employee_seq.currval from dual 
        </selectKey>    
    insert into orcl_employee(id,last_name,email,gender) values(employee_seq.nextval,#{lastName},#{email},#{gender})
</insert>

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM