天天看点

ibatis mysql 自增_mybatis自增主键

简单介绍:在使用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 [[email protected]]

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})

:作用就是封装一条需要执行的sql

resultType:指定执行了标签里面的sql后返回的java类型。

keyProperty:指定将标签里面的sql的执行结果封装给传入实体类的那个属性。

order:值为BEFORE/AFTER 表示标签里面的sql是在插入sql之前还是之后执行,并将结果赋值给实体类的某个属性(通过keyProperty指定)。

需要注意的是,这里必须在sql中传入对id进行插入,并且,由于要在执行了标签里面的sql后,传入的实体类的id才有值,所以标签里面的sql必须在插入sql执行之前执行,即order="BEFORE",如果设置为order="AFTER ",在插入之后执行,虽然任然会对参数实体类的id赋值,但是数据库中却没有插入id值,因为在之后执行,这时插入的实体对象的id还没有赋值。