MyBatis如何获取自增主键呢?
下文笔者讲述Mybatis中获取自增主键的方法分享,如下所示
获取自增主键
在一些日常开发时 我们插入数据后,需获取插入后的主键信息, 那么此时就需要获取自增主键的信息 那么mybatis中如何获取插入后的自增主键信息呢?下文笔者将一一道来,如下所示
方式1: insert标签中使用selectKey标签 可获取插入的自增主键 方式2: useGeneratedKeys属性、keyProperty属性
selectKey标签示例
运用MyBatis中的<selectKey>标签配置 获取自增主键 映射文件中可进行以下配置 <!-- 新增用户 --> <insert id="insertUser" parameterType="com.java265.mybatis.po.User"> <selectKey keyProperty="userId" order="AFTER" resultType="java.lang.Integer"> SELECT LAST_INSERT_ID() </selectKey> INSERT INTO tb_user(user_name,blog_url,remark) VALUES(#{userName},#{blogUrl},#{remark}) </insert>例
1.创建用户信息持久化类(User.java) package com.java265.mybatis.po; /** * 用户信息的持久化类 **/ public class User { private int userId; //用户编号 private String userName; //'用户姓名' private String blogUrl; //博客地址 private String remark; //备注 //省略getter与setter方法... } 2.配置SQL映射文件 <!-- 新增用户 --> <insert id="insertUser" parameterType="com.java265.mybatis.po.User"> <selectKey keyProperty="userId" order="AFTER" resultType="java.lang.Integer"> SELECT LAST_INSERT_ID() </selectKey> INSERT INTO tb_user(user_name,blog_url,remark) VALUES(#{userName},#{blogUrl},#{remark}) </insert> 3.数据插入方法 /** * 新增用户 */ @Test public void insertUser() { DataConnection dataConnection = new DataConnection(); SqlSession sqlSession = dataConnection.getSqlSession(); //创建新用户 User user = new User(); user.setUserName("java265"); user.setBlogUrl("https://www.java265.com"); user.setRemark("这是我最爱的java网站"); //执行新增方法 int result = sqlSession.insert("test.insertUser",user); //提交 sqlSession.commit(); //打印结果 System.out.println("执行结果:" + result); System.out.println("自增主键:" + user.getUserId()); sqlSession.close(); }
方式2:useGeneratedKeys属性、keyProperty属性
在<insert>标签中添加useGeneratedKeys属性和keyProperty属性 useGeneratedKeys属性表示使用自增主键 而keyProperty属性是Java包装类对象的属性名 配置: <!-- 新增用户 --> <insert id="insertUser" useGeneratedKeys="true" keyProperty="userId" parameterType="com.java265.mybatis.po.User"> INSERT INTO tb_user(user_name,blog_url,remark) VALUES(#{userName},#{blogUrl},#{remark}) </insert> 采用上面的设置后 MyBatis运行完insert语句后 会自动将自增长id值赋给对象User的属性userId 然后在逻辑处理层 可通过User类的get方法获取该自增主键值
非自增主键获取的方式
关于非自增主键信息的获取 如: uuid类型和Oracle的序列主键nextval 它们都是在insert之前生成 其原理是在SQL的uuid()方法及nextval()方法 SQL映射文件的配置与上面的配置类似 依然使用<selectKey>标签对 但是order属性被设置为before(因为是在insert之前执行) resultType根据主键实际类型设定 uuid配置如下 <selectKey keyProperty="userId" order="BEFORE" resultType="java.lang.String"> SELECT uuid() </selectKey> Oracle序列配置如下 <selectKey keyProperty="userId" order="BEFORE" resultType="java.lang.String"> SELECT 序列名.nextval() FROM DUAL </selectKey>
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。