在使用mybatis中指定字段查询
1:需求:查询学过“叶平”老师所教的所有课的同学的学号、姓名;
List<Map<String,Object>> selectYepingAllCourse(@Param("name") String name);
用
List<Map<String,Object>>来接收从数据库查询的数据
<!--学叶平老师教的所有课的学生的学号,姓名-->
<select id="selectYepingAllCourse" resultMap="Base_ResultMap">
SELECT
a.s_id,
a.sname
FROM
a_student a
WHERE
a.s_id IN (
SELECT
a.s_id
FROM
a_sc a
INNER JOIN a_course b ON a.c_id = b.c_id
INNER JOIN a_teacher c ON c.t_id = b.t_id
WHERE
c.tname = #{name}
GROUP BY
a.s_id
HAVING
count(a.c_id) = (
SELECT
count(a_course.c_id)
FROM
a_course
INNER JOIN a_teacher ON a_teacher.t_id = a_course.t_id
WHERE
a_teacher.tname = #{name}
)
);
</select>
分析一下这个sql。
:都有哪些学生学习了叶平老师的课。
SELECT
a.s_id,count(a.c_id)
FROM
a_sc a
INNER JOIN a_course b ON a.c_id = b.c_id
INNER JOIN a_teacher c ON c.t_id = b.t_id
WHERE
c.tname = '叶平'
GROUP BY
a.s_id
:叶平老师教了几门课。
SELECT
count(a_course.c_id)
FROM
a_course
INNER JOIN a_teacher ON a_teacher.t_id = a_course.t_id
WHERE
a_teacher.tname = '叶平'
)
:学叶平老师课和叶平老师教的课一样的学生的信息。
SELECT
a.s_id
FROM
a_sc a
INNER JOIN a_course b ON a.c_id = b.c_id
INNER JOIN a_teacher c ON c.t_id = b.t_id
WHERE
c.tname = '叶平'
GROUP BY
a.s_id
HAVING
count(a.c_id) = (
SELECT
count(a_course.c_id)
FROM
a_course
INNER JOIN a_teacher ON a_teacher.t_id = a_course.t_id
WHERE
a_teacher.tname = '叶平'
)
测试:
/**
* 查询学过“叶平”老师所教的所有课的同学的学号、姓名;
*/
@Test
public void testSelectYepingAllCourse(){
List<Map<String, Object>> list = ascMapper.selectYepingAllCourse("李一");
for (Map<String,Object> i:list){
System.out.println(i);
}
}
输出的结果:

得到List集合中Map集合的值。
for(int i=0;i<list.size();i++){
Map map=list.get(i);
//是用set来接收的。不能重复。无顺序
Set set = map.keySet();
System.out.println("set的值 "+set);
Object sId = map.get("sId");
System.out.println("得到sId的值 "+sId);
}
输出结果:这个只有一条结果。

下面看下多个结果的。

在使用mybatis中指定字段查询的更多相关文章
- Oracle中使用游标转换数据表中指定字段内容格式(拼音转数字)
应用场景:将数据表TB_USER中字段NNDP的内容中为[sannanyinv]转换为[3男1女] 主要脚本:一个游标脚本+分割字符串函数+拼音转数字脚本 操作步骤如下: 1.创建类型 create ...
- 【mybatis】mybatis自定义动态字段查询,mybatis实现动态字段查询,如果某个条件为null,则不查询某个字段,否则就查询某个字段
mybatis实现动态字段查询,如果某个条件为null,则不查询某个字段,否则就查询某个字段 先看一下 怎么实现动态的自定义字段查询: 例如: 而field 就是数据表中的某一个字段 String f ...
- sql 筛选表中指定字段包含26某个小写字母
SELECT *from 表名WHERE 字段 COLLATE Chinese_PRC_CS_AS LIKE '%[abcdefghijklmnopqrstuvwxyz]%'筛选表中指定字段包含26某 ...
- mybatis中的高级查询
Mybatis作为一个ORM框架,肯定是支持sql高级查询的. 下面的一个案例来为大家详细讲解mybatis中的高级查询. 案例说明: 此案例的业务关系是用户,订单,订单详情与商品之间的关系. 以订单 ...
- MySQL select 语句指定字段查询
指定字段查询 SELECT 语法 SELECT [ALL | DISTINCT] {* | table.* | [table.field1[as alias1][,table.field2[as al ...
- mybatis中xml字段空判断及模糊查询
由于业务特殊的查询需求,需要下面的这种查询,一直感觉模糊不清,本地测试一下顺便做个总结 贴一段xml代码,如下: <if test="receivedName != null and ...
- mybatis中sql语句查询操作
动态sql where if where可以自动处理第一个and. <!-- 根据id查询用户信息 --> <!-- public User findUserById(int id) ...
- Mybatis中的in查询和foreach标签
Mybatis中的foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. foreach元素的属性主要有 item,index,collection,open,separato ...
- MySQL中 指定字段排序函数field()的用法
MySQL中的field()函数,可以用来对SQL中查询结果集进行指定顺序排序. 函数使用格式如下: order by (str,str1,str2,str3,str4……),str与str1,str ...
随机推荐
- 阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第3节 Random类_10-练习一_生成1-n之间
生成随即数的时候,总是会短一个,因为它是从0开始的 这是左闭右闭区间. 循环100次输出的结果
- Python写一个自动点餐程序
Python写一个自动点餐程序 为什么要写这个 公司现在用meican作为点餐渠道,每天规定的时间是早7:00-9:40点餐,有时候我经常容易忘记,或者是在地铁/公交上没办法点餐,所以总是没饭吃,只有 ...
- 07 归档模式 Active redo log丢失或损坏的恢复
环境同上一篇 模拟处于active状态的redo log损坏 sesion 1 SYS@ orcl >/ GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEM ...
- 【GTS】关于GtsTetheringTestCases模块的几个失败项
GTS---关于GtsTetheringTestCases模块的几个失败项 1.run gts -m GtsTetheringTestCases -t com.google.android.tethe ...
- 【MM系列】SAP 主要模块及简介
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP 主要模块及简介 前言部分 ...
- linux下升级php5.4到php5.6
进入终端后查看php版本 php -v 输出可能如下: PHP 5.4.35 (cli) (built: Nov 14 2014 07:04:10) Copyright (c) 1997-2014 T ...
- Java相关面试题总结+答案(十)
[JVM] 194. 说一下 JVM 的主要组成部分?及其作用? 类加载器(ClassLoader) 运行时数据区(Runtime Data Area) 执行引擎(Execution Engine) ...
- CentOS6 破解登录密码
1.重启服务器,在倒数读秒的时候按任意键,就会出现如下界面 2.按e进入grub模式,选中kernel,然后按e进入内核编辑模式 3.进入内核编辑模式后,按空格+1回车(或按空格+single回车)退 ...
- 如何在Web工程中实现任务计划调度
转载自: http://www.oschina.net/question/146385_37793?sort=time 下面就Servlet侦听器结合Java定时器来讲述整个实现过程.要运用Servl ...
- SQL Server增量备份数据[转]
服务器中一个数据库DB,其中表A有几个地方要写入的,程序设定在网络不通的时候也可以用本机的数据库运行,在网络通达后,再将本机的数据写回到服务器中,经研究,增量备份有以下几种可能性: 1. ...