Mybatis实体类的属性名与数据库表返回的字段名不一致导致查询为null的解决办法

目录

给字段起别名

通过@Results注解

开启mybatis驼峰命名自动映射开关


我们知道在设计数据库字段名时,使用下划线命名确实比较常见,而在 Java 中,实体类的属性名通常采用驼峰命名法。

不过这里注意一下,我们总说MySQL不区分大小写,这其实是不准确的。

对于MySQL数据库名、表名和列名的大小写敏感性:

  1. 在 Windows 系统上

    • 默认情况下,MySQL 在 Windows 系统上对数据库名、表名和列名不区分大小写。例如,创建一个名为 “mydb” 的数据库和一个名为 “MYDB” 的数据库,实际上是创建了同一个数据库。

  2. 在 Linux 和 macOS 等类 Unix 系统上

    • 默认情况下,MySQL 在类 Unix 系统上对数据库名、表名和列名区分大小写。例如,“mydb” 和 “MYDB” 是两个不同的数据库名。

实体类的属性名与数据库表返回的字段名一致,mybatis 可以自动封装, 如果实体类的属性名与数据库表返回的字段名不一致,mybatis是不能自动封装,这就会导致如果我们不做任何处理,与实体类的属性名不一致的字段名查询出来是null:

要解决这个问题有以下解决方案:

(以下演示为了方便都用注解的方式对数据库进行简单的查询)

  1. 给字段起别名,让别名和实体类中的属性名一致,这样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}")

  2. 通过@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}")

  3. 开启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的情况了:

MyBatis 是一个开源的持久层框架,它可以与 MySQL 数据库一起使用实现分页功能。下面是在 MyBatis 中使用 MySQL 分页的步骤: 1. 在你的数据库中创建需要分页的,并插入一些数据作为示例。 2. 在 MyBatis 的配置文件(一般是 `mybatis-config.xml`)中配置数据源和相关的参数。 3. 创建一个映射器接口,用于定义 SQL 映射方法。可以使用注解或 XML 文件进行映射配置。 4. 在映射器接口中定义一个查询方法,用于获取分页数据。方法参数中包含分页相关的参数,如页码和每页显示的数量。 5. 在映射器 XML 配置文件中编写 SQL 查询语句。使用 `LIMIT` 关键字来限制查询结果的范围,同时使用 `OFFSET` 关键字来指定偏移量。 6. 在 Java 代码中调用映射器接口的查询方法,并传递分页参数。 7. 处理查询结果并进行后续操作,如展示或处理数据。 这是一个简单的示例代码,演示了如何在 MyBatis 中实现 MySQL 分页: ```java // 定义映射器接口 public interface UserMapper { List<User> getUsersByPage(@Param("offset") int offset, @Param("limit") int limit); } // 在映射器 XML 配置文件中编写 SQL 查询语句 <select id="getUsersByPage" resultType="User"> SELECT * FROM users LIMIT #{offset}, #{limit} </select> // 在 Java 代码中调用映射器接口的查询方法,并传递分页参数 int pageNo = 1; // 页码 int pageSize = 10; // 每页显示的数量 int offset = (pageNo - 1) * pageSize; // 计算偏移量 List<User> userList = userMapper.getUsersByPage(offset, pageSize); ``` 以上代码将从 `users` 中获取指定页码的用户数据,并限制每页显示的数量为 10 条。 请注意,以上示例只是简单描述了 MyBatisMySQL 结合实现分页的基本步骤,实际应用中可能还需要处理总记录数、计算总页数等其他逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值