最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mapper.xml中查詢返回帶有List屬性的實(shí)體類結(jié)果問題

 更新時間:2023年06月26日 16:09:00   作者:cxy1109  
這篇文章主要介紹了Mapper.xml中查詢返回帶有List屬性的實(shí)體類結(jié)果問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

剛?cè)肼毠?,參與到一個項目中,由于是剛畢業(yè)的菜鳥,只能分配寫一些查詢的接口代碼。

其中有一個就是需要返回一個實(shí)體類的信息,該實(shí)體類帶有List屬性,返回的結(jié)果類似于下圖。

我的解決辦法是將查詢分成兩步,第一步是查詢到對應(yīng)的表的實(shí)體類結(jié)果,第二部查詢到一個List集合然后將這個集合通過set方法復(fù)制給實(shí)體類。

后來看了同事的代碼豁然開朗,這里用學(xué)生的信息模擬一下。

1.建立學(xué)生關(guān)系表

建了五張表,分別是school(學(xué)院)class(班級)student(班級)course(課程)stu_course(學(xué)生選課表),表結(jié)構(gòu)如下

學(xué)院表

班級表

學(xué)生表

課程表

學(xué)生選課表

班級表通過school_id與學(xué)院表關(guān)聯(lián),學(xué)生表通過class_id與班級表關(guān)聯(lián),學(xué)生選課表關(guān)聯(lián)學(xué)生表和課程表。

2.建立springboot項目

在STS中新建springboot項目,application.properties配置如下

pom.xml文件如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.cheng</groupId>
    <artifactId>testspringboot</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <name>testspringboot</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency> -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <scope>provided</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
    <!--     <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.1.0</version>
        </dependency> -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatisplus-spring-boot-starter</artifactId>
            <version>1.0.5</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus</artifactId>
            <version>2.3</version>
        </dependency>
        <!--MySQL -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity</artifactId>
            <version>1.7</version>
        </dependency>
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.20</version>
        </dependency>
        <!-- lombok需要的jar包 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
 </project>

項目建好后使用mybatis plus自動生成實(shí)體類service和controller以及Mapper,生成好的如下圖。

并創(chuàng)建要返回的學(xué)生詳細(xì)信息的實(shí)體類StudentDto,該實(shí)體類包含List類型的學(xué)生選課的課程信息

package com.example.chapter3.dto;
import java.io.Serializable;
import java.util.List;
import com.baomidou.mybatisplus.activerecord.Model;
import com.example.chapter3.model.Course;
public class StudentDto extends Model<StudentDto>{
    private static final long serialVersionUID = 1L;
    /**
     * 學(xué)生ID
     */
    private String studentId;
    /**
     * 學(xué)生姓名
     */
    private String studentName;
    /**
     * 學(xué)生年齡
     */
    private Integer studentAge;
    /**
     * 學(xué)生性別
     */
    private String studentSex;
    /**
     * 學(xué)校ID
     */
    private String schoolId;
    /**
     * 班級ID
     */
    private String classId;
    private String shcoolName;
    private String className;
    private List<Course> courses;
    @Override
    protected Serializable pkVal() {
        // TODO Auto-generated method stub
        return studentId;
    }
    public String getStudentId() {
        return studentId;
    }
    public void setStudentId(String studentId) {
        this.studentId = studentId;
    }
    public String getStudentName() {
        return studentName;
    }
    public void setStudentName(String studentName) {
        this.studentName = studentName;
    }
    public Integer getStudentAge() {
        return studentAge;
    }
    public void setStudentAge(Integer studentAge) {
        this.studentAge = studentAge;
    }
    public String getStudentSex() {
        return studentSex;
    }
    public void setStudentSex(String studentSex) {
        this.studentSex = studentSex;
    }
    public String getSchoolId() {
        return schoolId;
    }
    public void setSchoolId(String schoolId) {
        this.schoolId = schoolId;
    }
    public String getClassId() {
        return classId;
    }
    public void setClassId(String classId) {
        this.classId = classId;
    }
    public String getShcoolName() {
        return shcoolName;
    }
    public void setShcoolName(String shcoolName) {
        this.shcoolName = shcoolName;
    }
    public String getClassName() {
        return className;
    }
    public void setClassName(String className) {
        this.className = className;
    }
    public List<Course> getCourses() {
        return courses;
    }
    public void setCourses(List<Course> courses) {
        this.courses = courses;
    }
    public static long getSerialversionuid() {
        return serialVersionUID;
    }
    @Override
    public String toString() {
        return "StudentDto [studentId=" + studentId + ", studentName=" + studentName + ", studentAge=" + studentAge
                + ", studentSex=" + studentSex + ", schoolId=" + schoolId + ", classId=" + classId + ", shcoolName="
                + shcoolName + ", className=" + className + ", courses=" + courses + "]";
    }
}

3.編寫要查詢的studentMapper.xml(也是自動生成的,需要寫部分內(nèi)容)

<?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.example.chapter3.mapper.StudentMapper">
    <!-- 通用查詢映射結(jié)果 -->
    <resultMap id="BaseResultMap" type="com.example.chapter3.model.Student">
        <id column="student_id" property="studentId" />
        <result column="student_name" property="studentName" />
        <result column="student_age" property="studentAge" />
        <result column="student_sex" property="studentSex" />
        <result column="school_id" property="schoolId" />
        <result column="class_id" property="classId" />
    </resultMap>
    <!-- 通用查詢結(jié)果列 -->
    <sql id="Base_Column_List">
        student_id, student_name, student_age, student_sex, school_id, class_id
    </sql>
    <resultMap type="com.example.chapter3.dto.StudentDto" id="stuDtoResultMap">
        <id column="student_id" property="studentId" />
        <result column="student_name" property="studentName" />
        <result column="student_age" property="studentAge" />
        <result column="student_sex" property="studentSex" />
        <result column="school_id" property="schoolId" />
        <result column="class_id" property="classId" />
        <result column="shcool_name" property="shcoolName" />
        <result column="class_name" property="className" />
        <collection property="courses"    ofType="com.example.chapter3.model.Course"
            column="student_id" select="com.example.chapter3.mapper.CourseMapper.selectCourseByStuId">
         </collection>        
    </resultMap>
    <select id="selectStudentDetails" resultMap="stuDtoResultMap">
        SELECT sc.school_name, sc.school_id, sc.adress, cl.class_id, cl.class_name, stu.student_id, 
        stu.student_name, stu.student_age, stu.student_sex FROM school sc LEFT JOIN class cl ON sc.school_id = cl.school_id 
        LEFT JOIN student stu ON stu.class_id = cl.class_id WHERE stu.student_id = #{studentId}
    </select>
</mapper>

其對應(yīng)的StudentMapper.class文件如下

該Mapper有一個查詢學(xué)生信息的方法對應(yīng)studentMapper.xml里的selectStudentDetails。

通過聯(lián)合查詢返回stuDtoResultMap,這是個resulMap類型,type="com.example.chapter3.dto.StudentDto"是學(xué)生的詳細(xì)信息實(shí)體類,其中的

<collection property="courses"    ofType="com.example.chapter3.model.Course"
            column="student_id" select="com.example.chapter3.mapper.CourseMapper.selectCourseByStuId">
 </collection>  

表示的是StudentDto的List集合,返回的是List<Course>,property是StudentDto類中的集合屬性名,也就是courses,ofType是集合中的類型,是Course, column是查詢傳遞的參數(shù),select是要查詢的語句,同一個Mapper直接使用id,不同Mapper使用查詢方法的全類名,這里把student_id作為參數(shù)傳遞給Course表的查詢函數(shù)selectCourseByStuId。

CourseMapper如下。

其對應(yīng)的Mapper文件如下

4.查詢學(xué)生詳細(xì)信息的service和controller

5.測試

訪問請求localhost:8081/student/studentDetails/st001得到結(jié)果如下

