如果你希望在使用 @Select 注解的情况下查询包括逻辑删除的数据,你可以直接在 SQL 查询中编写相应的逻辑。@Select 注解允许你自定义查询语句,因此你可以控制是否包含逻辑删除的数据。

示例代码:

假设你的表中有一个 del_flag 字段,用于表示逻辑删除状态(0 表示未删除,1 表示已删除)。你可以通过 @Select 注解来查询包括逻辑删除的数据。

@Mapper
public interface MyVehicleNoMapper {

    @Select({
        "<script>",
        "SELECT * FROM pdt_my_vehicle",
        "WHERE id IN ",
        "<foreach collection='ids' item='id' open='(' separator=',' close=')'>",
        "#{id}",
        "</foreach>",
        // 可选:此条件可确保查询逻辑删除的数据
        // "AND del_flag = 1", 
        "</script>"
    })
    List<PdtMyVehicleVo> selectVoList(@Param("ids") List<Long> ids);
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
说明:
  1. 查询所有数据(包括逻辑删除的数据): 上述 SQL 查询没有 del_flag 的条件过滤,所以会返回所有状态的数据,无论逻辑删除与否。如果你希望查询包括逻辑删除的数据,可以直接使用这种方式。
  2. 仅查询逻辑删除的数据: 如果你只希望查询逻辑删除的数据,可以在 SQL 语句中加上相应的条件:
@Select({
    "<script>",
    "SELECT * FROM pdt_my_vehicle",
    "WHERE id IN ",
    "<foreach collection='ids' item='id' open='(' separator=',' close=')'>",
    "#{id}",
    "</foreach>",
    "AND del_flag = 1",  // 仅查询逻辑删除的数据
    "</script>"
})
List<PdtMyVehicleVo> selectVoList(@Param("ids") List<Long> ids);
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  1. 动态控制逻辑删除: 你可以通过传递一个参数来动态控制是否查询逻辑删除的数据:
@Select({
    "<script>",
    "SELECT * FROM pdt_my_vehicle",
    "WHERE id IN ",
    "<foreach collection='ids' item='id' open='(' separator=',' close=')'>",
    "#{id}",
    "</foreach>",
    "<if test='includeDeleted != null and includeDeleted'>",
    "AND del_flag = 1",  // 包含逻辑删除的数据
    "</if>",
    "</script>"
})
List<PdtMyVehicleVo> selectVoList(@Param("ids") List<Long> ids, @Param("includeDeleted") Boolean includeDeleted);
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.

通过上述方法,你可以使用 @Select 注解灵活地控制查询结果,包括是否包括逻辑删除的数据。