Mybatis的@Options注解


mybatis的@Options注解能夠設置緩存時間,能夠為對象生成自增的key

第一個使用場景:

有一個表

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);

@Options注解中默認設置的主鍵對應的字段名為id、在我們的表中,主鍵名為instance_id,因此需要將keyProperty和keyColumn設置成我們想要的字段:

這個注解的意思就是,從instance_id這個字段里面把數據放到傳入對象的instanceId成員變量里面。

具體單測示例如下:

    @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
    }

從上面的示例中我們可以看出,在調用了插入方法之后,@Options注解會自動為表對應的對象的主鍵字段設置上自增的值,直接從這個對象中獲取即可。

 

我們來看下@Option注解的源碼:

@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還可以設置緩存相關的選項:

useCache = true表示本次查詢結果被緩存以提高下次查詢速度,flushCache = false表示下次查詢時不刷新緩存,timeout = 10000表示查詢結果緩存10000秒。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM