在使用mybatis中指定字段查詢


1:需求:查詢學過“葉平”老師所教的所有課的同學的學號、姓名;

1 List<Map<String,Object>> selectYepingAllCourse(@Param("name") String name);

List<Map<String,Object>>來接收從數據庫查詢的數據
 1 <!--學葉平老師教的所有課的學生的學號,姓名-->
 2 <select id="selectYepingAllCourse" resultMap="Base_ResultMap">
 3             SELECT
 4             a.s_id,
 5             a.sname
 6         FROM
 7             a_student a
 8         WHERE
 9             a.s_id IN (
10                 SELECT
11             a.s_id
12         FROM
13             a_sc a
14         INNER JOIN a_course b ON a.c_id = b.c_id
15         INNER JOIN a_teacher c ON c.t_id = b.t_id
16         WHERE
17             c.tname = #{name}
18         GROUP BY
19             a.s_id
20         HAVING
21             count(a.c_id) = (
22                 SELECT
23                     count(a_course.c_id)
24                 FROM
25                     a_course
26                 INNER JOIN a_teacher ON a_teacher.t_id = a_course.t_id
27                 WHERE
28                     a_teacher.tname = #{name}
29             )
30             );
31 </select>

分析一下這個sql。

1:都有哪些學生學習了葉平老師的課。
    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
    2:葉平老師教了幾門課。
    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 = '葉平'
    )
    3:學葉平老師課和葉平老師教的課一樣的學生的信息。
    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集合的值。

1 for(int i=0;i<list.size();i++){
2             Map map=list.get(i);
3             //是用set來接收的。不能重復。無順序
4             Set set = map.keySet();
5             System.out.println("set的值 "+set);
6             Object sId = map.get("sId");
7             System.out.println("得到sId的值 "+sId);
8         }

輸出結果:這個只有一條結果。

下面看下多個結果的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM