主键生成方式、获取主键值
1、主键生成方式
1) 支持主键自增,例如MySQL,SQL Server数据库
2) 不支持主键自增,例如Oracle数据库
1) 支持主键自增,例如MySQL,SQL Server数据库
2) 不支持主键自增,例如Oracle数据库
需求: 插入一条新数据,立马查询这条数据.
2、获取主键值
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>