ibatis如何进行多表连接查询

八月的思念 2013-06-06 03:24:18
本人这几天在研究ibatis,关于ibatis的多表连接查询,查询出的数据是多张表的结果,这种查询应该怎么用ibatis实现,比如我想查询一个学生的成绩,涉及到了三张表,table student(sid number(5),sname varchar2(10)),课程表table course(cid number(5),cname varchar2(10)),成绩表table score(sid number(5),cid number(5),score number(5)),想展示出学生的对应课程成就,SQL应该是:
select s.sname,c.cname,t.score from student s,course c,score t where s.sid=t.sid and c.cid=
t.cid and s.sid=数字,但是用ibatis应该怎么实现,主要是配置文件这些应该怎么写?我知道的传参数可以用map的形式将各种参数组合起来,但是如果返回结果涉及到多个类的,是不是也应该用map的形式返回?能具体给个有注释的demo吗?谢谢了
...全文
1348 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
captainJek 2014-06-25
  • 打赏
  • 举报
回复
八月的思念 2013-06-06
  • 打赏
  • 举报
回复
引用 4 楼 dengsilinming 的回复:
<select id="homePageList" parameterClass="java.util.Map" resultClass="java.util.HashMap">
		SELECT 
		  v.`attribute_id` AS attributeId,
		  o.attribute_option_id AS attributeOptionId,
		  TRIM(ol.`attribute_option_name`) AS attributeOptionName,
		  v.`value_name` AS valueName,
		  r.`value_key` AS valueKey, 
		  l.`value_content` AS valueContent
		FROM
		  cosplay_display d 
		  JOIN t_attribute_option o 
		    ON d.option_id = o.attribute_option_id 
		    AND o.data_status = 0 
		  JOIN t_attribute_option_lang ol 
		    ON o.attribute_option_id = ol.attribute_option_id 
		    AND ol.data_status = 0 
		    AND ol.`language_id` = #languageId#
		  JOIN product_attribute_function_value v 
		    ON o.`product_attribute_id` = v.`attribute_id` 
		    AND o.attribute_option_id = v.option_id 
		    AND v.data_status = 0 
		    AND v.value_name IS NOT NULL 
		  JOIN product_attribute_function_value_lang l 
		    ON l.value_id = v.id 
		    AND l.data_status = 0 
		    AND l.value_content IS NOT NULL 
		    AND l.`language_id` = 1
		  JOIN product_attribute_function_rule r 
		    ON r.`id` = v.`rule_id` 
		    AND r.`data_status` = 0 
		   	<isNotEmpty prepend="and" property="key">
		    	r.`value_key` = #key#
		    </isNotEmpty>
		WHERE d.data_status = 0 
		  AND d.display_type = #displayType#
		ORDER BY d.`sort`
		LIMIT #returnNum#
	</select>
谢谢,我已经找到了
dengsilinming 2013-06-06
  • 打赏
  • 举报
回复
<select id="homePageList" parameterClass="java.util.Map" resultClass="java.util.HashMap">
		SELECT 
		  v.`attribute_id` AS attributeId,
		  o.attribute_option_id AS attributeOptionId,
		  TRIM(ol.`attribute_option_name`) AS attributeOptionName,
		  v.`value_name` AS valueName,
		  r.`value_key` AS valueKey, 
		  l.`value_content` AS valueContent
		FROM
		  cosplay_display d 
		  JOIN t_attribute_option o 
		    ON d.option_id = o.attribute_option_id 
		    AND o.data_status = 0 
		  JOIN t_attribute_option_lang ol 
		    ON o.attribute_option_id = ol.attribute_option_id 
		    AND ol.data_status = 0 
		    AND ol.`language_id` = #languageId#
		  JOIN product_attribute_function_value v 
		    ON o.`product_attribute_id` = v.`attribute_id` 
		    AND o.attribute_option_id = v.option_id 
		    AND v.data_status = 0 
		    AND v.value_name IS NOT NULL 
		  JOIN product_attribute_function_value_lang l 
		    ON l.value_id = v.id 
		    AND l.data_status = 0 
		    AND l.value_content IS NOT NULL 
		    AND l.`language_id` = 1
		  JOIN product_attribute_function_rule r 
		    ON r.`id` = v.`rule_id` 
		    AND r.`data_status` = 0 
		   	<isNotEmpty prepend="and" property="key">
		    	r.`value_key` = #key#
		    </isNotEmpty>
		WHERE d.data_status = 0 
		  AND d.display_type = #displayType#
		ORDER BY d.`sort`
		LIMIT #returnNum#
	</select>
八月的思念 2013-06-06
  • 打赏
  • 举报
回复
引用 2 楼 dengsilinming 的回复:
如果你要返回一个实体类,那你就得把三个实体类写在一个实体类里面;你也可以直接返回一个Map,如果有需要再去service或者dao层解析查询出来的Map就行了。个人觉得你这儿直接返回一个Map还方便一些(因为你返回的字体少,就算要解析也很容易,况且你这儿只返回一个学生的信息)
我就是不知道如何返回一个map,这个返回结果的map在配置文件里面怎么写,能给个具体的例子吗?谢了
dengsilinming 2013-06-06
  • 打赏
  • 举报
回复
如果你要返回一个实体类,那你就得把三个实体类写在一个实体类里面;你也可以直接返回一个Map,如果有需要再去service或者dao层解析查询出来的Map就行了。个人觉得你这儿直接返回一个Map还方便一些(因为你返回的字体少,就算要解析也很容易,况且你这儿只返回一个学生的信息)
八月的思念 2013-06-06
  • 打赏
  • 举报
回复
补充说明一下,这三张表对应了3个实体类

67,543

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