在 MySQL 中主键自增字段,在插入后往往需要获得这个主键,以便于后面的操作,而 MyBatis 提供了实现的方法。
首先可以使用 keyProperty 属性指定哪个是主键字段,同时使用 useGeneratedKeys 属性告诉 MyBatis 这个主键是否使用数据库内置策略生成。
<insert id="addStudent" parameterType="com.pojo.Student" useGeneratedKeys="true" keyProperty="stud_id">
insert into students (name,email,dob) values (#{name},#{email},#{dob})
</insert>
useGeneratedKeys | (仅对 insert 和 update 有用)这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键,默认值:false。 |
keyProperty | (仅对 insert 和 update 有用)唯一标记一个属性,MyBatis 会通过 getGeneratedKeys 的返回值或者通过 insert 语句的 selectKey 子元素设置它的键值,默认:unset。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。 |
keyColumn | (仅对 insert 和 update 有用)通过生成的键值设置表中的列名,这个设置仅在某些数据库(像 PostgreSQL)是必须的,当主键列不是表中的第一列的时候需要设置。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。 |
接口定义:
public void addStudent(Student student);
java bean 对象:
public class Student {
private int stud_id;
private String name;
private String email;
private Date dob;
/*getter setter*/
public Student(String name, String email, Date dob) {
this.name = name;
this.email = email;
this.dob = dob;
}
}
测试:
package com.main;
import com.mapper.StudentMapper;
import com.pojo.Student;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.InputStream;
import java.util.*;
public class Main {
public static void main(String[] args){
InputStream inputStream = Main.class.getResourceAsStream("/mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
Student student = new Student("haha","haha@qq.com",new Date());
studentMapper.addStudent(student);
sqlSession.commit();
System.out.println(student);
}
}