Mybatis主键返回策略

MyBatis 主键返回策略

最近在项目中需要用到MyBatis的主键返回策略,感觉官方文档给的例子很简短,上网搜索时又被人所误导,可能也是自己没认真看官方文档,特此记录。

背景

  • Mysql 数据库
  • 表主键自增(注意当表主键已设置自增时使用下面实现,MyBatis存在两种实现)

先把实现展示下

实现

这个是我最终的实现,其实很简单。

Mapper接口

@Mapper
public interface TagMapper extends BaseMapper<Tag> {

    Integer insertTag(Tag tag);

}

xml配置


    INSERT INTO tag (tag_name) VALUES (#{tagName})

接口调用

    @Test
    public void testInsertTag(){
        Tag tag = new Tag();
        tag.setTagName("标签");
        tagMapper.insertTag(tag);
        // 参数中获取主键id
		Integer id = tag.getId();
    }

总结

下面记录下我犯的比较蠢的问题,也是对MyBatis不够了解导致

注意

  • 1.接口入参必须为实体类
  • 2.接口返回的Integer是插入的行数,并不是返回的主键

看下官网的介绍

如果你的数据库支持自动生成主键的字段(比如 MySQL 和 SQL Server),那么你可以设置 useGeneratedKeys=”true”,然后再把 keyProperty 设置到目标属性上就 OK 了

xml配置的keyProperty是将返回的主键设置到入参的实体类中,所以传参为实体类。

selectKey

Mybatis也提供了另一种主键返回的方式,主要是应对不支持自增主键的,把MyBatis官网的内容贴过来

对于不支持自动生成类型的数据库或可能不支持自动生成主键的 JDBC 驱动,MyBatis 有另外一种方法来生成主键。
这里有一个简单(甚至很傻)的示例,它可以生成一个随机 ID(你最好不要这么做,但这里展示了 MyBatis 处理问题的灵活性及其所关心的广度):


  
    select CAST(RANDOM()*1000000 as INTEGER) a from SYSIBM.SYSDUMMY1
  
  insert into Author
    (id, username, password, email,bio, favourite_section)
  values
    (#{id}, #{username}, #{password}, #{email}, #{bio}, #{favouriteSection,jdbcType=VARCHAR})

参考: MyBatis官网

你可能感兴趣的:(mybatis,Java)