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();
}
}
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();
}
}
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();
}
}
<!-- 查询试卷详情 -->
<select id="queryOne" parameterType="org.system.entity.self.SelfTestTitle" resultMap="getSelfTestQuestionMap">
select id, name, `desc` de, pic_url picUrl
from self_test_title
where id = #{id}
</select>
<!-- 定义结果集 试卷下的问题 -->
<resultMap type="map" id="getSelfTestQuestionMap">
<result property="id" column="id" />
<collection property="questionList" column="id" javaType="list" select="getSelfTestQuestions"/>
</resultMap> <!-- 查询问题 -->
<select id="getSelfTestQuestions" parameterType="org.system.entity.self.SelfTestTitle" resultMap="getSelfTestAnswersMap">
select id, title_id titleId, question, view_order viewOrder
from self_test_question
where title_id = #{id}
</select> <!-- 定义结果集 问题下的答案 -->
<resultMap type="map" id="getSelfTestAnswersMap">
<result property="id" column="id"/>
<collection property="answersList" column="id" javaType="list" select="getSelfTestAnswers"></collection>
</resultMap>
<!-- 查询问题 -->
<select id="getSelfTestAnswers" parameterType="org.system.entity.self.SelfTestAnswer" resultType="map">
select id ,question_id questionId,answer ,score from self_test_answer where question_id =#{id}
</select>
property:属性名称
column:外键列
javaType:类型(可以是自己的实体类)
select:关联的查询语句
collection:一对多的标签
property:属性名称
column:外键列
查询出来的结果

现在主要是要让他显示出来了!
Mybatis 级联查询 (一对多 )的更多相关文章
- mybatis ---- 级联查询 一对多 (集合映射)
关联有嵌套查询和嵌套结果两种方式,本文是按照嵌套结果这种方式来说明的 上一章介绍了多对一的关系,用到了<association></association>,这是一个复杂类型的 ...
- Mybatis 之级联查询 一对多配置
Mybatis级联 查询相对于hibenate是有点麻烦,但是相应好处也是有的,Mybatis轻量.根据自己要的字段配置方便 一对多配置用 <collection property=&quo ...
- mybatis级联查询,多对一查询问题
在使用Mybatis进行多表级联查询时遇到了一个问题:查询结果只有一项,但正确结果是两项.经测试,SQL语句本身没有问题. 在SQL映射文件(XML)中: <!-- 级联查询数据 --> ...
- mybatis级联查询
1.定义四个实体.User Role Privilege Resource,他们之间的对于关系为 2.需求:我通过用户名username查找出该用户对应的角色以及角色对应的权限和资源 3 ...
- Mybatis 级联查询时只查出了一条数据
造成这个问题的原因是: 主表和明细表的id字段名相同造成的. 问题的关键在于resultMap中如果不定义类似主键之类的能够区分每一条结果集的字段的话,会引起后面一条数据覆盖前面一条数据的现象.
- Mybatis中使用级联查询,一对多的查询
一.需求描述 自己在开发一个小程序的过程中,需要做的一个查询是稍微比较复杂的查询,根据用户信息去查询用户所对应的宠物信息. 一个用户可能对应多个宠物,所以在用户和宠物信息的对应关系就是一对多的关系. ...
- Mybatis 一对一、一对多、多对多关联之级联添加
示例项目:MIPO_CRM 一.一对一关联 示例:订单与销售机会 描述:在业务员与客户的联系人的联系记录中可以生成一条销售机会,而此条销售机会可生成一条订单,两者呈一对一关联. 1.表设计 oppor ...
- MyBatis关联查询,一对多关联查询
实体关系图,一个国家对应多个城市 一对多关联查询可用三种方式实现: 单步查询,利用collection标签为级联属性赋值: 分步查询: 利用association标签进行分步查询: 利用collect ...
- mybatis实战教程二:多对一关联查询(一对多)
多对一关联查询 一.数据库关系.article表和user表示多对一的关系 CREATE TABLE `article` ( `id` ) NOT NULL AUTO_INCREMENT, `user ...
随机推荐
- C++陷阱之慎用string类
我们知道,string类为我们提供了很多的便利,我们用string类能方便的做字符串的各种操作,避免了我们直接操作char指针而产生的一些繁琐的操作,和内存泄露的可能性,可是string类也是有陷阱的 ...
- 查找练习 hash——出现过的数字 分类: 查找 2015-06-18 17:30 7人阅读 评论(0) 收藏
查找练习 hash--出现过的数字 *Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 有一个数据字典,里面存有n个数字(n<=10 ...
- Animator组件关闭再打开后参数丢失问题
问题如下,因为再激活Animator时,它会重置一次,参数也会丢失 这个问题一直存在,论坛给出的解释是把参数缓存下来,在激活时重置 http://answers.unity3d.com/questio ...
- VC++实现在系统托盘来新消息闪烁,鼠标悬停显示窗口
转载:http://www.codeguru.com/cpp/com-tech/activex/tutorials/article.php/c8115/How-to-Implement-a-Mouse ...
- SqlSever基础 一个条件group by 一列有两个内容,分组并查看每个内容有多少行,并用as起名
镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...
- VS2015使用技巧 打开代码片段C#部分
镇场诗: 大梦谁觉,水月中建博客.百千磨难,才知世事无常. 今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ 1. ...
- 利用JDBC处理mysql大数据--大文本和二进制文件等
转载自http://www.cnblogs.com/xdp-gacl/p/3982581.html 一.基本概念 大数据也称之为LOB(Large Objects),LOB又分为:clob和blob, ...
- 02.iOS开发网络篇—HTTP协议
iOS开发网络篇—HTTP协议 说明:apache tomcat服务器必须占用8080端口 一.URL 1.基本介绍 URL的全称是Uniform Resource Locator(统一资源定位符) ...
- FZU 2144 Shooting Game
Shooting Game Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submi ...
- ODBC连接mysql
配置/etc/odbc.ini 执行命令:isql freeswitch freeswitch 123456 -v 第一个报错: [08S01][unixODBC][MySQL][ODBC 5.3(w ...