目录
我们知道在设计数据库字段名时,使用下划线命名确实比较常见,而在 Java 中,实体类的属性名通常采用驼峰命名法。
不过这里注意一下,我们总说MySQL不区分大小写,这其实是不准确的。
对于MySQL数据库名、表名和列名的大小写敏感性:
在 Windows 系统上
默认情况下,MySQL 在 Windows 系统上对数据库名、表名和列名不区分大小写。例如,创建一个名为 “mydb” 的数据库和一个名为 “MYDB” 的数据库,实际上是创建了同一个数据库。
在 Linux 和 macOS 等类 Unix 系统上
默认情况下,MySQL 在类 Unix 系统上对数据库名、表名和列名区分大小写。例如,“mydb” 和 “MYDB” 是两个不同的数据库名。
实体类的属性名与数据库表返回的字段名一致,mybatis 可以自动封装, 如果实体类的属性名与数据库表返回的字段名不一致,mybatis是不能自动封装,这就会导致如果我们不做任何处理,与实体类的属性名不一致的字段名查询出来是null:
要解决这个问题有以下解决方案:
(以下演示为了方便都用注解的方式对数据库进行简单的查询)
-
给字段起别名,让别名和实体类中的属性名一致,这样mybatis就会自动封装了:
@Select("select id empId,username,name,gender,image,job,entrydate," + "dept_id deptId,create_time createTime,update_time updateTime from emp where id=#{id}")
-
通过@Results注解,指定字段与实体类属性的映射关系,mybatis就会自动封装了:
@Results({ @Result(column = "dept_id",property = "deptId"), @Result(column = "create_time",property = "createTime"), @Result(column = "update_time",property = "updateTime") }) @Select("select * from emp where id = #{id}")
-
开启mybatis驼峰命名自动映射开关,mybatis就会自动封装了:
在application.properties中输入以下配置信息:
mybatis.configuration.map-underscore-to-camel-case=true
当然,在application.yml中则是输入以下配置信息:
mybatis: configuration: map-underscore-to-camel-case: true
但是用这个方法有个前提,那就是设计数据库字段名时,要使用下划线命名。MyBatis 驼峰命名自动映射的原理:MyBatis 的驼峰命名自动映射功能是通过将数据库表中的下划线命名的字段自动转换为 Java 实体类中的驼峰命名属性来实现的。例如,数据库表中的 “user_name” 字段可以自动映射到 Java 实体类中的 “userName” 属性。
通过这些方法就不会出现与实体类的属性名不一致的字段名查询出来是null的情况了: