博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mybatis的@Options注解
阅读量:4922 次
发布时间:2019-06-11

本文共 2147 字,大约阅读时间需要 7 分钟。

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

 

转载于:https://www.cnblogs.com/xingzc/p/8880331.html

你可能感兴趣的文章
java设计模式----中介模式
查看>>
常用通用JS函数
查看>>
第一章 读后心得体会
查看>>
windows下命令行cmder工具
查看>>
【深度学习大讲堂】首期第一讲:人工智能的ABCDE 第二部分:简谈当前AI技术与发展趋势...
查看>>
pandas 3 设置值
查看>>
pip无法更新
查看>>
vue-12-element组件库
查看>>
尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
查看>>
安装oracle后登录时出现 ERROR: ORA-01031 insufficient privileges
查看>>
HOME键窥探Android的Activity生命周期
查看>>
Regularization - Handle with the Overfitting Problem
查看>>
领域驱动设计和实践
查看>>
【第二章】Shell 变量
查看>>
Docker概念学习系列之为什么使用docker?(3)
查看>>
2.1 Producer API官网剖析(博主推荐)
查看>>
win10系统自带的浏览器ME如何将网页转成PDF
查看>>
软件包管理命令
查看>>
iOS支付宝集成时遇到的问题整理(2)
查看>>
messages.exe病毒的清理
查看>>