首先给出一个重要前提:mysql数据库在windows下不区分大小写,而在linux中严格区分大小!
当POJO中的属性名和数据库中表的列名不一致时,查询结果与POJO就无法匹配,从而导致出错。
解决以上问题最直接的方法就是起别名,同时这种方式执行效率也是最高的,因为在SQL语句层面,具体实施如下:
POJO:
package com.qublog.domain;
import java.io.Serializable;
import java.util.Date;
public class User implements Serializable {
private Integer userId;
private String userName;
private String userAddress;
private String userSex;
private Date userBirthday;
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserAddress() {
return userAddress;
}
public void setUserAddress(String userAddress) {
this.userAddress = userAddress;
}
public String getUserSex() {
return userSex;
}
public void setUserSex(String userSex) {
this.userSex = userSex;
}
public Date getUserBirthday() {
return userBirthday;
}
public void setUserBirthday(Date userBirthday) {
this.userBirthday = userBirthday;
}
@Override
public String toString() {
return "User{" +
"userId=" + userId +
", userName='" + userName + '\'' +
", userAddress='" + userAddress + '\'' +
", userSex='" + userSex + '\'' +
", userBirthday=" + userBirthday +
'}';
}
}
映射配置:
<!-- 配置查询所有 -->
<select id="findAll" resultType="com.qublog.domain.User">
select id as userId, username as userName, address as userAddress, sex as userSex, birthday as userBirthday from user ;
</select>
测试程序:
@Test
public void testFindAll() throws Exception {
//执行查询所有方法
List<User> users = userDao.findAll();
for (User user:users) {
System.out.println(user);
}
}
解决以上问题的另一中方法是配置:
在映射配置文件中加上:
<!-- 配置查询结果的列名和实体类的属性名的对应关系 -->
<resultMap id="userMap" type="com.qublog.domain.User"><!-- 类型对应查询的实体类 -->
<!-- 主键字段的对应 -->
<id property="userId" column="id"></id>
<!-- 非主键字段的对应 -->
<result property="userName" column="username"></result>
<result property="userAddress" column="address"></result>
<result property="userSex" column="sex"></result>
<result property="userBirthday" column="birthday"></result>
</resultMap>
这时将查询改回原来的方式:
<!-- 配置查询所有 -->
<select id="findAll" resultMap="userMap">
<!-- select id as userId, username as userName, address as userAddress, sex as userSex, birthday as userBirthday from user ; -->
select * from user;
</select>
这时可以完成相同功能,这种方式执行效率比前者低,但开发效率变高。