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

时间: 2024-10-01 04:09:08

Mybatis的@Options注解的相关文章

MyBatis框架之注解开发

MyBatis注解开发 @Insert注解注解属性value:写入SQL语句 @Options注解实现添加新数据的主键封装注解属性useGeneratedKeys:使用生成的主键,配置为truekeyProperty:主键封装的pojo对象属性 @SelectKey注解实现添加新数据的主键封装注解属性statement:要执行的SQL语句before:在添加SQL语句之前还是之后进行,配置为false keyProperty:主键封装的pojo对象属性 注解实现添加数据 UserMapper接口

myBatis中的注解@Param、返回值为Map、JAVA读取Excel并解析文本、Class.getResource()和ClassLoader.getResource()

myBatis中的注解@Param:http://blog.csdn.net/gao36951/article/details/44258217:  http://www.cnblogs.com/thomas12112406/p/6217211.html. myBatis返回值为Map:http://blog.csdn.net/werewr342352321df/article/details/11892755. ====================== JAVA读取Excel并解析文本:h

在Mybatis中使用注解@多个参数查询

@Select("SELECT * FROM wc_homework WHERE organization_id=#{classId} ORDER BY createtime DESC LIMIT #{start},#{count}") @Results({ @Result(column = "course_id", property = "course_id"), @Result(column = "homework_id"

mybatis的@Options的使用

1.问题: 我采用的是mybatis的注解方式,打算插入一条数据之后返回主键,但是试了好几次都是返回的影响的记录数:1, @Insert(****) @Options(useGeneratedKeys=true, keyProperty="id",keyColumn = "id") Long insert(User user); 经过查资料,发现,主键的返回是直接返回到user这个model里面的,可以直接从user.getId()来获取. 2.问题: date入参

Spring Boot MyBatis升级篇-注解-动态SQL(if test)-方案二:@Provider(8)

1)动态语言注解(2)@Provider使用思路(3)@SelectProvider小试牛刀(4)@SelectProvider初露锋芒(5)@SelectProvider过关斩将(6)@InsertProvider小弟不敢当(7)@UpdateProvider你加我来改(8)@DeleteProvider不高兴就删 接下来看下具体的内容: (1)动态语言注解 对于创建动态的查的语言.MyBatis提供了多个注解如:@InsertProvider,@UpdateProvider,@DeleteP

springboot整合mybatis(xml+注解)

写在前面 ? 刚毕业的第一份工作是java开发,项目中需要用到mybatis,特此记录学习过程,这只是一个简单demo,mybatis用法很多不可能全部写出来,有更复杂的需求建议查看mybatis的官方中文文档,点击跳转.下面时项目环境/版本. 开发工具:IDEA jdk版本:1.8 springboot版本:2.03 其他依赖版本见下面pom.xml: <?xml version="1.0" encoding="UTF-8"?> <project

Mybatis之使用注解开发CRUD

上一篇演示了如何使用XML来操作Mybatis实现CRUD,但是大量的XML配置文件的编写是非常烦人的.因此 Mybatis也提供了基于注解的配置方式,下面我们来演示一下使用接口加注解来实现CRUD的的例子. 首先是创建一个接口. package com.bird.mybatis.bean; import java.util.List; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotation

Spring+SpringMVC+mybatis整合以及注解的使用

1.包结构:  2.spring配置:基本的DAO配置以及扫描Mapper(扫描出来的Mapper为首字母小写) 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:context="http://www.springframework.org/sche

MyBatis中使用注解进行selectKey的查询

1.定义接口类,方法中添加注解查询 package cn.et.mybatis.lesson02.selectKey; import java.util.List; import java.util.Map; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.SelectKey; public interface KeyAnnoMapper { /* * statement="sel