【解决笔记】MyBatis-Plus 中无 selectList 方法
MyBatis-Plus 中无 selectList 方法的解决笔记
核心前提
MyBatis-Plus 的 BaseMapper
接口内置了 selectList
等基础查询方法,继承该接口可直接使用,无需手动实现。
无 selectList 方法的两种情况及解决方式
1. 未继承 BaseMapper(推荐方案)
让 Mapper 接口继承 BaseMapper<T>
(T 为实体类),即可直接获得 selectList
等基础方法:
// 示例:UserMapper 继承 BaseMapper<User>
public interface UserMapper extends BaseMapper<User> {// 无需手动定义 selectList,BaseMapper 已包含
}// 使用方式
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getName, "张三");
List<User> users = userMapper.selectList(wrapper); // 直接调用
2. 无法继承 BaseMapper(特殊场景,需自定义方法)
步骤1:在 Mapper 接口中定义方法
public interface UserMapper {// 自定义查询方法,参数为 LambdaQueryWrapperList<User> findUsers(LambdaQueryWrapper<User> wrapper);
}
步骤2:编写 SQL 实现(两种方式)
-
XML 映射文件方式:
<!-- UserMapper.xml --> <select id="findUsers" resultType="com.example.entity.User">SELECT * FROM user<!-- 引入 LambdaQueryWrapper 生成的条件片段 -->${wrapper.getSqlSegment()} </select>
-
注解方式:
public interface UserMapper {@Select("SELECT * FROM user ${wrapper.getSqlSegment()}")List<User> findUsers(LambdaQueryWrapper<User> wrapper); }
步骤3:调用自定义方法
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getName, "张三");
List<User> users = userMapper.findUsers(wrapper); // 调用自定义方法
注意事项
- 优先选择继承
BaseMapper
,这是 MyBatis-Plus 的核心特性,可大幅简化开发。 - 自定义方法时,通过
${wrapper.getSqlSegment()}
引入查询条件,MyBatis-Plus 已对 SQL 注入做了防护。 - 若需灵活控制查询字段,可在 SQL 中指定具体列(如
SELECT id, name FROM user
),避免查询冗余字段。