一、问题描述

1.1 查询 password 字段为 null 现象

数据库字段名:

实体类属性名:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {private int id;private String name;private String password;
}

Mapper 层:

public interface UserMapper {//查询全部用户List<User> getUserList();
}

UserMapper.xml

<select id="getUserList" resultType="user">select id,name,pwd from mybatis.user;
</select>

编写单元测试:

@Test
public void getUserList(){//获得SqlSession对象SqlSession sqlSession=MybatisUtils.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);List<User> userList = mapper.getUserList();for (User user : userList) {System.out.println(user);}//关闭sqlsqlSession.close();
}

测试结果

password 全部为 null 原因是数据库字段名 pwd 和实体类属性名 password 不一致导致的。

二、解决方案

2.1 pwd 取别名为 password

在 UserMapper.xml 文件中的 pwd 求别名为 password 如下:

<select id="getUserList" resultType="user">select id,name,pwd as password from mybatis.user;
</select>

测试结果:

2.2 使用 resultMap 标签

<!--结果集映射-->
<resultMap id="UserMap" type="User"><!--column对应数据库字段 property对应实体类属性--><!--<result column="id" property="id"/>--><!--<result column="name" property="name"/>--><result column="pwd" property="password"/>
</resultMap><select id="getUserList" resultType="user" resultMap="UserMap">select id,name,pwd from mybatis.user;
</select>

测试结果:

2.3 下划线可设置驼峰命名规则

如果只是单纯的下划线,可以使用 setting 标签设置开启驼峰命名规则,例如:数据库字段 start_time,实体类 startTime 。

<settings><!--开启驼峰命名规则,可以将数据库字段的下划线映射为驼峰命名--><setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>

总结

解决 Mybatis 数据库字段名和实体类属性名不一致问题的三种办法:
1.取别名
2.使用 resultMap 标签 (推荐使用)
3.如果只是单纯的下划线,可以使用 setting 标签设置开启驼峰命名规则。

Mybatis 解决数据库字段名和实体类属性名不一致问题相关推荐

  1. 【转】MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突

    [转]MyBatis学习总结(四)--解决字段名与实体类属性名不相同的冲突 在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体 ...

  2. MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突

    2019独角兽企业重金招聘Python工程师标准>>> 一.准备演示需要使用的表和数据 CREATE TABLE orders(order_id INT PRIMARY KEY AU ...

  3. Mybatis解决字段名与实体类属性名不相同的冲突

    在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体类属性名不相同的冲突. 一.准备演示需要使用的表和数据 CREATE TAB ...

  4. MyBatis学习总结(4)——解决字段名与实体类属性名不相同的冲突

    一.准备演示需要使用的表和数据 CREATE TABLE orders(order_id INT PRIMARY KEY AUTO_INCREMENT,order_no VARCHAR(20), or ...

  5. 如何配置数据库带有下划线字段对应Java实体类属性(驼峰命名)

    一般开发中,数据库字段设计推荐使用下划线(u_name),Java实体类属性使用驼峰命名(uName),为了能使数据库字段与Java实体类属性一一映射,需要做一下的配置,这里我用的是spring bo ...

  6. Mybatis中resultMap的作用-解决实体类属性名和数据库字段不一致

    解决实体类属性名和数据库字段不一致 转载于:https://www.cnblogs.com/mww-NOTCOPY/p/10950712.html

  7. 【MyBatis】sql列名与实体类属性名不同的解决方式

    sql列名与Java实体类属性名不同的解决方式 例如: 数据库 CREATE TABLE orders(order_id INT PRIMARY KEY AUTO_INCREMENT,order_no ...

  8. springboot-数据库字段和实体类属性名不对应如何解决?

    springboot-数据库字段和实体类属性名不对应如何解决? 我们可以采用:ResultMap结果集映射 来解决这个问题如下: <resultMap id="UserMap" ...

  9. 数据库字段类型、实体类字段类型、mapper文件jdbcType三者对应关系

    数据库字段类型.实体类字段类型.mapper文件jdbcType三者对应关系: 数据库字段类型 实体类字段类型 mapper文件jdbcType bigint Long JdbcType.BIGINT ...

最新文章

  1. 数学建模中的matlab实例,matlab数学建模实例
  2. Linux gdb调试器
  3. 继承复习-发均分红包案例
  4. springboot中端点监管 endpoint actuator
  5. TCP/IP协议的深入分析
  6. Imbalanced data – Finding Waldo
  7. 数组转换为html,如何将多维PHP数组转换为html表
  8. Ext-ajax请求数据
  9. linux免密登录(ssh命令)
  10. 就会编成新闻稿的飞鸽传书
  11. 多站合一音乐搜索神器网站源码
  12. 还在用Json-lib?面对疾风吧!
  13. redis string底层数据结构
  14. 3步快速彻底卸载MySQL
  15. 2345劫持浏览器主页怎么办?以Microsoft Edge为例
  16. 关于jmeter TPS解读
  17. python mysqldb 安装_python MySQLdb安装和使用
  18. 盛大是中国互联网最耀眼的流星
  19. NXP MCU CAN波特率(位时间)配置详解
  20. cisp-pte安全渗透工程师,如何成为安全渗透测试工程师?从认识网络安全威胁开始

热门文章

  1. docker出现request cancele le waiting for connection Client. Timeout exceeded while awaiting headers问题
  2. 黑客内核:如何实现属于你的实时内核?
  3. 面对混合云与多云挑战,IBM如何助力企业数字化转型?
  4. 管式静态混合器 不锈钢管道混合器
  5. 编译原理复习(4)语法分析--自上而下分析
  6. 移动文件后图标变白解决方法
  7. NLP专题直播 | Transformer, BERT, ALBERT, XLNet全面解析(ALBERT第一作者亲自讲解)
  8. 计算机人才供需状况和就业形势分析,计算机科学与技术就业形势分析
  9. 2.Elasticsearch-增删改
  10. 将UTC日期字符串转为本地时间字符串,如@yyyy-MM-dd'T'HH:mm:ssZ转换为本地时间