7.处理数据库字段名和属性名不一致的问题
例如:现在有一个数据库表的字段为emp_id,emp_name,age,gender
而现在对应的pojo中的类的属性名为empId,empName,age,gender,数据库是下划线,而属性名为驼峰规则,如果直接在select *,会发现id,和name为空。
①方法一:使用别名
在jdbc中,我们学过sql语句中使用别名来获取对应的数据库中的值。
<!--Emp getEmpById(@Param("empId") Integer empId);-->
<select id="getEmpById" resultType="Emp">
select emp_id empId,emp_name empName,age,gender from t_emp where emp_id = #{empId}
</select>
②方法二:使用mybatis的配置文件,settings中设置
在mybatis-config文件下的settings下设置将下划线映射为驼峰,key使用的是mapUnderscoreToCamelCase,表示是否开启驼峰命名自动映射,即从经典数据库列名 A_COLUMN 映射到经典 Java 属性名 aColumn,value设置为true表示开启,默认为false
<settings>
<!--将下划线映射为驼峰-->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
这样我们就可以使用*来获取到数据库对应的值了。
③方法三:使用resultMap来处理
注意:resultMap标签的用法
resultMap标签:是用来设置自定义映射
- 属性:
- id:表示自定义映射的唯一标识,在select中的resultMap进行选择映射
- type:查询的数据映射的实体类类型
- 子标签:
- id:设置主键的映射关系
- 属性:column:数据库的的字段名 property:设置映射关系的实体类的属性名
- result:设置普通字段的映射关系
- association:专门来处理多对一的映射关系,看下列8.2的讲解
- 属性:property:设置要处理的属性的属性名 javaType:设置要处理的属性的类型
- 属性:select:设置下一步sql语句的唯一标识 column:将当前sql查询出来的某个字段值设置为下一步sql语句的条件参数值 用于分步查询
- 子标签用法:也是使用id和result子标签进行主键字段和普通字段的映射
- id:设置主键的映射关系
<resultMap id="empResultMap" type="Emp">
<id column="emp_id" property="empId"></id>
<result column="emp_name" property="empName"></result>
<result column="age" property="age"></result>
<result column="gender" property="gender"></result>
</resultMap>
<!--Emp getEmpById(@Param("empId") Integer empId);-->
<select id="getEmpById" resultMap="empResultMap">
select * from t_emp where emp_id = #{empId}
</select>