当查询结果的列名和java对象的属性名对应不上时需要采用下列方式进行处理:
第一种方式:在查询语句中使用关键字"as" 给列起别名
第二种方式:使用resultMap结果映射
第三种方式:开启驼峰命名自动映射(配置settings)
实体类Car:
package com.bjpowernode.domain;
public class Car {
private Integer id;
private String carNum;
private String brand;
private Double guidePrice;
private String produceTime;
private String carType;
//构造方法略
//setter and getter 略
//toString略
数据库中的t_car表:
我们可以看出实体类中的属性名与数据库表中的字段名并不完全一样,需要进行处理,三种处理方式如下:
第一种方式:在查询语句中使用关键字"as" 给列起别名
<select id="selectById" resultType="com.powernode.mybatis.pojo.Car">
select
id,
car_num as carNum,
brand,
guide_price as guidePrice,
produce_time as produceTime,
car_type as carType
from
t_car
where
id = #{id}
</select>
第二种方式:采用resultMap结果映射,具体如下:
<!--
resultMap:
id:是这个结果映射的唯一标识,
type:结果集要映射的类(也就是对应的实体类)。可以使⽤别名。
-->
<resultMap id="carResultMap" type="car">
<!--id是对象的唯⼀标识,为了提⾼mybatis的性能。建议写上。-->
<id property="id" column="id"/>
<result property="carNum" column="car_num"/>
<!--当属性名和数据库列名⼀致时,可以省略。但建议都写上。-->
<!--javaType⽤来指定属性类型。jdbcType⽤来指定列类型。⼀般可以省略。-->
<result property="brand" column="brand" javaType="string" jdbcType="VARCHAR"/>
<result property="guidePrice" column="guide_price"/>
<result property="produceTime" column="produce_time"/>
<result property="carType" column="car_type"/>
</resultMap>
<!--resultMap属性的值必须和resultMap标签中id属性值一致。-->
<select id="selectAllByResultMap" resultMap="carResultMap">
select * from t_car
</select>
第三种方式:开启驼峰命名⾃动映射(配置settings)
使用这种方式的前提是:
属性名遵循Java的命名规范,数据库表的列名遵循SQL的命名规范。
Java命名规范:
首字母大写,后面每个单词首字母大写,遵循驼峰命名规范。
SQL命名规范:
全部小写,单词之间采用下划线分割。
比如以下的对应关系:
实体类中的属性名 数据库表的列名
carNum car_num
carType car_type
produceTime produce_time
启用该功能,需要在mybatis-config.xml文件中进行如下配置:
<!--放在properties标签后-->
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>