mysql自增主键的返回

本文介绍MyBatis中自增主键和UUID主键的实现方式,包括配置细节和示例代码,并展示了如何简化自增主键的配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、Mybatis的基础配置

          https://blog.youkuaiyun.com/qq_43163943/article/details/110261144

2、Mybatis自增主键的实现

          执行顺序是先插入,再查询主键

          1)mysql中的自增主键返回的语法

insert into user(username,password,salt,phone,created,last_login_time,status)
VALUES('xxx','xxx','xxx','xxx','2020-10-10','2020-10-10',1);
SELECT LAST_INSERT_ID();

          SELECT LAST_INSERT_ID():表示返回插入语句的主键id。

          2)Mybatis中的实现

User.xml

<!--    插入数据-->
    <insert id="insertUser" parameterType="com.gxa.pojo.User">
        -- selectKey:表示实现主键返回
        -- keyColumn:数据库表中主键对应的一列
        -- keyProperty:表示pojo中对应的主键列
        -- order:设置是在insert语句之前执行还是之后执行,AFTER表示之后,BEFORE表示之前
        -- resultType:表示返回的id类型
        <selectKey keyColumn="id" keyProperty="id" order="AFTER" resultType="long">
            select last_insert_id()
        </selectKey>
        insert into user(username,password,salt,phone,created,last_login_time,status)
        values(#{username},#{password},#{salt},#{phone},#{created},#{lastLoginTime},#{status})
    </insert>

测试类

 @Test
    public void testInsert() {
        //4、获得sqlSession
        SqlSession sqlSession = sqlSessionFactorybuild.openSession();
        //username,password,salt,phone,created,last_login_time,status
        User user = new User(null, "哈哈哈", "123123", "xxxx", "qqqqq", new Date(), new Date(), 1);
        sqlSession.insert("insertUser", user);
        sqlSession.commit();
        System.out.println(user.getId());
    }

          注意:如果传的是地址,mybatis查询出了自增的主键,会自动将查询出来的值设置进去

3、Mysql使用uuid生成主键

          执行顺序是先通过uuid生成主键,然后再插入

          1)Mysql中生成uuid语法

          select UUID():生成一个全球唯一的编号

insert into user2(username,password,salt,phone,created,last_login_time,status)
VALUES('xxx','xxx','xxx','xxx','2020-10-10','2020-10-10',1);
SELECT UUID();

User.xml

<!--    插入数据-->
    <insert id="insertUserIdUUID" parameterType="com.gxa.pojo.User2">
        -- selectKey:表示实现主键返回
        -- keyColumn:数据库表中主键对应的一列
        -- keyProperty:表示pojo中对应的主键列
        -- order:设置是在insert语句之前执行还是之后执行,AFTER表示之后,BEFORE表示之前
        -- resultType:表示返回的id类型
        <selectKey keyColumn="id" keyProperty="id" order="BEFORE" resultType="string">
            select UUID()
        </selectKey>
        insert into user2(id,username,password,salt,phone,created,last_login_time,status)
        values(#{id},#{username},#{password},#{salt},#{phone},#{created},#{lastLoginTime},#{status})
    </insert>

测试类

@Test
    public void testInsertUserIdUUID() {
        //4、获得sqlSession
        SqlSession sqlSession = sqlSessionFactorybuild.openSession();
        //username,password,salt,phone,created,last_login_time,status
        User2 user = new User2(null, "哈哈哈", "123123", "xxxx", "qqqqq", new Date(), new Date(), 1);
        //如果传的是地址,mybatis查询出了自增的主键,会自动将查询出来的值设置进去
        sqlSession.insert("insertUserIdUUID", user);
        sqlSession.commit();
        System.out.println(user.getId());
    }

          注意:使用uuid当主键,id的类型应该为String类型

          4、Mysql自增主键的简化版

User.xml

   <!--    插入数据-->
<!--    useGeneratedKeys:表示是否返回自增的id,true表示“是”
        keyProperty:表示给哪个属性赋值,与pojo中的id一致-->
    <insert id="insertUser2" parameterType="com.gxa.pojo.User" useGeneratedKeys="true" keyProperty="id">
        insert into user(username,password,salt,phone,created,last_login_time,status)
        values(#{username},#{password},#{salt},#{phone},#{created},#{lastLoginTime},#{status})
    </insert>

测试类

 @Test
    public void testInsert2() {
        //4、获得sqlSession
        SqlSession sqlSession = sqlSessionFactorybuild.openSession();
        //username,password,salt,phone,created,last_login_time,status
        User user = new User(null, "哈哈哈", "123123", "xxxx", "qqqqq", new Date(), new Date(), 1);
        //如果传的是地址,mybatis查询出了自增的主键,会自动将查询出来的值设置进去
        sqlSession.insert("insertUser2", user);
        sqlSession.commit();
        System.out.println(user.getId());
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值