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秒。

  • 相关阅读:
    Win11安装跳过TPM的方法 Win11安装怎么跳过TPM
    选取文件,列举文件(含子文件夹),记录大小信息,限制文件层级
    选取文件夹,枚举文件及子文件夹
    数据库SQL中having和where的用法区别
    Environ 函数调用系统环境变量 电脑用户名等
    Notepad++正则表达式语法
    VB几种函数参数传递方法,Variant,数组,Optional,ParamArray
    Access导出到Excel方法汇总
    VBA编程自动导出生成Excel表
    LeetCode 136 只出现一次的数字
  • 原文地址:https://www.cnblogs.com/xingzc/p/8880331.html
Copyright © 2011-2022 走看看