主键生成方式、获取主键值

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>
复制代码

 

 
posted @   kkzhang  阅读(1432)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示