Mybatis源码--annotations包

4 篇文章 0 订阅
1 篇文章 0 订阅

1、annotations描述

这个包主要内容用于mapper接口时采用注解方式写sql需要注解类,其实就是xml写sql替换方式

  1. Arg: 标识构造函数的参数,嵌套在ConstructorArgs中使用(select :子查询, typeHandler:类型转换处理, columnPrefix:sql查询字段 as一个别名的前缀)
  2. AutomapConstructor : 写在构造函数上面(表示这个sql查询结果会自动映射该构造函数)
  3. CacheNamespace : 缓存命名空间(默认实现缓存PerpetualCache【持久缓存】, 缓存失效规则是:LruCache(最少使用)
  4. CacheNamespaceRef :缓存引用
  5. Case: 类型分支,用于映射不同值映射成不同java类型的对象
  6. Delete: 删除sql语句拼写
  7. DeleteProvider: 实现一个Provider接口通过java语言实现sql拼接(需要实现ProviderMethodResolver接口)
  8. Flush:批量sql操作的一种缓存,flush将操作内容刷出来历史记录
  9. Insert:插入sql语句
  10. InsertProvider: 插入Provider
  11. Lang:语言(就是解析SQL用到脚本语言,默认Raw,原生的)
  12. Many: 对应一个对多的结果,常用于某个字段的子查询
  13. MapKey: 返回一个map结果返回指定一个key是那个列
  14. Mapper:暂时没有用到
  15. One: 对应一个对一,常用于子查询
  16. Options: 可选参数,可以配置自动生成主键、缓存、SQL的编译方式
  17. Param:这个方法参数映射,如果将方法的参数映射到注解的sql上使用,当然它也有默认
  18. Property: 不是使用构造函数,而是用字段名映射
  19. Result: 结果映射(某个列对应某个字段)在Results内嵌套使用
  20. ResultMap:结果map形式映射(指定对应结果map的id)
  21. ResultType:返回对应的结果类型
  22. Select: 查询
  23. SelectKey: update操作之后,将一些值查询出来映射成dto返回调用者
  24. SelectProvider: 查询Provider
  25. TypeDiscriminator: 类型鉴别器列不同对应返回dto的类型也不同
  26. Update : 更新
  27. UpdateProvider: 更新Provider

2、示例

1、@Arg 和 @ConstructorArgs

@Select("SELECT * FROM " +
      "blog WHERE id = #{id}")
  @ConstructorArgs({
      @Arg(column = "id", javaType = int.class, id = true),
      @Arg(column = "title", javaType = String.class),
      @Arg(column = "author_id", javaType = Author.class, select = "org.apache.ibatis.binding.BoundAuthorMapper.selectAuthor"),
      @Arg(column = "id", javaType = List.class, select = "selectPostsForBlog")
  })
  Blog selectBlogUsingConstructor(int id);

有个构造函数,类型是(int, String, Author, List)

2、@InsertProvider和@SelectKey(调用存储过程返回nameId)

@InsertProvider(type=SqlProvider.class,method="insertTable3_2")
    @SelectKey(statement="call next value for TestSequence", keyProperty="nameId", before=true, resultType=int.class)
    int insertTable3_2(Name name);

3、@Many 子查询,fetchType是否为延迟加载(EAGER立即加载)

@Select({
      "SELECT *",
      "FROM blog"
  })
  @Results({
      @Result(property = "author", column = "author_id", one = @One(select = "org.apache.ibatis.binding.BoundAuthorMapper.selectAuthor", fetchType=FetchType.EAGER)),
      @Result(property = "posts", column = "id", many = @Many(select = "selectPostsById", fetchType=FetchType.EAGER))
  })
  List<Blog> selectBlogsWithAutorAndPostsEagerly();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值