简单介绍:在使用mybats插入数据是,有很多需要和id关联的其他数据,所以在插入一条信息时获取其主键信息是很常见的操作。
一 mysql数据库的主键自增(int类型的主键)
1 创建一个表,设置表的id(此id必须是int类型),设置为auto_increment自增类型
2 映射文件配置如下:
insert into user(name,sex,age) values(#{name},#{sex},#{age})
useGeneratedKeys:设置为true表示开启主键自增。
keyProperty:指定数据库主键对应的实体类属性,好将自增的主键赋值给传入的实体类参数。由于数据库设置的id的主键自增,所以这里的插入sql没有对id进行插入,mysql会自动赋值。
3 测试与输出
@Test
public void insertUser(){
User user = new User();
user.setAge(55);
user.setName("zyb");
user.setSex("男");
userDao.insertUser(user);
System.out.println(user);
}
==> Preparing: insert into user(name,sex,age) values(?,?,?)
==> Parameters: zyb(String), hhh(String), 55(Integer)
<== Updates: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6f099cef]
User(name=zyb, age=55, sex=hhh, id=1)
可以看见的是参数实体类并没有设置id值,但是在执行了插入之后,mybatis自动就将生成的主键值赋值给了实体类的id属性。这种返回数据库生成的id必须要定义 useGeneratedKeys="true" keyProperty="id"两个属性才行,不然不会给实体类参数的id属性赋值为新生成的主键值。
二 自动生成uuid类型的主键
1 数据库定义一个id为varchar类型的表,注意长度最好设置长点,这里设置的是64,因为生成的uuid长度都比较长。
2 映射文件配置如下:
select replace(uuid(),'-','')
insert into student(id,name,sex,age) values(#{id},#{name},#{sex},#{age})
resultType:指定执行了
keyProperty:指定将
order:值为BEFORE/AFTER 表示
需要注意的是,这里必须在sql中传入对id进行插入,并且,由于要在执行了