前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mybatis之ResultMap

Mybatis之ResultMap

原创
作者头像
爱撒谎的男孩
发布2018-05-10 18:35:40
8651
发布2018-05-10 18:35:40
举报
文章被收录于专栏:码猿技术专栏码猿技术专栏

Mybatis之ResultMap

实体类

  • 通常实体类中的属性要和数据库表中的字段一致,包括类型,字段名称
  • 因此我们在单表查询的时候不需要使用<resultMap>指定实体类和表中的字段对应关系,但是如果我们在查询的时候使用了别名,或者属性字段和表的字段不一致,那么我们就需要用<resultMap>指定对应关系了

准备

  • 创建一个User类
代码语言:javascript
复制
public class User implements Serializable {
    private static final long serialVersionUID = 6716332190979093860L;
    private Integer id;
    private String username;
    private String password;
    private Integer age;
​
    
    public Integer getAge() {
        return age;
    }
​
    public void setAge(Integer age) {
        this.age = age;
    }
​
    public Integer getId() {
        return id;
    }
​
    public void setId(Integer id) {
        this.id = id;
    }
​
    public String getUsername() {
        return username;
    }
​
    public void setUsername(String username) {
        this.username = username;
    }
​
    public String getPassword() {
        return password;
    }
​
    public void setPassword(String password) {
        this.password = password;
    }
    
    
    @Override
    public String toString() {
        return "User [id=" + id + ", username=" + username + ", password="
                + password + ", age=" + age + "]";
    }
    
}
  • 创建user表
    • 表中的字段和User实体类一致
代码语言:javascript
复制
create table user(id int primary key auto_increment,username varchar(20),age int ,password varchar(20));

根据id查询用户信息(使用resultType指定结果类型)

  • 直接在UserMapper.xml中配置<select>即可
    • 使用resultType指定返回的结果类型
代码语言:javascript
复制
 <!-- 
    User findUserById(Integer id);
    resultType: 指定返回的结果类型
  -->
  <select id="findUserById" resultType="cn.tedu.spring.entity.User">
    select username,password,age,id from user where id=#{id}
  </select>
  • 上面的查询返回的结果字段和User实体类中的属性字段一致,因此只需要指定resultType即可对应。但是如果我们查询的语句如下:
代码语言:javascript
复制
 <!-- 
    User findUserById(Integer id);
    resultType: 指定返回的结果类型
  -->
  <select id="findUserById" resultType="cn.tedu.spring.entity.User">
    select username name,password pw,age,id from user where id=#{id}
  </select>
  • 那么此时返回的结果中,User类中的usernamepassword值为null,因为没有对应上,这里使用了别名

使用resultMap解决别名或者字段不对应的问题

  • 如果实体类中的字段和表中的字段一致,但是查询结果中使用了别名,那么需要使用<resultMap>来设置对应关系
  • 如果实体类中的字段和表中的字段不一致,那么返回的查询结果即使不使用别名也会不对应,因此此时还是需要使用<resultMap>来设置对应关系
代码语言:javascript
复制
<!-- 指定resultMap
    type: 指定java类的全名
    id: 唯一标识
  -->
 <resultMap type="cn.tedu.spring.entity.User" id="UserMap">
    <!-- id指定主键的对应关系,这里主键没有使用别名,因此不需要指定对应关系,可以自动对应上
    <id column="id" property="id"/> -->
    
    <!-- result : 指定主键之外的属性
        column: 查询结果中的字段
        property:java类中的对应属性
     -->
    <result column="name" property="username"/>
    <result column="pw" property="password"/>
 </resultMap>
 
 <!-- 
    User findUserById(Integer id);
    resultMap: 指定返回的结果类型为前面定义的resultMap
  -->
  <select id="findUserById" resultMap="UserMap">
    select username name,password pw,age,id from user where id=#{id}
  </select>
​
  • 测试方法
代码语言:javascript
复制
    @Test
    public void testFinduserById() {
        //加载Spring的配置文件
        AbstractApplicationContext ac
            = new ClassPathXmlApplicationContext(
                "spring-mvc.xml",
                "spring-dao.xml");
        
        //获取UserMapper的bean,这个是spring通过扫描mapper.xml文件自动为mybatis自动创建的,首字母小写
        UserMapper userMapper
            = ac.getBean(
                "userMapper", UserMapper.class);
        
        User user=userMapper.findUserById(3);
        System.out.println(user);
        
        ac.close();
    }

使用<resultMap>来解决多表之间的查询

  • 后面的多表关联查询会讲到

总结

  1. 实体类中的属性是和表中的属性一致的,普通的java类或许不相同
  2. 如果查询返回的结果字段和java类中的属性字段一致,那么就不需要使用resultMap,而是能够自动的对应上
  3. 如果返回查询结果字段和java类中的属性字段不一致,那么就需要使用resultMap来设置对应关系了

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Mybatis之ResultMap
    • 实体类
      • 准备
        • 根据id查询用户信息(使用resultType指定结果类型)
          • 使用resultMap解决别名或者字段不对应的问题
            • 使用<resultMap>来解决多表之间的查询
              • 总结
              相关产品与服务
              数据库
              云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档