zoukankan      html  css  js  c++  java
  • Mybatis的@Options注解

    mybatis的@Options注解能够设置缓存时间,能够为对象生成自增的key

    源代码如下:

    @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 "";
    }
    View Code

    第一个使用场景:

    有一个表

    CREATE TABLE instance (
    instance_id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键id',
    infos VARCHAR(2048) NOT NULL DEFAULT '' COMMENT '',
    create_time TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '创建时间',
    update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (instance_id)
    )ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT '实例表';

    其中的instance_id是自增的主键。

    我希望通过dao层的接口插入的数据能够返回主键的id:

    接口代码如下:

    @Insert("insert into instance (infos)"
                        + " ("
                        + " @{infos},"
                        + " NOW()"
                        + ")")
        @Options(useGeneratedKeys = true, keyProperty = "instanceId", keyColumn = "instance_id")
        int addInstance(Instance instance);
    View Code

    @Options注解中默认设置的主键对应的字段名为id、在我们的表中,主键名为instance_id,因此需要将keyProperty和keyColumn设置成我们想要的字段:

    这个注解的意思就是,从instance_id这个字段里面把数据放到传入对象的instanceId成员变量里面。

    useGenerateKey=true : 设置是否使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty设置的领域模型属性中

    具体单测示例如下:

    @Test
        public void addInstanceTest() {
            Instance instance = new Instance();
            instance.setInfos("infos");
    int res = instanceMapper.addInstance(instance); instance.setInfos("infos2"); int res2 = instanceMapper.addInstance(instance); Instance ins = instanceMapper.getInstanceById(instance.getInstanceId()); log.info("{}", ins.getInstanceId()); // 此处打印的日志信息就是2,即第二条记录的主键id,主键会自动返回到实例对象中 }

    二  注解中的useCache还可以设置缓存相关的选项:

     useCache = true表示本次查询结果被缓存以提高下次查询速度,

     flushCache = false表示下次查询时不刷新缓存,

     timeout = 10000表示查询结果缓存10000秒。

  • 相关阅读:
    C#深入浅出 修饰符(二)
    HDU 5785 Interesting
    HDU 5783 Divide the Sequence
    HDU 5781 ATM Mechine
    UVA 714 Copying Books
    uva 1471 Defense Lines
    UVA 11134 Fabled Rooks
    UVA 11572 Unique Snowflakes
    UVA 11093 Just Finish it up
    UVA 10954 Add All
  • 原文地址:https://www.cnblogs.com/xingzc/p/8880331.html
Copyright © 2011-2022 走看看