getOne 和 selectOne 都是 Mybatis Plus 中的方法,用于从数据库表中获取单条记录。
你真正弄懂过myBatisPlus中getOne和selectOne两个方法的区别吗?
在网上搜了半天,想弄明白这两个方法的区别,到底有什么不同。但是所搜到的并非我想看到的答案。
于是自己请教了同事,大概总结了一下:
首先,getOne和selectOne调用的位置是不同的。getOne是在通用service中定义的方法,如果用的是mapper或者serviceImpl,则是selectOne。
其次,主要区别在于返回值的类型:
getOne 方法会返回单条记录的实体对象。
selectOne 方法会返回包含单条记录的列表。
举个例子,假设有一个 User 实体类,对应数据库表 t_user,包含 id, name, age 等字段。如果想要根据 id 获取单条记录,可以使用 getOne 或 selectOne 方法。
使用 getOne 的代码如下:
// 此时 user 就是查询到的单条记录,类型为 User
User user = userMapper.getOne(1L);
使用 selectOne 的代码如下:
// 此时 user 就是查询到的单条记录,类型为 User
List<User> userList = userMapper.selectOne( new QueryWrapper<User>().eq("id", 1L));
User user = userList.get(0);
需要注意的是,如果查询返回的记录数超过一条,那么 getOne 和 selectOne 都会抛出异常。
对于期望获取单条记录的情况,建议使用 getOne,因为它更简洁易读。但是,如果不确定查询是否会返回多条记录,或者需要处理未返回记录的情况,则可能希望使用 selectOne 并检查返回的列表的大小。