本文主要讲述mybatis如何解决mysql的字段名与java实体类的成员变量名称不一致。
1. 实体类Employee
public class Employee { private Integer empId; private String empName; private Integer age; private String gender; // private Integer deptId; public Employee() { } public Employee(Integer empId, String empName, Integer age, String gender) { this.empId = empId; this.empName = empName; this.age = age; this.gender = gender; } 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 String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } @Override public String toString() { return "Employee{" + "empId=" + empId + ", empName='" + empName + '\'' + ", age=" + age + ", gender='" + gender + '\'' + '}'; } }
2. 数据表t_emp表
CREATE TABLE t_emp ( emp_id INT PRIMARY KEY AUTO_INCREMENT, emp_name VARCHAR(32) NOT NULL DEFAULT '', age INT NOT NULL DEFAULT 20, gender CHAR(1) CHECK(gender IN ('男','女'))) CHARACTER SET utf8 COLLATE utf8_bin ENGINE INNODB;
二. 引出问题
EmpMapper接口声明如下
public interface EmpMapper { // 显示所有数据 List<Employee> selectEmpAll(); }
EmpMapper.xml文件声明如下
<!--namespace绑定mapper的接口所在的包名.接口名--> <mapper namespace="com.hspedu.mapper.EmpMapper"> <!--List<Employee> selectEmpAll();--> <select id="selectEmpAll" resultType="Employee"> select * from t_emp </select> </mapper>
测试test结果
Employee{empId=null, empName='null', age=23, gender='男'} Employee{empId=null, empName='null', age=25, gender='男'} Employee{empId=null, empName='null', age=22, gender='女'} Employee{empId=null, empName='null', age=24, gender='男'} Employee{empId=null, empName='null', age=20, gender='女'}
当字段名与成员名不一致时,无法将字段名的值赋给成员变量。
三. 解决方式
解决方式1:给字段名取别名
EmpMapper.xml文件声明如下
<!--List<Employee> selectEmpAll();--> <select id="selectEmpAll" resultType="Employee"> select emp_id empId,emp_name empName,age,gender from t_emp; </select>
注意:取的别名必须与实体类的成员变量名保持一致。
解决方式2:mybatis配置文件
在mybatis-config.xml文件中,添加<setting>标签
<settings> <!--将MySQL中_映射为java的驼峰--> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings>
解决方式3:resultMap自定义映射
EmpMapper.xml文件声明如下
<resultMap id="result" type="Employee"> <id column="emp_id" property="empId" /> <result column="emp_name" property="empName" /> <!--<result column="age" property="age" /> <result column="gender" property="gender" />--> </resultMap> <!--List<Employee> selectEmpAll();--> <select id="selectEmpAll" resultMap="result"> select * from t_emp </select>
在resultMap标签中:
id标签是主键的映射标签;result标签是非主键的映射标签
column的值是字段名,property的值是自定义名称,但是仍需与实体类的成员名保持一致。