1.数据准备
/**
* 学生实体类
*/
public class Student implements Serializable {
private int id;
private String name;
private String sex;
private int age;
private float height;
private String address;
public Student() {
}
public Student(int id, String name, String sex, int age, float height) {
this.id = id;
this.name = name;
this.sex = sex;
this.age = age;
this.height = height;
}
//getter与setter方法略
}
/**
* student dao 接口
* 在IStudentDao.xml 告诉mybatis 如何创建一个实现类
*/
public interface IStudentDao {
/**
* 增加学生
* @param student
* @return
*/
int addStudent(Student student);
}
1.第一种:使用selectKey方式获取
<insert id="addStudentGetId" parameterType="com.qfedu.entity.Student">
insert into student_tb(name,age,sex,height) values(#{name},#{age},#{sex},#{height})
<selectKey resultType="int" keyColumn="id" keyProperty="id" order="AFTER">
select last_insert_id()
</selectKey>
selectKey标签获取自增id
resultType = "int" 这里指的是自增id的类型
keyColumn 对应数据库表自增主键列明
keyProperty 传入的实体类中 主键对应的属性,id值将赋给这个
order="AFTER" 插入成功后执行,即获取插入成功后的这一条数据的id
select last_insert_id() sql语句,查询上次插入后的id
注:获取到的id会自动赋值到我们插入数据时所传的对象相应的属性。即keyProperty所设置的属性,
我们就可以根据当前对象通过getter方法去获取这个id
2.第二种:使用useGeneratedKeys获取
<insert id="addStudentGetId" parameterType="Student" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
insert into student_tb(name,age,sex,height) values(#{name},#{age},#{sex},#{height})
</insert>
userGeneratedKeys="true" 获取自增id
keyColumn 对应数据库表自增主键列明
keyProperty 传入的实体类中 主键对应的属性,id值将赋给这个
注:获取到的id会自动赋值到我们插入数据时所传的对象相应的属性。即keyProperty所设置的属性,
我们就可以根据当前对象通过getter方法去获取这个id
测试:
public static void main(String[] args) {
SqlSession sqlSession = null;
try {
//1.读取配置文件 生成字节流
InputStream inputStream = Resources.getResourceAsStream("sqlMapperConfig.xml");
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//2.获取连接工厂
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
//获取sqlSession mysq连接,若参数为true,则不需要手动提交
//默认情况下:关闭自动提交,开启事务
sqlSession = sqlSessionFactory.openSession();
//通过sqlSession获取获取dao的代理对象(实现类)
IStudentDao iStudentDao = sqlSession.getMapper(IStudentDao.class);
Student student = new Student();
student.setName("大拿3");
student.setSex("M");
student.setAge(19);
student.setHeight(170);
//影响的行数
int num = iStudentDao.addStudentGetId(student);
System.out.println("受影响行数:" + num);
//手动提交
sqlSession.commit();
//获取自增id
System.out.println("获取自增id:" + student.getId());
}