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

:作用就是封装一条需要执行的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还没有赋值。

你可能感兴趣的:(mybatis自增主键)