Mybatis 级联查询 (一对多 )

后台系统中 涉及到添加试卷 问题 答案的一个模块的。我需要通过试卷 查询出所有的试题,以及试题的答案。这个主要要使用到Mybatis的级联查询。

通过试卷 查询出与该试卷相关的试题(一对多),查询出试题的答案及分数(一对多)。

SelfTestTitle 实体类,SelfTestQuestion实体类,SelfTestAnswer实体类。

package org.system.entity.self;

import java.util.List;

import org.core.entity.BaseEntity;

public class SelfTestTitle extends BaseEntity {
    private Integer id;
    private String name;
    private String desc;
    private String picUrl;
    private List<SelfTestQuestion> questionList;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getDesc() {
        return desc;
    }
    public void setDesc(String desc) {
        this.desc = desc;
    }
    public String getPicUrl() {
        return picUrl;
    }
    public void setPicUrl(String picUrl) {
        this.picUrl = picUrl;
    }

    public List<SelfTestQuestion> getQuestionList() {
        return questionList;
    }
    public void setQuestionList(List<SelfTestQuestion> questionList) {
        this.questionList = questionList;
    }
    @Override
    public Integer getPage() {
        return super.getPage();
    }

    @Override
    public Integer getRows() {
        return super.getRows();
    }

}

View Code

package org.system.entity.self;

import java.util.List;

import javax.validation.constraints.NotNull;

import org.core.entity.BaseEntity;
import org.hibernate.validator.constraints.NotBlank;
import org.utils.spring.Groups;

public class SelfTestQuestion extends BaseEntity {
    private Integer id;

    @NotNull(message = "{selfTestTitle.id.notnull.valid}", groups = { Groups.Insert.class })
    private Integer titleId;

    @NotBlank(message = "{question.notblank.valid}", groups = { Groups.Insert.class })
    private String question;

    @NotNull(message = "{viewOrder.notnull.valid}", groups = { Groups.Insert.class })
    private Integer viewOrder;

    private List<SelfTestAnswer> answersList;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Integer getTitleId() {
        return titleId;
    }

    public void setTitleId(Integer titleId) {
        this.titleId = titleId;
    }

    public String getQuestion() {
        return question;
    }

    public void setQuestion(String question) {
        this.question = question;
    }

    public Integer getViewOrder() {
        return viewOrder;
    }

    public void setViewOrder(Integer viewOrder) {
        this.viewOrder = viewOrder;
    }

    public List<SelfTestAnswer> getAnswersList() {
        return answersList;
    }

    public void setAnswersList(List<SelfTestAnswer> answersList) {
        this.answersList = answersList;
    }

    @Override
    public Integer getPage() {
        return super.getPage();
    }

    @Override
    public Integer getRows() {
        return super.getRows();
    }
}

View Code

package org.system.entity.self;

import org.core.entity.BaseEntity;

public class SelfTestAnswer extends BaseEntity {
    private Integer id;

    private Integer questionId;

    private String answer;

    private Integer score;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Integer getQuestionId() {
        return questionId;
    }

    public void setQuestionId(Integer questionId) {
        this.questionId = questionId;
    }

    public String getAnswer() {
        return answer;
    }

    public void setAnswer(String answer) {
        this.answer = answer;
    }

    public Integer getScore() {
        return score;
    }

    public void setScore(Integer score) {
        this.score = score;
    }
    @Override
    public Integer getPage() {
        return super.getPage();
    }

    @Override
    public Integer getRows() {
        return super.getRows();
    }
}

View Code

 1     <!-- 查询试卷详情 -->
 2       <select id="queryOne"  parameterType="org.system.entity.self.SelfTestTitle"  resultMap="getSelfTestQuestionMap">
 3         select id, name, `desc` de, pic_url picUrl
 4         from self_test_title
 5         where id = #{id}
 6       </select>
 7        <!-- 定义结果集 试卷下的问题 -->
 8     <resultMap type="map" id="getSelfTestQuestionMap">
 9           <result property="id" column="id" />
10           <collection property="questionList" column="id" javaType="list" select="getSelfTestQuestions"/>
11     </resultMap>
12
13    <!-- 查询问题 -->
14   <select id="getSelfTestQuestions"  parameterType="org.system.entity.self.SelfTestTitle"  resultMap="getSelfTestAnswersMap">
15         select id, title_id titleId, question, view_order viewOrder
16         from self_test_question
17         where title_id = #{id}
18   </select>
19
20     <!-- 定义结果集  问题下的答案 -->
21       <resultMap type="map" id="getSelfTestAnswersMap">
22           <result property="id" column="id"/>
23           <collection property="answersList" column="id" javaType="list" select="getSelfTestAnswers"></collection>
24       </resultMap>
25    <!-- 查询问题 -->
26     <select id="getSelfTestAnswers"  parameterType="org.system.entity.self.SelfTestAnswer"  resultType="map">
27         select id ,question_id questionId,answer ,score from  self_test_answer where question_id =#{id}
28     </select> 

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

