Mybatis 插入并获取自增主键

MyBatis自增主键示例
本文介绍了一个使用MyBatis实现自增主键的例子。通过编写特定的SQL插入语句,并利用MyBatis的注解配置,可以在插入记录后自动获取并设置自增的主键值。

1、编写select

<insert id="insertUserTestAutoIncrement" parameterType="Student" useGeneratedKeys="true" keyProperty="id">
    insert into students(password,age,salary,name) values (#{st.password}, #{st.age}, #{st.salary}, #{st.name});
  </insert>

2、调用,自增主键自动放入student的id字段

package com.william;

import com.william.mapper.Role;
import com.william.mapper.Student;
import com.william.mapper.StudentExample;
import com.william.mapper.StudentMapper;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.ExecutorType;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.exception.InvalidConfigurationException;
import org.mybatis.generator.exception.XMLParserException;
import org.mybatis.generator.internal.DefaultShellCallback;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

@Slf4j
@Data
public class Main {
    static public void main(String[] args) throws IOException, XMLParserException, InvalidConfigurationException, SQLException, InterruptedException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        System.out.println(inputStream.toString());
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession session = sqlSessionFactory.openSession(true);
        StudentMapper mapper = session.getMapper(StudentMapper.class);
        Student student = new Student();
        student.setAddress("Beijing");
        student.setAge(99);
        student.setName("FUCK");
        student.setPassword("123123");
        mapper.insertUserTestAutoIncrement(student);
        System.out.printf("自增主键为: %d\n", student.getId());


    }
}

 

### MyBatis-Flex 获取主键的配置与使用方法 MyBatis-Flex 是 MyBatis强版,提供了更加灵活和强大的功能[^2]。在处理数据库自主键时,可以通过配置以及代码实现来获取插入后的自主键值。 #### 1. 配置数据库支持自主键 确保数据库表设计中包含自主键字段。例如,在 MySQL 中可以这样定义表结构: ```sql CREATE TABLE user ( id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '自主键', name VARCHAR(50) NOT NULL COMMENT '用户名', age INT COMMENT '年龄' ) COMMENT='用户表'; ``` 上述 SQL 定义了 `id` 字段为自主键[^1]。 #### 2. 配置 MyBatis-Flex 的实体类 在 MyBatis-Flex 中,实体类需要与数据库表字段对应。以下是一个简单的实体类示例: ```java import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.mybatis.flex.annotation.FlexTable; @FlexTable("user") public class User { @TableId(type = IdType.AUTO) private Long id; private String name; private Integer age; // Getter 和 Setter 方法 public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } } ``` 通过 `@TableId(type = IdType.AUTO)` 注解指定主键为自类型[^2]。 #### 3. Mapper 接口定义 定义一个 Mapper 接口用于操作数据库: ```java import com.mybatis.flex.mapper.FlexMapper; import org.apache.ibatis.annotations.Insert; public interface UserMapper extends FlexMapper<User> { @Insert("INSERT INTO user (name, age) VALUES (#{name}, #{age})") int insertUser(User user); } ``` 上述代码中,`insertUser` 方法用于插入数据,而主键字段 `id` 由数据库自动生成[^1]。 #### 4. 获取主键值 在插入数据后,可以通过实体对象直接获取主键值。以下是具体示例: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class UserService { @Autowired private UserMapper userMapper; public void addUser(String name, Integer age) { User user = new User(); user.setName(name); user.setAge(age); int result = userMapper.insertUser(user); if (result > 0) { System.out.println("插入成功,自主键值为: " + user.getId()); } else { System.out.println("插入失败"); } } } ``` 当调用 `insertUser` 方法时,MyBatis-Flex 会自动将数据库生成的自主键值填充到实体对象的 `id` 属性中[^3]。 ### 注意事项 - 确保数据库表的主键字段设置为自。 - 在实体类中正确配置 `@TableId` 注解,指定 `IdType.AUTO`。 - 插入数据后,可通过实体对象直接获取主键值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值