关于@Result注解的说明
@Result中常用的属性是column和property,用于配置数据库中的列名和类中的属性名之间的映射关系。另外one和many用于关联查询。比如上面列子中提到的Group类中包含属性List userList,这时集合类型数据,与Group是一对多的关系,需要用many配置,如果Group中需要对象类型数据User user,那么就需要使用one进行配置。这里我们以many为例进行说明:
@Results(id="groupWithUsers",value = { @Result(property = "groupId", column = "group_id", id = true),@Result(property = "name", column = "name"), @Result(property = "accountId", column = "account_id"),@Result(property = "deleteFlag", column = "delete_Flag"),@Result(property = "parentId", column = "parent_Id"), @Result(property = "userList", javaType=List.class, many =@Many(select="selectUsersByGroupId"), column = "group_id")})
//查询
@Select({"select * from group where account_id=#{accountId} and delete_flag=0"})
List<Group> selectGroupWithUsers(@Param("accountId") String accountId);@Select({"select u.* from user u","inner join user_group ug on u.user_id = ug.user_id","where ug.group_id=#{groupId} and u.delete_flag=0"})
List<User> selectUsersByGroupId(@Param("groupId") String groupId);
我们的接受的对象Group中的字段:(User类中的映射关系这里就不再赘述)
@Data
public class Group {private String groupId;private String name;private String accountId;private String parentId;private String type;private List<User> userList;
}
调用List selectGroupWithUsers(@Param(“accountId”) String accountId);查出的结果为:
从结果中可以看出,查询出的列和Group中属性信息的映射关系是在@Results中value属性的@Result注解进行配置的,这里与mybatis的xml配置文件开发基本相同。再看一下userList包含了user信息,也就是selectUsersByGroupId方法被调用,查询结果被封装在Group类中的userList字段中。而selectUsersByGroupId方法被调用的配置在@Many注解中。下面我们来卓层分析一下@Results注解及注解中的属性信息:
@Results注解:
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface Results {String id() default ""; //当前Results注解的唯一标识Result[] value() default {}; //value值为Result[]数组
}
@Results中只有两个属性,id和value,id作为当前@Results注解的唯一标识很好理解;value值为@Result数组,下面我们看一下@Result的信息:
@Result:
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({})
public @interface Result {boolean id() default false; //id唯一标识String column() default ""; //对应数据库中的列名String property() default ""; //对应类中的属性名Class<?> javaType() default void.class; //数据类型JdbcType jdbcType() default JdbcType.UNDEFINED; //jdbc类型Class<? extends TypeHandler> typeHandler() default UnknownTypeHandler.class;One one() default @One; //一对一配置Many many() default @Many; //一对多配置
}
@Result中常用的属性是column和property,用于配置数据库中的列名和类中的属性名之间的映射关系。另外one和many用于关联查询。比如上面列子中提到的Group类中包含属性List userList,这时集合类型数据,与Group是一对多的关系,需要用many配置,如果Group中需要对象类型数据User user,那么就需要使用one进行配置。这里我们以many为例进行说明:
@Result中many的应用:
@Many:
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({})
public @interface Many {String select() default ""; //选择要执行的方法FetchType fetchType() default FetchType.DEFAULT; //枚举值,懒加载、及时加载、默认
}
@Many中常用的属性只有selet,用于指定关联查询的方法
但是存在many属性的@Result注解的使用就有些变化:如下面的这段代码中,column属性的值为"group_id",是group表中的列,也是作为参数传递到selectUsersByGroupId中进行查询的参数。
MyBatis中使用@Results注解来映射查询结果集到实体类属性。
(1)@Results的基本用法。当数据库字段名与实体类对应的属性名不一致时,可以使用@Results映射来将其对应起来。column为数据库字段名,porperty为实体类属性名,jdbcType为数据库字段数据类型,id为是否为主键。
关于@Result注解的说明相关推荐
- MyBatis——@Result注解column参数传递多个参数
问题描述 @Result注解column参数传递多个参数. 官方文档 property description column 数据库的列名或者列标签别名.与传递给resultSet.getString ...
- MyBatis——@Result注解column参数传递——父查询函数的参数传递到子查询
问题描述 假设a方法中传入一个带查询参数x 但是a方法的查询结果中不包含参数x 而子查询里也需要参数x 如何在子查询b中带入参数x /*** 按User表中platform查询User*/@Selec ...
- Mybatis注解学习记录
Mybatis注解使用 1. SQL语句映射 1.1 @Select注解:实现查询功能 1.1.1 用法 1.2 @Insert注解:实现新增功能 1.2.1 用法 1.3 @Update注解:实现更 ...
- MyBatis-07MyBatis注解方式之@Select
概述 @Select注解 通过数据库字段别名方式映射到实体类属性 1. RoleMapper接口增加接口方法,同时标注注解 2.单元测试 通过mapUnderscoreToCamelCase完成数据库 ...
- Mybatis CRUD注解Annotation的使用
@Select,@Insert,@Update,@Delete完成常见的增删改查sql语句的映射. 注解和xml配置中的sql语法一致. @Options注解,使用数据库自动增长的主键,需要底层数据库 ...
- java 字段映射注解_mybatis注解开发中实体属性和表字段不对应问题
在项目的实际开发中,有可能会遇到实体类中的属性名与列名不相同,不能改但.导致不能自动装配值的问题,此时可以接合@Results.@Result.@ResultMap实现开发 1.@Results注解 ...
- SpringBoot + MyBatis(注解版),常用的SQL方法
一.新建项目及配置 1.1 新建一个SpringBoot项目,并在pom.xml下加入以下代码 <dependency> <groupId>org.mybatis.spring ...
- Mybatis—注解开发
Mybatis的注解开发 MyBatis的常用注解 这几年来注解开发越来越流行,Mybatis也可以使用注解开发方式,这样我们就可以减少编写Mapper映射文件了. @Insert:实现新增 @Upd ...
- springboot 中使用 Mybatis 注解 配置 详解
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 传参方式 使用不同的传参方式: 使用@Param 之前博文中的项目使用了这种简单的传参方式: @In ...
- Spring Boot中使用MyBatis注解配置详解
之前在Spring Boot中整合MyBatis时,采用了注解的配置方式,相信很多人还是比较喜欢这种优雅的方式的,也收到不少读者朋友的反馈和问题,主要集中于针对各种场景下注解如何使用,下面就对几种常见 ...
最新文章
- 关于ADAM中自定义Class Schema后不能创建该Class的实例的问题
- solrCloud源码分析之CloudSolrClient
- SAP Spartacus读取User Address的请求发送和接收源头
- setseed_Java Random setSeed()方法与示例
- TCP/IP网络协议栈:以太网数据包结构、802.3、MTU
- java系列3:数组初始化(基本格式)
- 全国计算机等级内容,全国计算机等级内容
- python爬虫设计思路_python网络爬虫(9)构建基础爬虫思路
- 雅礼集训Day3-难题选讲
- html2canvas ios 15.0截屏 变黑 页面刷新
- 请假代码java web_学生请假管理系统
- Vue封装Tabs标签页
- NFPA-持续为美国贡献防火国家规范的非政府协会
- 生存预测 : kaggle titanic 泰坦尼克号 逻辑回归(Logistic回归) tensorflow版
- JAVA 启动JVM时,Xms和Xmx参数
- 字符类型与整形之间的转换
- Qt之TableView使用
- QMI8658 - 姿态传感器学习笔记 - Ⅰ
- PID 控制保姆级培训教程下-全国大学生电子设计大赛赛前必备
- ORACLE公司的历史
热门文章
- 计算机学院优秀主讲教师评选细则,重庆师范大学计算机学院教学优秀奖评选办法.doc...
- RTKLIB-学习笔记
- 网络—— 数据链路层,MTU
- LeetCode 2300. 咒语和药水的成功对数
- 印度体育教育初创公司 KOOH Sports 获得 220 万美元风险投资
- 什么是台式机主板的“双通道”认知误区?
- 软键盘遮挡edittext_Android软键盘遮挡的四种解决方案
- B2C模式电商案例分享
- python编程选股_python编写选股公式
- Bro脚本语法4-声明和语句(Declarations and Statements)