mybatis的结果集映射

ResultMap(结果集映射)

什么是结果集映射

resultMap 元素是 MyBatis 中最重要最强大的元素。它可以让你从 90% 的 JDBC ResultSets 数据提取代码中解放出来,并在一些情形下允许你进行一些 JDBC 不支持的操作。实际上,在为一些比如连接的复杂语句编写映射代码的时候,一份 resultMap 能够代替实现同等功能的数千行代码。ResultMap 的设计思想是,对简单的语句做到零配置,对于复杂一点的语句,只需要描述语句之间的关系就行了。

结果集解决的问题是–>实体类的属性名和数据库表中的字段名对应不上。

例:实体类中User.java的属性名

    private int id;
    private String name;
    private String pwd;

数据库中的字段名

在这里插入图片描述
很明显 password–>pwd对应不上。

接口类

  //通过id查询某一个字段
    User getUserById(int id);

xml配置文件


    <select id="getUserById" parameterType="int" resultType="user">
        select id,name,password from user where id=#{id};
    select>

password–>pwd对应不上就会出现以下的错误

  • id=2, name=‘大生’, password=‘null’
  • mybatis会根据这些查询的列名(会将列名转化为小写,数据库不区分大小写) , 去对应的实体类中查找相应列名的set方法设值 , 由于找不到setPwd() , 所以password返回null ; 【自动映射】

解决手段:(ResultMap手动映射)

编写resultMap,实现手动映射!


<resultMap id="userMap" type="user">
    <result column="id" property="id"/>
    <result column="name" property="name"/>
    <result column="password" property="pwd"/>

resultMap>

    <select id="getUserById" parameterType="int" resultMap="userMap">
        select id,name,password from user where id=#{id};
    select>

测试

    @Test
    public void getUserById(){

        SqlSession sqlSession = UserMapperUtil.getSession();
        UserMapper UserList = sqlSession.getMapper(UserMapper.class);
        User userById = UserList.getUserById(2);
        System.out.println(userById);
        sqlSession.close();
    }

得到的结果

  • id=2, name=‘大生’, password=‘123456’

作用域原理图
mybatis的结果集映射_第1张图片

你可能感兴趣的:(mybatis的结果集映射)