• 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/

  • 相关阅读:
    Spring HttpIvoker实现Java的远程调用
    基于struts2框架文件的上传与下载
    12月9号linux学习
    2019.7.7 练习题
    题解 儿童节继续欢乐赛
    Winfroms看看吧客官~
    group by应用
    基于Windows Azure 搭建基于SharePoint 2010 Intranet、Extranet、Internet (1): 安装SharePoint 2010
    基于Windows Azure 搭建基于SharePoint 2010 Intranet、Extranet、Internet (2): 创建并发布SharePoint Intranet站点
    Inside Microsoft SharePoint 2010 简译(1): SharePoint 2010开发者路线图
  • 原文地址:https://www.cnblogs.com/Dreamice/p/11966283.html
Copyright © 2020-2023  润新知