文章目录
- 1、通过字段别名解决字段名和属性名的映射关系
- 2、通过全局配置mapUnderscoreToCamelCase解决字段名和属性名的映射关系
- 3、通过resultMap解决字段名和属性名的映射关系
配合文章:
IDEA Intellij中MyBatis框架搭建全过程及MyBatis工程基本的使用方法
如果能成功查询到数据库信息证明框架搭建基本没问题了
但我们可以发现empName显示的为null
原因是在设置实体类时我们对数据库表中的emp_name字段使用的属性名为empName,导致无法映射到对应的字段名。但!这是因为字段名有字段名的规则,属性名有属性名的规则,所以这样是没问题的,但要想要成功访问到对应的字段,需要
解决字段名和属性名的映射关系!
以下介绍MyBatis中解决字段名和属性名的映射关系的几种方法
1、通过字段别名解决字段名和属性名的映射关系
在映射文件中的SQL语句中将各个字段名写出来,把字段名与属性名不一致的字段 设置一个与属性名一致的别名
运行测试文件可以发现问题得到了解决:
2、通过全局配置mapUnderscoreToCamelCase解决字段名和属性名的映射关系
在mybatis-config.xml配置文件中添加一个全局配置mapUnderscoreToCamelCase,并将其值value设为true:
相关代码:
<!-- 设置MyBatis的全局配置 -->
<settings>
<!-- 将下划线_自动映射为驼峰,如emp_name---》empName-->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
注释掉使用字段别名的SQL语句对其进行测试:
运行测试代码可发现字段可以正常显示:
3、通过resultMap解决字段名和属性名的映射关系
在映射文件中将resultType改为resultMap并通过resultMap设置自定义的映射关系
这里要提到的是:若使用resultType则使用的是默认的映射关系,而使用resultMap的话使用的是通过resultMap自定义的映射关系
相关代码:
<!-- resultMap解决字段名和属性名的映射关系-->
<resultMap id="empResultMap" type="Emp">
<id property="eid" column="eid"></id>
<result property="empName" column="emp_name"></result>
<result property="age" column="age"></result>
<result property="sex" column="sex"></result>
<result property="email" column="email"></result>
</resultMap>
<!-- List<Emp> getAllEmp();-->
<select id="getAllEmp" resultMap="empResultMap">
select * from t_emp
</select>
注意resultMap自定义映射关系中,
<id property="" column=""></id>
设置的是id字段的映射关系,<result property="" column=""></result>
设置的是普通字段的映射关系
property中设置的是属性名,column设置的是字段名,注意column中的字段名要与数据库表的字段名保持一致,property中的属性名要与实体类中的属性名保持一致!
resultMap中相关标签和属性的含义:
注释掉之前使用resultType的SQL语句和之前配置的全局配置进行测试
可以看到能正常输出: