MyBatis——实现级联表查询(一对一,一对多)

3 篇文章 0 订阅
3 篇文章 0 订阅

一对一:

MyBatis中使用association标签来解决一对一的关联查询,association标签可用的属性如下:

  • property:对象属性的名称
  • javaType:对象属性的类型
  • column:所对应的外键字段名称
  • select:使用另一个查询封装的结果

一对多:

property:属性名称
column:外键列
javaType:类型(可以是自己的实体类)
select:关联的查询语句
collection:一对多的标签
property:属性名称
column:外键列

MyBatis中使用collection标签来解决一对多的关联查询,ofType属性指定集合中元素的对象类型。

 

审核管理信息
private static final long serialVersionUID = 1L;
private String projectId;     // 项目编号
private Integer examineType;      // 审核类型
private String examinePerson;     // 审核人
private Date examineTime;     // 审核时间
private String modifyOpinions;    // 修改意见
private Integer auditConclusion;      // 审核结论
private Integer isReview;     // 是否复审(yes_no)
private Integer totalScore;       // 总得分
private Integer subjectLevel;     // 主体级别
private List<RateAuditScoreDetail> rateAuditScoreDetails;
private List<RateExamineObj> rateExamineObjList=new ArrayList<>();
private RateExamineObjType rateExamineObjType;
private RateSignPromise rateSignPromise;

 

审核得分明细(RateAuditScoreDetail
private static final long serialVersionUID = 1L;
private String examineManagerId;      // 审核管理编号
private String auditProjectId;    // 考核项编号
private Integer examineGoal;      // 考核项得分

做映射

<resultMap type="AuditManagerInfo" id="AuditManagerInfoBig">
   <id column="project_id" property="projectId"/>
   <result column="examine_type" property="examineType"/>
   <result column="examine_person" property="examinePerson"/>
   <result column="examine_time" property="examineTime"/>
   <result column="modify_opinions" property="modifyOpinions"/>
   <result column="audit_conclusion" property="auditConclusion"/>
   <result column="is_review" property="isReview"/>
   <result column="total_score" property="totalScore"/>
   <result column="subject_level" property="subjectLevel"/>
   <!-- 考察项 -->
   <collection  property="rateExamineObjList" javaType="java.util.List" ofType="com.dagongsoft.modules.auditManagement.entity.RateExamineObj">
      <id column="examine_obj_type_id" property="examineObjTypeId"/>
      <result column="examine_obj_name" property="examineObjName"/>
      <result column="score_weight" property="scoreWeight"/>
      <result column="enable_state" property="enableState"/>
      <result column="sort" property="sort"/>
      <result column="examineGoal" property="examineGoal"/>
   </collection>
</resultMap>

关联实体类:

<resultMap type="RateProjectBasicInfo" id="rateProjectBasicInfoResultMap">
   <id column="ID" property="id" />
   <result column="PROJECT_NAME" property="projectName" />
   <result column="COMPANY_ID" property="companyId" />
   <result column="INDUSTRY_NUM" property="industryNum" />
   <result column="PROJECT_TYPE" property="projectType"/>
   <result column="PROJECT_SOURCE" property="projectSource"/>
   <result column="PROJECT_TIME" property="projectTime"/>
   <result column="CURRENT_NODE_ID" property="currentNodeId"/>
   <result column="PROJECT_STATE" property="projectState"/>
   <!--注意:这种方式javaType必须指定,表示rateTaskInfo的类型是RateTaskInfo,否则会报错 -->
   <association property="rateTaskInfo" javaType="RateTaskInfo">
      <!-- RateTaskInfo自身的属性与数据库字段的映射 -->
      <id property="handlePersonId" column="HANDLE_PERSON_ID"/>
      <result property="submitStatus" column="SUBMIT_STATUS"/>
      <result property="taskIsComplete" column="TASK_IS_COMPLETE"/>
   </association>
</resultMap>

 

 

 

 

 

 

  • 18
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MyBatis提供了一种简便的方式来实现一对多联查询。在这种情况下,一个实体类中包含了多个子实体类的集合,这些子实体类与该实体类是一对多的关系。 下面是一对多联查询的示例: 1. 首先,我们创建以下两个实体类: Order.java ```java public class Order { private int id; private String code; private List<OrderItem> items; // 省略getter和setter方法 } ``` OrderItem.java ```java public class OrderItem { private int id; private int orderId; private String product; private int quantity; // 省略getter和setter方法 } ``` 2. 接下来,我们需要创建一个映射文件来进行一对多联查询。在这个映射文件中,我们需要使用`<collection>`标签来定义一个集合属性,用来存储子实体类的列表。 OrderMapper.xml ```xml <mapper namespace="com.example.OrderMapper"> <resultMap id="orderMap" type="com.example.Order"> <id property="id" column="id"/> <result property="code" column="code"/> <collection property="items" ofType="com.example.OrderItem"> <id property="id" column="item_id"/> <result property="product" column="product"/> <result property="quantity" column="quantity"/> </collection> </resultMap> <select id="getOrders" resultMap="orderMap"> SELECT o.id, o.code, i.id as item_id, i.product, i.quantity FROM orders o LEFT JOIN order_items i ON o.id = i.order_id ORDER BY o.id </select> </mapper> ``` 在这个映射文件中,我们使用了`<resultMap>`标签来定义一个结果集映射,它包含了一个`<collection>`标签来定义子实体类的集合属性。在查询语句中,我们使用了`LEFT JOIN`来将订单和订单项关联起来,并使用`ORDER BY`子句来按订单ID排序。 3. 最后,我们需要创建一个接口来调用映射文件中的查询方法。 OrderMapper.java ```java public interface OrderMapper { List<Order> getOrders(); } ``` 现在,我们可以使用这个接口来查询订单和订单项的信息,如下所示: ```java SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml")); SqlSession sqlSession = factory.openSession(); OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class); List<Order> orders = orderMapper.getOrders(); for (Order order : orders) { System.out.println(order.getCode()); for (OrderItem item : order.getItems()) { System.out.println("\t" + item.getProduct() + " x" + item.getQuantity()); } } ``` 这个示例中,我们首先创建了一个`SqlSessionFactory`对象,然后使用它来创建一个`SqlSession`对象。接下来,我们使用`getMapper()`方法来获取一个`OrderMapper`接口的实现类。最后,我们调用查询方法来获取订单和订单项的信息,并遍历结果集来输出这些信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值