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
),避免查詢冗余字段。