• MyBatis学习总结(13)——Mybatis查询之resultMap和resultType区别


    MyBatis的每一个查询映射的返回类型都是ResultMap,只是当我们提供的返回类型属性是resultType的时候,MyBatis对自动的给我们把对应的值赋给resultType所指定对象的属性,而当我们提供的返回类型是resultMap的时候,将数据库中列数据复制到对象的相应属性上,可以用于复制查询,两者不能同时用。

    1、resultType

    返回单个实例

    <select id="selectUser" parameterType="int" resultType="User">

    select * from user where id = #{id}

    </select>
    返回List集合

    <select id="selectUserAll" resultType="User" > <!-- resultMap="userMap" -->
    select * from user
    </select>

    2、resultMap

    简单查询:

    <resultMap type="User" id="userMap">
    <id column="id" property="id"/>
    <result column="name" property="name"/>
    </resultMap>
    column:数据库中列名称,property:类中属性名称


    resultMap:适合使用返回值是自定义实体类的情况

    resultType:适合使用返回值得数据类型是非自定义的,即jdk的提供的类型

    resultMap : 

    映射实体类的数据类型

    resultMap的唯一标识

    column: 库表的字段名

    property: 实体类里的属性名

    配置映射文件:

    <?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">
    <!-- namespace:当前库表映射文件的命名空间,唯一的不能重复 -->
    <mapper namespace="com.hao947.sql.mapper.PersonMapper">
      <!-- type:映射实体类的数据类型 id:resultMap的唯一标识 -->
      <resultMap type="person" id="BaseResultMap">
        <!-- column:库表的字段名 property:实体类里的属性名 -->
        <id column="person_id" property="personId" />
        <result column="name" property="name" />
        <result column="gender" property="gender" />
        <result column="person_addr" property="personAddr" />
        <result column="birthday" property="birthday" />
      </resultMap>
      <!--id:当前sql的唯一标识
         parameterType:输入参数的数据类型 
         resultType:返回值的数据类型 
         #{}:用来接受参数的,如果是传递一个参数#{id}内容任意,如果是多个参数就有一定的规则,采用的是预编译的形式select 
        * from person p where p.id = ? ,安全性很高 -->
    
      <!-- sql语句返回值类型使用resultMap -->
      <select id="selectPersonById" parameterType="java.lang.Integer"
        resultMap="BaseResultMap">
        select * from person p where p.person_id = #{id}
      </select>
      <!-- resultMap:适合使用返回值是自定义实体类的情况 
      resultType:适合使用返回值的数据类型是非自定义的,即jdk的提供的类型 -->
      <select id="selectPersonCount" resultType="java.lang.Integer">
        select count(*) from
        person
      </select>
    
      <select id="selectPersonByIdWithMap" parameterType="java.lang.Integer"
        resultType="java.util.Map">
        select * from person p where p.person_id= #{id}
        </select>
    
    </mapper>

    实体类Person.java

    <pre name="code" class="java">package com.hao947.model;
    import java.util.Date;
    public class Person {
      private Integer personId;
      private String name;
      private Integer gender;
      private String personAddr;
      private Date birthday;
      @Override
      public String toString() {
        return "Person [personId=" + personId + ", name=" + name + ", gender="
            + gender + ", personAddr=" + personAddr + ", birthday="
            + birthday + "]";
      }
    }

    测试类

    public class PersonTest {
      SqlSessionFactory sqlSessionFactory;
      @Before
      public void setUp() throws Exception {
        // 读取资源流
        InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");
        // 初始化session工厂
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
      }
    
      
    
      @Test
      public void selectPersonById() {
        // 创建一个sqlsession
        SqlSession session = sqlSessionFactory.openSession();
        try {
          Person p = session.selectOne(
              "com.hao947.sql.mapper.PersonMapper.selectPersonById", 1);
          System.out.println(p);
        } finally {
          session.close();
        }
      }
      @Test
      public void selectPersonCount() {
        // 创建一个sqlsession
        SqlSession session = sqlSessionFactory.openSession();
        try {
          Integer p = session.selectOne(
              "com.hao947.sql.mapper.PersonMapper.selectPersonCount");
          System.out.println(p);
        } finally {
          session.close();
        }
      }
      @Test
      public void selectPersonByIdWithMap() {
        // 创建一个sqlsession
        SqlSession session = sqlSessionFactory.openSession();
        try {
          Map<String ,Object> map = session.selectOne(
              "com.hao947.sql.mapper.PersonMapper.selectPersonByIdWithMap",1);
          System.out.println(map);
        } finally {
          session.close();
        }
      }
    }
  • 相关阅读:
    关于视图的一些认识
    __autoload()尝试加载未定义的类
    php正则逆向引用与子模式分析
    常州day1p4
    Hello World
    Linux安装配置jdk
    使用http3访问服务
    后端访问sso后,如何返回前端vue页面(后端redirect跳转,vue代理,axios带参)
    linux常用命令
    使用nexus搭建npm私服
  • 原文地址:https://www.cnblogs.com/zhanghaiyang/p/7213232.html
Copyright © 2020-2023  润新知