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

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这三个属性

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值