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仍有疑问可以看看笔者编写的这篇文章 希望能加深对其的理解