今天做项目时发现一个问题,查询数据库时返回的值居然不对,字符串的值为空,实数型的值为0,只有那个id对了,意义说连接数据查询这一块应该没错,看日志也没有报错,想来想去应该是字段映射出了错,找到原因就好找解决方法的方向
配置文件是这样子的
<select resultType="" parameterType="string">
select * from msg where terminal_id=#{terminalId} order by id desc limit 0,1 ;
</select>
java类是这样子的
package ;
public class GpsData {
public int id;
public String terminalId;
public String msgTime;
public String gpsStatus;
public double degreeLon;
public double degreeLat;
public float speed;
public void setId(int id){
=id;
}
public int getId(){
return ;
}
public void setTerminalId(String terminalId){
= terminalId;
}
public String getTerminalId(){
return ;
}
public void setMsgTime(String msgTime){
= msgTime;
}
public String getMsgTime(){
return ;
}
public void setDegreeLon(double degreeLon){
= degreeLon;
}
public double getDegreeLon(){
return ;
}
public void setDegreeLat(double degreeLat){
= degreeLat;
}
public double getDegreeLat(){
return ;
}
public void setSpeed(float speed){
= speed;
}
public float getSpeed(){
return ;
}
}
数据库的字段是这样子的
id | terminal_id | msg_time | gps_status | degree_lon | degree_lat | speed
找了蛮久的资料,最后终于在一个最不起眼的地方发现了我需要的
如果返回类型为resultType时,java对象的属性应和数据库表里的各字段保持一致,这样在查出结果后mybatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性。
看到这里,对照前面java类和数据库的各字段,你是否发现了解决办法呢? 注意关键字:各字段保持一致,即名字要一模一样,大小写也要一样
最后我改了javabean
package ;
public class GpsData2 {
public int id;
public String terminal_id;
public String msg_time;
public String gps_status;
public double degree_lon;
public double degree_lat;
public float speed;
public void setId(int id){
=id;
}
public int getId(){
return ;
}
public void setGps_status(String gpsStatus){
this.gps_status = gpsStatus ;
}
public String getGps_status(){
return this.gps_status;
}
public void setTerminal_id(String terminal_id){
this.terminal_id = terminal_id;
}
public String getTerminal_id(){
return this.terminal_id;
}
public void setMsg_time(String msgTime){
this.msg_time = msgTime;
}
public String getMsg_time(){
return this.msg_time;
}
public void setDegree_lon(double degreeLon){
this.degree_lon = degreeLon;
}
public double getDegree_lon(){
return this.degree_lon;
}
public void setDegree_lat(double degreeLat){
this.degree_lat = degreeLat;
}
public double getDegree_lat(){
return this.degree_lat;
}
public void setSpeed(float speed){
= speed;
}
public float getSpeed(){
return ;
}
}
这样子各字段值就和数据库的字段值一样,结果也就正确了!!!
对比一下resultMap里的result属性字段,应该更能加深理解
<resultMap type="gpsData" >
<id property="id" column="id" ></id>
<result property="terminalId" column="terminal_id"/>
<result property="msgTime" column="msg_time"/>
<result property="gpsStatus" column="gps_status"/>
<result property="degreeLon" column="degree_lon"/>
<result property="degreeLat" column="degree_lat"/>
<result property="speed" column="speed"/>
</resultMap>
这里的property就是我们javaBean中属性字段,column是数据库的字段,result就把他们一一映射了,所以在这里可以正确查找到,而在resultType中,由于我们没有做相关结果映射,而相应字段值又不相同的话,当然会出错咯!!