在使用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 ...
随机推荐
- 动态修改settings
ide visual studio2010 注意范围是用户 注意改完要save
- spring mvc 接受数组
@RequestParam(value = "customerIds[]")Integer[] customerIds 加上 requestParam value设置为 &qu ...
- webpack前端模块打包器
webpack前端模块打包器 学习网址: https://doc.webpack-china.org/concepts/ http://www.runoob.com/w3cnote/webpack-t ...
- Java RPC 分布式框架性能大比拼,Dubbo排老几?
来源:http://985.so/aXe2 Dubbo 是阿里巴巴公司开源的一个Java高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成 ...
- Python2中range 和xrange的区别??
两者用法相同,不同的是range返回的结果是一个列表,而xrange的结果是一个生成器, 前者是直接开辟一块内存空间来保存列表,后者是边循环边使用,只有使用时才会开辟内存空间, 所以当列表很长时,使用 ...
- C#设计模式:迭代器模式(Iterator Pattern)
一,什么是迭代器模式(Iterator Pattern) 提供一种方法顺序访问一个容器对象中的各个元素,而又不需要暴露该对象的内部表示 二,看下面例子: using System; using Sys ...
- Handle Refresh Token Using ASP.NET Core 2.0 And JSON Web Token
来源: https://www.c-sharpcorner.com/article/handle-refresh-token-using-asp-net-core-2-0-and-json-web ...
- 如何在springboot中读取自己创建的.properties配置的值
在实体类里面加上 @PropertySource("classpath:/robot_config.properties") robot_config.properties // ...
- mysql中explain输出列之id的用法详解
参考mysql5.7 en manual,对列id的解释: The SELECT identifier. This is the sequential number of the SELECT wit ...
- ES6——Promise
异步和同步 异步,操作之间没有关系,同时执行多个操作, 代码复杂 同步,同时只能做一件事,代码简单 Promise 对象 用同步的方式来书写异步代码 Promise 让异步操作写起来,像在写同步操作的 ...