问题描述:
当使用查询语句时,返回来的数据出现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同理)
标签:java,car,列名,brand,查询,对不上,id,属性 From: https://www.cnblogs.com/xdqx/p/17613360.html