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/

猜你喜欢

转载自www.cnblogs.com/Dreamice/p/11966283.html