selectbyid 与selectbymap的区别
时间: 2024-01-24 19:04:28 浏览: 142
`selectById` 和 `selectByMap` 都是 MyBatis 提供的查询方法,但是它们的使用场景不同。
`selectById` 方法是根据主键查询记录,它的参数是主键的值。例如:`selectById(1)` 表示查询主键为 1 的记录。这个方法只能查询主键是整型或字符串类型的表。
而 `selectByMap` 方法是根据条件查询记录,它的参数是一个 Map 对象,这个 Map 对象中包含了查询条件。例如:`selectByMap({"name":"张三","age":20})` 表示查询 name 为“张三”且 age 为 20 的记录。这个方法可以查询任何类型的表,只要在传入的 Map 中指定了正确的查询条件。
一般来说,如果你要根据主键查询记录,就可以使用 `selectById` 方法。如果你需要根据复杂的条件查询记录,就可以使用 `selectByMap` 方法。
相关问题
请解释一下这段代码: public class DefaultSqlInjector extends AbstractSqlInjector { @Override public List<AbstractMethod> getMethodList(Class<?> mapperClass) { return Stream.of( new Insert(), new Delete(), new DeleteByMap(), new DeleteById(), new DeleteBatchByIds(), new Update(), new UpdateById(), new SelectById(), new SelectBatchByIds(), new SelectByMap(), new SelectOne(), new SelectCount(), new SelectMaps(), new SelectMapsPage(), new SelectObjs(), new SelectList(), new SelectPage() ).collect(toList()); } }
这段代码是 MyBatis-Plus 中的 DefaultSqlInjector 类的实现。它继承了 AbstractSqlInjector 抽象类,并且重写了其中的 getMethodList 方法。该方法返回一个 AbstractMethod 类型的 List,其中 AbstractMethod 是一个抽象类,它的子类包含了一组 SQL 操作的实现。
在 DefaultSqlInjector 中,该方法使用了 Java 8 的 Stream API,通过一系列的方法调用,创建了一个包含了 Insert、Delete、Update、Select 等 SQL 操作的 AbstractMethod 子类的 List,并将其返回。这些操作可以与 MyBatis-Plus 提供的自动 CRUD 生成器一起使用,简化了开发人员的工作。
public interface BaseMapper<T> { Integer insert(T var1); Integer insertAllColumn(T var1); Integer deleteById(Serializable var1); Integer deleteByMap(@Param("cm") Map<String, Object> var1); Integer delete(@Param("ew") Wrapper<T> var1); Integer deleteBatchIds(@Param("coll") Collection<? extends Serializable> var1); Integer updateById(@Param("et") T var1); Integer updateAllColumnById(@Param("et") T var1); Integer update(@Param("et") T var1, @Param("ew") Wrapper<T> var2); Integer updateForSet(@Param("setStr") String var1, @Param("ew") Wrapper<T> var2); T selectById(Serializable var1); List<T> selectBatchIds(@Param("coll") Collection<? extends Serializable> var1); List<T> selectByMap(@Param("cm") Map<String, Object> var1); T selectOne(@Param("ew") T var1); Integer selectCount(@Param("ew") Wrapper<T> var1); List<T> selectList(@Param("ew") Wrapper<T> var1); List<Map<String, Object>> selectMaps(@Param("ew") Wrapper<T> var1); List<Object> selectObjs(@Param("ew") Wrapper<T> var1); List<T> selectPage(RowBounds var1, @Param("ew") Wrapper<T> var2); List<Map<String, Object>> selectMapsPage(RowBounds var1, @Param("ew") Wrapper<T> var2); }
这是一个基础的 MyBatis Mapper 接口,定义了一些常见的数据库操作方法,包括插入、删除、更新和查询等。其中使用了泛型 T 表示实体类类型,@Param 注解指定了参数名称,比如 "et" 表示实体类对象,"ew" 表示查询条件 Wrapper 对象。这个接口可以作为其他 Mapper 接口的父接口,避免重复定义相同的方法。通常情况下,我们需要根据具体业务需求,继承该接口并自定义一些额外的方法。
阅读全文