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