查询出来的结果

 

现在主要是要让他显示出来了!

 

时间: 2024-09-25 18:42:55

Mybatis 级联查询 (一对多 )的相关文章

城市,区县,地址,没有主外键区分,没有父级ID,所以数据在一个表如何实现级联查询?

问题描述 城市,区县,地址,没有主外键区分,没有父级ID,所以数据在一个表如何实现级联查询? 城市,区县,地址,没有主外键区分,没有父级ID,所以数据在一个表如何实现级联查询? 解决方案 一般这样的情况都是三张表.如果你要放在一张表里面,那么你肯定会有一个父级ID的呀.不然怎么区分,怎么级联? 解决方案二: 都在一个表,我也很纳闷,接手的项目数据库是这样,表示压力好大 解决方案三: 一般不是全在一张表,用level和parentId来区分关联:就是三张表,parentId关联. 没有parent

hibernate 级联查询

hibernate级联查询 1,实体类结构 Java代码   @Entity   @Table(name = "t_vote")   public class Vote {       private int id;       /***       * 1:最宜居<br>       * 2:最优户<br>       * 3:最佳物业       */       private int type;       private HouseBuilding h

请问为什么我的mybatis 关联查询只有一条记录,但是日志打印出来的Total: 3, 谢谢

问题描述 请问为什么我的mybatis 关联查询只有一条记录,但是日志打印出来的Total: 3, 谢谢 SELECT * FROM JiKeUser; 这个里面有如下三条记录, id userName password ------ --------- ---------- 2 jike00100 666666 3 jike00200 888888 8 author001 123456 SELECT * FROM author; 这个里面也是三条记录, id realName userID I

sql-对SQL语句级联查询的一些理解,各位进来看我说的对不对?

问题描述 对SQL语句级联查询的一些理解,各位进来看我说的对不对? 外联是通过n去查询1 例如select * from A left join B on B.id=A.bid 内联是通过1去查询n 例如select * from A,B 自己的一些理解 解决方案 不是,left join和inner join的区别是,left join会取得左表有记录,但是右表没有的.比如 左表: id 省 1 河北 2 山东 3 辽宁 右表 省id 城市 1 石家庄 1 邢台 2 青岛 2 济南 那么lef

hql实现自身实体的级联查询

问题描述 怎么要实现hql语句查询一个表中的级联查询???? 解决方案 解决方案二:先配置级联,表与表的关系就是自己对应自己,这样和异表级联相同了.自身级联用来做什么呢?需要的话查多次出来,在逻辑上写级联不是更好解决?解决方案三:lazy="false"?这样不行?

级联查询(回答就有分)

问题描述 在不确定级联层数时,怎样进行级联查询,如:A{id,name,bid},b{id,name,cid},c{id,name,did}......以A表为基础,级联查询所有name,注意:不确定级联层数. 解决方案 本帖最后由 czp896019976 于 2011-04-17 16:55:30 编辑解决方案二:我用的数据库是mssqlserver解决方案三:没人会吗?解决方案四:不会/...........解决方案五:用多表连接查询解决方案六:不确定级联层数,估计就只好拼接sql语句了-

select-Spring+mybatis+db2 查询sql报错

问题描述 Spring+mybatis+db2 查询sql报错 Spring+mybatis+db2(aix环境) 查询sql报错,用主键查询或者是数据查询正常.. 用字符串查询报错.代码如下. Caused by: org.apache.ibatis.exceptions.PersistenceException: Error querying database. Cause: java.lang.NullPointerException The error may exist in com/

关于hibernate多表级联查询的问题

问题描述 关于hibernate多表级联查询的问题 有一个问题,有4个表和对应的类A,B,C,D,A和B分别与C级联,C和D级联,但是A需要获取D中信息,但是B不需要,怎么在B里设置不查询D?怎么注解? 解决方案 多表级联Hibernate级联关系问题

级联查询?

问题描述 在不确定级联层数时,怎样进行级联查询,如:A{id,name,bid},b{id,name,cid},c{id,name,did}......以A表为基础,级联查询所有name,注意:不确定级联层数. 解决方案 解决方案二:该回复于2011-04-12 13:49:02被版主删除解决方案三:该回复于2011-04-12 13:28:40被版主删除解决方案四:具体问题,具体分析解决方案五:一般的级联都是3-4级,4级都是已经是较多了,没有什么必要尽量用2-3级.如果你在不确定级联层数的时