【项目实践day08】Mybatis向数据库中插入数据的时候返回主键值id

应用场景

  • 创建一个实体类(订单),现在需要将这个订单插入进数据库。
  • 但是在后续的业务逻辑中,需要用到这个订单的id(主键值)
    • 由于订单id一般都是自增的,且是插入数据库的时候才会给到的值
    • 所以需要在插入数据库之后返回id(主键值)【直接写在实体对象中】

代码实现

  1. 在serviceImpl中调用orderMapper实现订单的插入操作

    1. 这里传入的orders是一个实例化好的订单对象
    2. .insert(orders);
  2. 在orderMapper这个接口中,定义insert的抽象方法

    java 复制代码
     @Mapper
    	public interface OrderMapper {
    	
    	    /**
    	     * @param orders:
    	     * @return void
    	     * @description 插入订单数据
    	     */
    	    void insert(Orders orders);
    	}
  3. 在orderMapper.xml中书写插入语句

    xml 复制代码
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
    <mapper namespace="com.sky.mapper.OrderMapper">
    
    <!--    插入订单数据-->
    <!--    需要返回主键值,这里的id对应的是订单实体类中的属性-->
        <insert id="insert" parameterType="Orders" useGeneratedKeys="true" keyProperty="id">
            insert into orders
            (number, status, user_id, address_book_id, order_time, checkout_time, pay_method, pay_status, amount, remark,
             phone, address, consignee, estimated_delivery_time, delivery_status, pack_amount, tableware_number,
             tableware_status)
            values (#{number}, #{status}, #{userId}, #{addressBookId}, #{orderTime}, #{checkoutTime}, #{payMethod},
                    #{payStatus}, #{amount}, #{remark}, #{phone}, #{address}, #{consignee},
                    #{estimatedDeliveryTime}, #{deliveryStatus}, #{packAmount}, #{tablewareNumber}, #{tablewareStatus})
        </insert>
    </mapper>
    1. 注意:<insert id="" parameterType="Orders" useGeneratedKeys="true" keyProperty="id">
    2. insert对应的是orderMapper中的insert方法
    3. parameterType="Orders" useGeneratedKeys="true" keyProperty="id"是在向数据库中插入对象后,返回id(主键值)的具体实现。这里的id应当是实体对象中的属性id【注意名字的对应】

参考链接

参考链接

相关推荐
云姜.3 分钟前
线程和进程的关系
java·linux·jvm
是码龙不是码农4 分钟前
支付防重复下单|5 种幂等性设计方案(从初级到架构级)
java·架构·幂等性
曹牧5 分钟前
Spring Boot:如何在Java Controller中处理POST请求?
java·开发语言
heartbeat..5 分钟前
JVM 性能调优流程实战:从开发规范到生产应急排查
java·运维·jvm·性能优化·设计规范
WeiXiao_Hyy8 分钟前
成为 Top 1% 的工程师
java·开发语言·javascript·经验分享·后端
玄同7659 分钟前
SQLite + LLM:大模型应用落地的轻量级数据存储方案
jvm·数据库·人工智能·python·语言模型·sqlite·知识图谱
吾日三省吾码11 分钟前
别只会“加索引”了!这 3 个 PostgreSQL 反常识优化,能把性能和成本一起打下来
数据库·postgresql
chian-ocean12 分钟前
百万级图文检索实战:`ops-transformer` + 向量数据库构建语义搜索引擎
数据库·搜索引擎·transformer
苏渡苇14 分钟前
优雅应对异常,从“try-catch堆砌”到“设计驱动”
java·后端·设计模式·学习方法·责任链模式
团子的二进制世界21 分钟前
G1垃圾收集器是如何工作的?
java·jvm·算法