mybatis使用注解方式插入数据后获取自增长的主键值

来源:互联网 发布:南京软件谷绿皮火车 编辑:程序博客网 时间:2024/06/05 08:02

mybatis使用注解方式插入数据后获取自增长的主键值

Mybatis使用:Sql Annotation
mybatis本身提供的注解

插入

插入的使用注解
获取自增id的方式有
INSERT INTO table_name (col1, col2,…) VALUES (‘val1’, ‘val2’…);
1. SELECT LAST_INSERT_ID();
2. SELECT @@IDENTITY
3. SELECT MAX(id)
……

应用情景

  1. 写SQL,但不要自己插入主键值,插入数据后获取自增长的主键值
  2. 配置@Options(useGeneratedKeys=true, keyProperty=”对象.属性”)
    这个的作用是设置是否使用JDBC的getGenereatedKeys()方法获取主键并赋值到keyProperty设置的对象的属性中,
    插入一条记录后,还想得到这条记录的自增主键ID,useGeneratedKeys=true就是定义数据库返回主键ID的。
    也就是说把自增长的主键值赋值给对象相应的属性
    @Insert("INSERT INTO `wx_act` (`name`, `modelId`, `image`) VALUES (#{name}, #{modelId}, #{image})")    @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")    int saveMoonCoke(MidAutumn midAutumn);
  1. 在插入后,使用对象.主键属性的getXXId()方法 获取刚刚插进去的主键值
  2. 这个方法返回的内容是insert的影响的行数

例子

    System.out.println("Before inserting ... " + moonCoke.getId());    MidAutumn moonCoke = new MidAutumn();    moonCoke.setName(name);    moonCoke.setModelId(modelId);    moonCoke.setImage(photoUrl);    int effectRow = midautumnService.saveMoonCoke(moonCoke);    System.out.println("effect row ... " + effectRow);    System.out.println("After inserting ... " + moonCoke.getId());

Options的其他选项

    @Retention(RetentionPolicy.RUNTIME)    @Target({ElementType.METHOD})    public @interface Options {        boolean useCache() default true;        boolean flushCache() default false;        ResultSetType resultSetType() default ResultSetType.FORWARD_ONLY;        StatementType statementType() default StatementType.PREPARED;        int fetchSize() default -1;        int timeout() default -1;        boolean useGeneratedKeys() default false;        String keyProperty() default "id";        String keyColumn() default "";    }

对于这些属性,还是比较好理解的,如useCache、flushCache、timeout等。
其中跟主键返回功能相关的属性就是useGeneratedKeys、keyProperty、keyColumn这三个。
对于Options的使用,根据官方文档有个特别重要的注意点:
**
once you engage the Options annotation, your statement is subject to all of the default values.
**
如果你使用了这个属性,SQL的执行就会使用Options的默认值,如果你没有重新定义的话。仔细看下keyColumn的默认值是空,这个如果和你数据库设定不一致的话,就会出问题;所以一旦决定使用主键返回功能,推荐同时使用useGeneratedKeys、keyProperty、keyColumn这三个属性

阅读全文
0 0
原创粉丝点击