MyBaits 自定义结果映射

本文介绍了MyBatis中的ResultMap元素如何用于自定义结果映射,通过实例展示了如何处理数据库字段名与Java对象属性不一致的情况。在测试中发现无法获取lastName值,原因是数据库字段名不同。通过启用驼峰命名法可以解决,但实际开发推荐使用自定义结果映射来达到相同效果。
摘要由CSDN通过智能技术生成

MyBaits—ResultMap自定义结果映射

resultMap是Mybatis最强大的元素,它可以将查询到的复杂数据(比如查询到几个表中数据)映射到一个结果集当中

以下以实例介绍resultMap的用法:

1、创建Employee对象:


@Alias("emp")
public class Employee {
    private Integer id;
    private String lastName;
    private String email;
    private String gender;


    public Employee(Integer id, String lastName, String email, String gender) {
        super();
        this.id = id;
        this.lastName = lastName;
        this.email = email;
        this.gender = gender;
    }
    public Employee() {
        super();
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    @Override
    public String toString() {
        return "Employee [id=" + id + ", lastName=" + lastName + ", email=" + email + ", gender=" + gender + "]";
    }

}



2、定义接口方法

public interface EmployeeMapperPlus {
    public Employee getEmployee(Integer id);
}

3、对应的ResultMap

<?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">
 <mapper namespace="com.atguigu.mybatis.dao.EmployeeMapperPlus">

 <!--public Employee getEmployee(Integer id);  -->
    <select id="getEmployee" resultMap="emp">
        select * from tbl_employee where id=#{id}
    </select>
 </mapper>

4,测试类

@Test
    public void test05() throws IOException{
        SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
        SqlSession openSession = sqlSessionFactory.openSession();
        try {
            EmployeeMapperPlus mapper = openSession.getMapper(EmployeeMapperPlus.class);
            Employee empById = mapper.getEmployee(1);
            System.out.println(empById);
        } finally {
            openSession.close();
            // TODO: handle finally clause
        }

    }

结果如下:
这里写图片描述

可以看到lastName 取不到值
这是为什么?
因为数据库表中lastName字段名不一致

这里写图片描述

在MyBatis配置中加上驼峰命名法

这里写图片描述

这样就可以取到值

这里写图片描述

但是实际开发中一般比较少用这种方法,用的是自定义结果映射

<?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">
 <mapper namespace="com.atguigu.mybatis.dao.EmployeeMapperPlus">

 <!--resultMap:自定义结果集映射规则  
    type:自定义规则的Java类型
    id:唯一id方便引用
 -->

 <resultMap type="com.atguigu.mybatis.bean.Employee" id="Myemp">
    <!--指定主键列的封装规则
    column:指定拿一列
    property:指定对应的javaBean 属性
      -->
      <id column="id" property="id"/>
      <!--定义普通列封装规则  -->
      <result column="last_name" property="lastName"/>
        <!-- 其他不指定的列会自动封装,只要写resultMap就把全部的映射跪着写上 -->
        <result column="email" property="email"/>
        <result column="gender" property="gender"/>
 </resultMap>
 <!--public Employee getEmployee(Integer id);  -->
    <select id="getEmployee" resultMap="Myemp">
        select * from tbl_employee where id=#{id}
    </select>
 </mapper>

也能得到结果
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值