Mybatis中实体字段名与表中列名不一致
- 问题描述
- 解决方案
- 1. 在SQL查询语句中添加别名
- 2. 自定义结果映射
- 3. 开启驼峰命名规则
- 4. 特殊情况
问题描述
假设实体User中有字段名为userName,而表中列名为user_name
正常情况下,执行数据库查询,查询到的userName为null
,因为名称不一致,值无法映射
解决方案
1. 在SQL查询语句中添加别名
在SQL语句中,手动为查询的列添加别名,使其与实体中字段名相同
示例:
<!-- 配置查询所有操作 -->
<select id="findAll" resultType="com.itheima.domain.User">
select id as userId,user_name as userName,birthday as userBirthday,
sex as userSex,address as userAddress from user
</select>
此时,再次执行数据库查询,userName就会有值了
但是,SQL语句如果很多的情况下,为每一个SQL添加别名就会很麻烦
2. 自定义结果映射
resultMap标签
可以建立查询的列名和实体类的属性名不一致的映射关系,从而实现封装
在select标签
中使用resultMap属性
指定引用即可
示例:
- 创建自定义映射
<!-- 建立 User 实体和数据库表的对应关系
type 属性:指定实体类的全限定类名
id 属性:给定一个唯一标识,是给查询 select 标签引用用的。
-->
<resultMap type="com.itheima.domain.User" id="userMap">
<id column="id" property="userId"/>
<result column="user_name" property="userName"/>
<result column="sex" property="userSex"/>
<result column="address" property="userAddress"/>
<result column="birthday" property="userBirthday"/>
</resultMap>
- 使用自定义映射
<!-- 配置查询所有操作 -->
<select id="findAll" resultMap="userMap">
select * from user
</select>
使用自定义映射的好处是可以复用
3. 开启驼峰命名规则
当表的列名使用下划线
编写,实体字段名使用驼峰命名,并且两者匹配时,可以通过开启驼峰命名规则
解决名称不一致问题
例如:
列名:user_name,字段名:userName,这种情况开启驼峰命名规则是有作用的
但是像 列名:u_name,字段名:userName,这种情况是没有作用的
开启驼峰命名规则
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"
</settings>
4. 特殊情况
Mysql
在Windows
操作系统中时不区分大小写的
所以,如果列名:username,字段名:userName 这种情况是可以匹配映射的,可以查询到值