mybatis怎么做到二级mybatis 多层级联查询询

width:100%">
确实不错,顶先
width:100%">
顶顶更健康!
width:100%">
iEcola存储架构的帖子越来越有深度了!
width:100%">
我有一颗学霸心,却只有学渣命
width:100%">
顶!顶!顶!
width:100%">
战五渣有内涵!
width:100%">
这个星期四是肿么啦
width:100%">
写得实在太好了,我唯一能做的就是默默顶贴!
width:100%">
为虾米总也抢不到沙发?!!
width:100%">
12345678910
打开手机扫一扫
Comsenz Inc. Design: Dean. DiscuzFans.myBatis(7)
package com.gewb.
import java.util.L
import com.gewb.entity.S
public interface StudentDao {
public void addStudent(Student student);
// public List&Student& findStudentByAddress(int addressId);
public List&Student& findStudentWithAddress(int id);
package com.gewb.
import com.gewb.entity.A
public interface AddressDao {
public Address findById(int id);
StudentMapper.xml
&?xml version=&1.0& encoding=&UTF-8& ?&
&!DOCTYPE mapper
PUBLIC &-//mybatis.org//DTD Mapper 3.0//EN&
&http://mybatis.org/dtd/mybatis-3-mapper.dtd&&
&mapper namespace=&com.gewb.dao.StudentDao&&
&resultMap type=&Student& id=&StudentResult&&
&id property=&id& column=&id&/&
&result property=&name& column=&name&/&
&result property=&age& column=&age&/&
&association property=&address& column=&addressId& select=&com.gewb.dao.AddressDao.findById&&&/association&
&/resultMap&
&select id=&findStudentWithAddress& parameterType=&Integer& resultMap=&StudentResult&&
select t1.* from student t1,address t2 where t1.addressId = t2.id and t1.id = #{id};
&insert id=&addStudent& parameterType=&Student&&
insert into student values(null,#{name},#{age});
AddressMapper.xml
&?xml version=&1.0& encoding=&UTF-8& ?&
&!DOCTYPE mapper
PUBLIC &-//mybatis.org//DTD Mapper 3.0//EN&
&http://mybatis.org/dtd/mybatis-3-mapper.dtd&&
&mapper namespace=&com.gewb.dao.AddressDao&&
&resultMap type=&Address& id=&AddressResult&&
&id property=&eId& column=&id&/&
&result property=&eProvince& column=&province&/&
&result property=&eCity& column=&city&/&
&result property=&eDistrict& column=&district&/&
&/resultMap&
&select id=&findById& parameterType=&Integer& resultMap=&AddressResult&&
select * from address where id = #{id};
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:5968次
排名:千里之外
原创:20篇
转载:65篇
(6)(10)(13)(10)(2)(4)(4)(19)(2)(1)(1)(15)&&原spring+spring mvc+mybatis框架实现省、市、区级联查询(附带mysql数据库)4个牛币请下载代码后再发表评论//级联/级联/demo1/级联/demo1/.classpath/级联/demo1/.mymetadata/级联/demo1/.project/级联/demo1/.settings/级联/demo1/.settings/.jsdtscope/级联/demo1/.settings/com.genuitec.eclipse.core.prefs/级联/demo1/.settings/org.eclipse.core.resources.prefs/级联/demo1/.settings/org.eclipse.jdt.core.prefs/级联/demo1/.settings/org.ponent/级联/demo1/.settings/org.mon.project.facet.core.xml/级联/demo1/.settings/org.eclipse.wst.jsdt.ui.superType.container/级联/demo1/src/级联/demo1/src/com/级联/demo1/src/com/demo1/级联/demo1/src/com/demo1/action/级联/demo1/src/com/demo1/dao/级联/demo1/src/com/demo1/entity精精精精原精原精原原原原精原原原精最热搜索分享话题编程语言基础Web开发数据库开发客户端开发脚本工具游戏开发服务器软硬件开源组件类库相关分享原精原原精原精原原原最近下载暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级最近浏览暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级扫描二维码关注最代码为好友"/>扫描二维码关注最代码为好友7614人阅读
IBATIS/MYBATIS(49)
关联有嵌套查询和嵌套结果两种方式,本文是按照嵌套结果这种方式来说明的
上一章介绍了多对一的关系,用到了&association&&/association&,这是一个复杂类型的关联。我们选择一个示例来回顾下,比如:一个博客有一个用户,关联映射就工作于这种结果之上。首先看下,我们在本文中要用到的表结构字段:
我们把一个博客和一个用户关联在一起,就像:
注意这个联合查询,以及所有结果被唯一而清晰的名字而重命名。这使得映射非常简单。现在我们可以映射这个结果:
在上面的例子中,你可以看到博客的作者关联authorResult 结果映射来加载作者实例。 &上面的实例中,用了外部的结果映射元素来映射关联。这使得Author结果映射可以重用。然而,你不需要重用它的话,或者你仅仅引用你所有的结果映射到一个单独描述的结果映射中。你可以嵌套结果映射。这里给出使用这种方式的相同示例:
上面你已经看到了如何处理有一个类型的关联.但是“有很多个”是怎样的呢?,也就是集合类型,本文的主要工作是来说这个的。
相对于关联来说,集合映射多了一个属性”ofType“.这个属性用来区分JavaBean(或字段)属性类型和集合包含的类型来说是很重要的. ,ofType用来表示集合包含类型。
集合元素的作用和关联几乎是相同的。我们来继续上面的示例,一个博客只有一个作者。但是博客有很多文章,在博客类中,这可以由下面的写法来表示:
这一次联合博客表和文章表(一个blog_id可以对应很多的文章)SQL如下:
现在用“文章映射集合”来映射 “博客“,可以简单写为:
高级关联和集合映射还有很多要琢磨的地方。就让面介绍的集合映射,稍微的整理下(一个博客下面,有很多文章).
首先创建下,需要用到的表格,以及向其中插入一些数据.&
在贴JAVA代码之前,先看下目录结构吧:
作者类 Author.java
文章类Post.,java
总配置文件
测试类Test.java
运行后结果如下:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:4456860次
积分:42834
积分:42834
排名:第65名
原创:213篇
转载:2277篇
评论:466条
(58)(96)(177)(114)(86)(40)(43)(73)(15)(10)(17)(12)(6)(20)(27)(54)(71)(97)(74)(32)(2)(24)(21)(62)(60)(36)(23)(27)(46)(34)(76)(63)(121)(142)(74)(54)(120)(77)(42)(4)(12)(19)(1)(9)(15)(19)(18)(16)(31)(79)(68)Mybatis一对多,查询列表时如何关联子表数据? - 开源中国社区
当前访客身份:游客 [
当前位置:
最近在折腾MyBatis,练习中在研究怎么在读取主表List的时候,怎么把每记录所对应的子表数据一并查出来,在折腾一番后要向OSCER们求助了。
get主表一条数据时,查出子表数据没问题(以同样的方法配置在List主表数据时不行),求教!!谢谢
共有4个答案
<span class="a_vote_num" id="a_vote_num_
http://my.oschina.net/u/2312022/blog/519714
<span class="a_vote_num" id="a_vote_num_
你看一看这个
嵌套查询:通过执行另外一个SQL映射语句来返回预期的复杂类型
SELECT * FROM class WHERE c_id=1;
SELECT * FROM teacher WHERE t_id=1
//1 是上一个查询得到的teacher_id的值
SELECT * FROM student WHERE class_id=1
//1是第一个查询得到的c_id字段的值
&select id="getClass4" parameterType="int" resultMap="ClassResultMap4"&
select * from class where c_id=#{id}
&resultMap type="Classes" id="ClassResultMap4"&
&id property="id" column="c_id" /&
&result property="name" column="c_name" /&
&association property="teacher" column="teacher_id" javaType="Teacher" select="getTeacher2"&&/association&
&collection property="students" ofType="Student" column="c_id" select="getStudent"&&/collection&
&/resultMap&
&select id="getTeacher2" parameterType="int" resultType="Teacher"&
SELECT t_id id, t_name name FROM
teacher WHERE t_id=#{id}
&select id="getStudent" parameterType="int" resultType="Student"&
SELECT s_id id, s_name name FROM
student WHERE class_id=#{id}
<span class="a_vote_num" id="a_vote_num_
这样做多出N个查询
--- 共有 1 条评论 ---
是的,感觉这样很不好
(5个月前)&nbsp&
<span class="a_vote_num" id="a_vote_num_
mybatis有两种一对多的方式,一种是上面列出来的级联查询方式,这种方式会带来典型的N+1问题,在实际项目中不推荐使用,另外一种是用关联查询的方式,一般都用这种方式,具体做法可以看看mybatis文档,里面写的很清楚。个人经验主要就是注意需要设置正确的ID属性即可。
更多开发者职位上
有什么技术问题吗?
车开源的其它问题
类似的话题}

我要回帖

更多关于 mybatis外键级联查询 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信