總結(jié)

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java模擬微信來電提醒示例

    Java模擬微信來電提醒示例

    這篇文章主要為大家介紹了Java模擬微信來電提醒示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Spring MVC 接口 ResponseBodyAdvice 及其應(yīng)用最佳實(shí)踐記錄

    Spring MVC 接口 ResponseBodyAdvice 及其應(yīng)用最佳實(shí)

    ResponseBodyAdvice?是 Spring MVC 提供的一個強(qiáng)大接口,允許你在響應(yīng)體被寫入 HTTP 響應(yīng)之前對其進(jìn)行全局處理,下面我將全面介紹它的工作原理、使用場景和最佳實(shí)踐,感興趣的朋友一起看看吧
    2025-04-04
  • Java?SpringAOP技術(shù)之注解方式詳解

    Java?SpringAOP技術(shù)之注解方式詳解

    這篇文章主要為大家詳細(xì)介紹了Java?SpringAOP技術(shù)之注解方式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • 用java生成html文件實(shí)現(xiàn)原理及代碼

    用java生成html文件實(shí)現(xiàn)原理及代碼

    用printStream來向html文件里輸出數(shù)據(jù),先創(chuàng)建一個StringBuilder對象,通過append方法來為其添加html語句,具體實(shí)現(xiàn)如下,感興趣的朋友可以參考下,希望對大家有所幫助
    2013-08-08
  • org.springframework.dao.OptimisticLockingFailureException樂觀鎖失敗的解決方法

    org.springframework.dao.OptimisticLockingFailureException樂觀鎖

    本文主要介紹了org.springframework.dao.OptimisticLockingFailureException樂觀鎖失敗的解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • SpringMVC的Dispatcher解讀

    SpringMVC的Dispatcher解讀

    這篇文章主要介紹了SpringMVC的Dispatcher用法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 完美解決idea無法搜索下載插件的問題

    完美解決idea無法搜索下載插件的問題

    這篇文章主要介紹了完美解決idea無法搜索下載插件的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • SpringBoot實(shí)現(xiàn)動態(tài)數(shù)據(jù)源切換的方法總結(jié)

    SpringBoot實(shí)現(xiàn)動態(tài)數(shù)據(jù)源切換的方法總結(jié)

    項目開發(fā)中經(jīng)常會遇到多數(shù)據(jù)源同時使用的場景,比如冷熱數(shù)據(jù)的查詢等情況,所以接下來本文就來介紹一下如何使用實(shí)現(xiàn)自定義注解的形式來實(shí)現(xiàn)動態(tài)數(shù)據(jù)源切換吧
    2023-12-12
  • spring實(shí)現(xiàn)動態(tài)切換、添加數(shù)據(jù)源及源碼分析

    spring實(shí)現(xiàn)動態(tài)切換、添加數(shù)據(jù)源及源碼分析

    這篇文章主要給大家介紹了關(guān)于spring實(shí)現(xiàn)動態(tài)切換、添加數(shù)據(jù)源及源碼分析的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • SpringBoot配置Ollama實(shí)現(xiàn)本地部署DeepSeek

    SpringBoot配置Ollama實(shí)現(xiàn)本地部署DeepSeek

    本文主要介紹了在本地環(huán)境中使用?Ollama?配置?DeepSeek?模型,并在?IntelliJ?IDEA?中創(chuàng)建一個?Spring?Boot?項目來調(diào)用該模型,文中通過圖文示例介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-03-03

最新評論

嘉义市| 江川县| 富宁县| 芒康县| 图们市| 视频| 堆龙德庆县| 贵溪市| 金沙县| 武山县| 郎溪县| 忻州市| 武功县| 湘西| 米林县| 昌吉市| 左云县| 会同县| 吴川市| 师宗县| 贵州省| 浦北县| 保亭| 九江县| 榕江县| 关岭| 全州县| 买车| 广丰县| 察隅县| 松桃| 广德县| 高安市| 景洪市| 观塘区| 桦甸市| 武邑县| 绥中县| 杭锦旗| 清水河县| 宁德市|