ResultMap和ResultType到底有什么區別?


轉載請標明出處:https://www.cnblogs.com/Dreamice/

首先,SQL語句執行后返回的結果可以使用 Map 存儲,也可以使用 POJO 存儲。

一、使用Map存儲結果集

下面分別是映射文件以及測試文件代碼,其他文件省略
通過resultType="Map"的定義,返回Map

<!-- 查詢所有書籍信息:通過resultType="Map"的方式 -->
    <!-- 查詢所有書籍信息:通過resultType="Map"的方式 -->
    <select id="selectAllBookByTypeMap" resultType="Map">
        select * from book
    </select>
@org.junit.Test
public void test1() {
    @Autowired
    private BookService bookService;
    List<Map> books = bookService.selectAllBookByTypeMap();
    System.out.println("通過resultType=\"Map\"的方式:");
    System.out.println(books);
 }

運行結果:
運行結果1

二、使用Pojo存儲結果集

定義Pojo類,特意定義name1屬性,為了和數據庫中的字段名name不一致
Book.java

public class Book {
    private Integer id;
    private String name1;
    private String author;

    //省略getter和setter函數
}

1、使用resultType="Map"
使用resultType="Map"進行查詢時,可以通過使用別名的方式,保證自動映射到pojo類的屬性名

   <!-- 查詢所有書籍信息:通過resultType="*.*.pojo"的方式 -->
    <select id="selectAllBookByTypePojo" resultType="com.dreamice.pojo.Book">
        select id,name name1,author from book
    </select>

2、使用resultMap
在映射文件中定義resultMap

<!-- 查詢所有書籍信息:通過resultMap="*.*.pojo"的方式 -->
    <select id="selectAllBookByRMPojo" resultMap="bookResultMap">
        select * from book
    </select>

    <!-- 定義resultMap-->
    <resultMap id="bookResultMap" type="com.dreamice.pojo.Book">
        <result property="name1" column="name"/>
    </resultMap>

轉載請標明出處:https://www.cnblogs.com/Dreamice/

@org.junit.Test
public void test1() {
    @Autowired
    private BookService bookService;
    List<Book> booksPojo = bookService.selectAllBookByTypePojo();
    System.out.println("通過resultType=\"*.*.pojo\"的方式:");                      System.out.println(booksPojo);
    System.out.println(booksPojo.get(0).getName1());

    List<Book> booksRMPojo = bookService.selectAllBookByRMPojo();
    System.out.println("通過resultMap的方式:");
    System.out.println(booksRMPojo);
    System.out.println(booksRMPojo.get(1).getName1());
    System.out.println(booksRMPojo.get(1).getAuthor());
 }

運行結果:
運行結果2

三、區別

所以,區別主要有:
1、查詢結果為Map時,使用resultType;
2、簡單查詢且結果為Pojo類,也可以使用resultType,另外,查詢字段名與Pojo屬性名不一致,可以通過使用別名的方式;
3、復雜的映射或級聯,可以使用resultMap;
轉載請標明出處:https://www.cnblogs.com/Dreamice/


免責聲明!

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



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