数据查询解决列名和java对象属性名对不上——三种方法

问题描述:

当使用查询语句时,返回来的数据出现null值。

下面是数据库映射文件代码查询语句:

<select id="selectCarById" resultType="com.powernode.mybatis.pojo.Car">
select * from t_car where id = #{id}
</select>

下面是返回查询返回数据

 

原因是:

查询结果集的列名:id, car_num, brand, guide_price, produce_time, car_type    这里结果集的列名就是数据库中字段的名称

Car类的属性名:id, carNum, brand, guidePrice, produceTime, carType   这里属性名就是实体类中定义的名称

通过上面图片返回的数据观察看,只有id和brand是一致的,其他字段名和属性名对应不上,所以返回null。

解决以上问题有三种方法:

1、使用as起别名

<select id="selectCarAll" resultType="com.powernode.mybatis.pojo.Car">
<!--记得使用as起别名,让查询结果的字段名和java类的属性名对应上。-->
select
id, car_num as carNum, brand, guide_price as guidePrice, produce_time as produceTime, car_type as carType
from t_car
</select>

2、使用resultMap进行结果映射

<!--
resultMap:
id:这个结果映射的标识,作为select标签的resultMap属性的值。
type:结果集要映射的类。可以使用别名。
-->
<resultMap id="carResultMap" type="car">   <!--对象的唯一标识,官方解释是:为了提高mybatis的性能。建议写上。-->   <id property="id" column="id"/>   <result property="carNum" column="car_num"/>   <!--javaType用来指定属性类型。jdbcType用来指定列类型。一般可以省略。-->   <result property="brand" column="brand" javaType="string" jdbcType="VARC   HAR"/>   <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>

3、开启驼峰命名自动映射(最常用也最简单)

使用这种方式的前提是:属性名遵循Java的命名规范,数据库表的列名遵循SQL的命名规范。
Java命名规范:首字母小写,后面每个单词首字母大写,遵循驼峰命名方式。
SQL命名规范:全部小写,单词之间采用下划线分割。
比如以下的对应关系:

如何启用该功能,在mybatis-config.xml文件中进行配置:(这是在SSM项目中使用方法,springboot项目)

<configuration>
    <!-- 开启驼峰映射 ,为自定义的SQL语句服务-->
    <!--设置启用数据库字段下划线映射到java对象的驼峰式命名属性,默认为false-->  
    <settings>
      <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
</configuration>

在springboot项目的yml配置文件中:(这里使用的是mybatis-plus,mybatis同理)

 

posted @ 2023-08-08 09:59  小徐同学x  阅读(234)  评论(0)    收藏  举报