mybatis返回的值(resultType)为一个类(javaBean)时,需要注意的事项

时间:2025-02-11 22:38:16

今天做项目时发现一个问题,查询数据库时返回的值居然不对,字符串的值为空,实数型的值为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中,由于我们没有做相关结果映射,而相应字段值又不相同的话,当然会出错咯!!