Mybatis之实体类和数据库中的字段名称不相同时处理方法

Emp数据库结构为

 Emp实体类代码为

package com.qcby.mybatis.pojo;

public class Emp {
    private Integer empId;
    private String empName;
    private Integer age;
    private Character sex;
    private String email;

    public Emp(Integer empId, String empName, Integer age, Character sex, String email) {
        this.empId = empId;
        this.empName = empName;
        this.age = age;
        this.sex = sex;
        this.email = email;
    }

    public Emp() {
    }

    public Integer getEmpId() {
        return empId;
    }

    public void setEmpId(Integer empId) {
        this.empId = empId;
    }

    public String getEmpName() {
        return empName;
    }

    public void setEmpName(String empName) {
        this.empName = empName;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Character getSex() {
        return sex;
    }

    public void setSex(Character sex) {
        this.sex = sex;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }


    @Override
    public String toString() {
        return "Emp{" +
                "empId=" + empId +
                ", empName='" + empName + '\'' +
                ", age=" + age +
                ", sex=" + sex +
                ", email='" + email + '\'' +
                '}';
    }
}

编写EmpMapper接口文件方法

Emp getEmpById(Integer id);

EmpMapper.xml为

<select id="getEmpById" parameterType="int" resultType="emp">
    select * from emp where emp_id = #{id}
</select>

测试类中为

测试类中为

执行结果为

DEBUG 10-07 22:57:57,854 ==>  Preparing: select * from emp where emp_id = ?  (BaseJdbcLogger.java:137) 
DEBUG 10-07 22:57:57,875 ==> Parameters: 1(Integer)  (BaseJdbcLogger.java:137) 
DEBUG 10-07 22:57:57,883 <==      Total: 1  (BaseJdbcLogger.java:137) 
Emp{empId=null, empName='null', age=12, sex=女, email='ll@qq.com'}

我们发现empId empName这两个字段并没有查询出结果

究其根本是无法将实体类中的属性名称与数据库结构中的字段名称对应起来

下边是几种方法

使用起别名的方法使数据库的字段名称与实体类中的属性名称对应起来

我们实现此方法是使用SQl中起别名的方法来实现

修改数据库查询语句为

<select id="getEmpById" parameterType="int" resultType="emp">
       select emp_id empId,emp_name empName,age,sex,email from emp where emp_id = #{id}
</select>

执行结果为

DEBUG 10-07 23:16:21,512 ==>  Preparing: select emp_id empId,emp_name empName,age,sex,email from emp where emp_id = ?  (BaseJdbcLogger.java:137) 
DEBUG 10-07 23:16:21,540 ==> Parameters: 1(Integer)  (BaseJdbcLogger.java:137) 
DEBUG 10-07 23:16:21,550 <==      Total: 1  (BaseJdbcLogger.java:137) 
Emp{empId=1, empName='丽丽', age=12, sex=女, email='ll@qq.com'}

使用配置文件中的settings属性进行配置

若字段名和实体类中的属性名不一致,但是字段名符合数据库的规则(使用_)实体类中的属性名符合Java的规则(使用驼峰),可以在MyBatis的核心配置文件中设置一个全局配置信息mapUnderscoreToCamelCase,可以在查询表中数据时,自动将类型的字段名转换为驼峰。

 

 EmpMapper.xml中查询语句为

<select id="getEmpById" parameterType="int" resultType="emp">
    select * from emp where emp_id = #{id}
</select>

执行结果为

DEBUG 10-07 23:20:59,508 ==>  Preparing: select * from emp where emp_id = ?  (BaseJdbcLogger.java:137) 
DEBUG 10-07 23:20:59,528 ==> Parameters: 1(Integer)  (BaseJdbcLogger.java:137) 
DEBUG 10-07 23:20:59,537 <==      Total: 1  (BaseJdbcLogger.java:137) 
Emp{empId=1, empName='丽丽', age=12, sex=女, email='ll@qq.com'}

使用resultMap

 在EmpMapper.xml中为

<select id="getEmpById" parameterType="int" resultMap="getEmpByIdresultMap">
    select * from emp where emp_id = #{id}
</select>
<resultMap id="getEmpByIdresultMap" type="emp">
    <id column="emp_id" property="empId"></id>
    <result column="emp_name" property="empName"></result>
    <result column="age" property="age"></result>
    <result column="sex" property="sex"></result>
    <result column="email" property="email"></result>
</resultMap>

执行结果为

DEBUG 10-07 23:20:59,508 ==>  Preparing: select * from emp where emp_id = ?  (BaseJdbcLogger.java:137) 
DEBUG 10-07 23:20:59,528 ==> Parameters: 1(Integer)  (BaseJdbcLogger.java:137) 
DEBUG 10-07 23:20:59,537 <==      Total: 1  (BaseJdbcLogger.java:137) 
Emp{empId=1, empName='丽丽', age=12, sex=女, email='ll@qq.com'}

如果对resultMap仍有疑问可以看看笔者编写的这篇文章 希望能加深对其的理解 

resultMap详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值