mybatis数据输出-insert操作时获取自增列的值给对应的属性赋值

jdbc-修改 水果库存系统的 BaseDao 的 executeUpdate 方法支持返回自增列-CSDN博客

1、建库建表

CREATE DATABASE `mybatis-example`;
 
USE `mybatis-example`;
 
CREATE TABLE `t_emp`(
  emp_id INT AUTO_INCREMENT,
  emp_name CHAR(100),
  emp_salary DOUBLE(10,5),
  PRIMARY KEY(emp_id)
);
 
INSERT INTO `t_emp`(emp_name,emp_salary) VALUES("tom",200.33);
INSERT INTO `t_emp`(emp_name,emp_salary) VALUES("jerry",666.66);
INSERT INTO `t_emp`(emp_name,emp_salary) VALUES("andy",777.77);

2、pom.xml

    
        
            org.mybatis
            mybatis
        
 
        
        
            mysql
            mysql-connector-java
        
 
        
        
            org.junit.jupiter
            junit-jupiter-api
        
 
        
            org.projectlombok
            lombok
        
    

3、Employee.java(pojo)

package com.atguigu.mybatis.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Employee {
    private Integer empId;
    private String empName;
    private Double empSalary;
}

4、EmpMapper.java

package com.atguigu.mybatis.mapper;
import com.atguigu.mybatis.pojo.Employee;
public interface EmpMapper {

    //演示在insert操作时同时获取自增长键值
    void addEmp(Employee employee);
}

5、mybatis-config.xml(mybatis的总配置文件)




 
    
    
    
    
    
    
        
    
 
    
        
        
    
 
    
    
        
        
            
            
            
            
                
                
                
                
                
            
        
    
 
    
        
        
        
        
        
    
 

6、EmpMapper.xml






    
    
        insert into t_emp values(0,#{empName},#{empSalary})
    

7、MybatisTest.java

package com.atguigu.mybatis;
import com.atguigu.mybatis.mapper.EmpMapper;
import com.atguigu.mybatis.pojo.Employee;
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.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import java.io.IOException;
import java.io.InputStream;
public class MybatisTest {

    SqlSessionFactory sqlSessionFactory;
    SqlSession sqlSession;
    EmpMapper empMapper;

    @BeforeEach
    public void setup() throws IOException {
        // 获取资源流,读取"mybatis-config.xml"文件
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        // 使用资源流创建SqlSessionFactory
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // 使用SqlSessionFactory打开一个Session
        sqlSession = sqlSessionFactory.openSession();
        //基于Mapper接口编程
        empMapper = sqlSession.getMapper(EmpMapper.class);
    }

    // 在每个测试用例之后执行的清理方法
    @AfterEach
    public void teardown() {
        sqlSession.commit();  // 提交事务
        sqlSession.close();  // 关闭SqlSession
    }

    @Test
    public void test01() {
        Employee employee = new Employee(0, "张三丰", 300.0);
        empMapper.addEmp(employee);
        System.out.println(employee);
    }
}

mybatis数据输出-insert操作时获取自增列的值给对应的属性赋值_第1张图片

 8、useGeneratedKeys

     "useGeneratedKeys" 是一个选项,通常在数据库插入操作中使用。当执行插入操作时,数据库会自动为某些列(通常是主键列)生成值。这些列的值在插入语句中不需要指定,数据库会为它们分配一个唯一且随机的值。

      使用 "useGeneratedKeys" 选项可以让应用程序在插入操作完成后获取这些自动生成的值。这对于需要获取插入记录的唯一标识符的情况非常有用,比如在插入后需要立即对记录进行更新或查询。

      在 MyBatis 中,"useGeneratedKeys" 选项通常与 "keyProperty" 选项一起使用。通过将 "useGeneratedKeys" 设置为 true,并指定 "keyProperty" 来指定要将生成的值赋给的对象属性,可以在插入操作完成后将自动生成的值赋给对应的属性。

下面是一个示例,展示了如何在 MyBatis 中使用 "useGeneratedKeys" 和 "keyProperty" 选项:

  
    INSERT INTO user (username, password) VALUES (#{username}, #{password})  

    在这个示例中,假设有一个名为 "User" 的类,其中包含 "id"、"username" 和 "password" 属性。通过将 "useGeneratedKeys" 设置为 true,并指定 "keyProperty" 为 "id",插入操作完成后,自动生成的主键值将被赋给 User 对象的 "id" 属性。

    在 Mybatis 中,使用 useGeneratedKeys 属性可以让我们方便地获取自动生成的主键值。在进行 INSERT 操作时,如果数据库表启用了自动生成主键的功能,我们可以通过在 Mybatis 的 Mapper XML 文件中设置 useGeneratedKeys="true",然后在对应的 SQL 语句中使用 SELECT LAST_INSERT_ID() 函数或其他数据库支持的获取自增长 ID 的方法来获得新插入的记录的 ID 值。

以下是一个示例:


    INSERT INTO t_user (username, age, address) VALUES (#{username}, #{age}, #{address})

     在这个例子中,我们声明了一个 id 为 insertUser 的 INSERT SQL 语句,设置了 useGeneratedKeys 属性为 true,并指定了 keyProperty 为 id。这就意味着,当执行这个 SQL 语句时,数据库会自动生成一个主键,并将其赋值给 User 对象的 id 属性,使得我们可以在该语句执行后立即获取到主键值。

这样,我们就可以在执行插入操作后立即获取自增长主键的值,而无需再次执行 SELECT 操作以获取插入后的主键值。

你可能感兴趣的:(MyBatis,mybatis,Generatedkeys,keyProperty,获取自增长键值,mapper,insert,namespace)