一、创建具体的Mapper接口

继承通用的Mapper,必须指定泛型,例如下面的例子:

/**
 *
 * 具体操作数据库的Mapper接口,需要继承通用Mapper提供的核心接口 Mapper<T>
 *     泛型类型就是实体类的类型
 *
 */

public interface EmployeeMapper extends Mapper<Employee{
  //其他必须手写的接口
}

一旦继承了Mapper,继承的Mapper就拥有了Mapper所有的通用方法。

二、Mapper 里面有什么

Mapper 的声明

@tk.mybatis.mapper.annotation.RegisterMapper
public interface Mapper<Textends
        BaseMapper<T>,
        ExampleMapper<T>,
        RowBoundsMapper<T>,
        Marker 
{

}

1、BaseMapper

@tk.mybatis.mapper.annotation.RegisterMapper
public interface BaseMapper<Textends
        BaseSelectMapper<T>,
        BaseInsertMapper<T>,
        BaseUpdateMapper<T>,
        BaseDeleteMapper<T
{

}

① BaseSelectMapper:定义基本的查询操作

/**
 * 通用Mapper接口,基础查询
 *
 * @param <T> 不能为空
 * @author liuzh
 */

@RegisterMapper
public interface BaseSelectMapper<Textends
        SelectOneMapper<T>,
        SelectMapper<T>,
        SelectAllMapper<T>,
        SelectCountMapper<T>,
        SelectByPrimaryKeyMapper<T>,
        ExistsWithPrimaryKeyMapper<T
{

}

@RegisterMapper
public interface SelectOneMapper<T{

    /**
     * 根据实体中的属性进行查询,只能有一个返回值,有多个结果是抛出异常,查询条件使用等号
     *
     * @param record
     * @return
     */

    @SelectProvider(type = BaseSelectProvider.classmethod "dynamicSQL")
    selectOne(T record);

}
  
@RegisterMapper
public interface SelectMapper<T{

    /**
     * 根据实体中的属性值进行查询,查询条件使用等号
     *
     * @param record
     * @return
     */

    @SelectProvider(type = BaseSelectProvider.classmethod "dynamicSQL")
    List<T> select(T record);

}

@RegisterMapper
public interface SelectAllMapper<T{

    /**
     * 查询全部结果
     *
     * @return
     */

    @SelectProvider(type = BaseSelectProvider.classmethod "dynamicSQL")
    List<T> selectAll();
}

@RegisterMapper
public interface SelectCountMapper<T{

    /**
     * 根据实体中的属性查询总数,查询条件使用等号
     *
     * @param record
     * @return
     */

    @SelectProvider(type = BaseSelectProvider.classmethod "dynamicSQL")
    int selectCount(T record);

}

@RegisterMapper
public interface SelectByPrimaryKeyMapper<T{

    /**
     * 根据主键字段进行查询,方法参数必须包含完整的主键属性,查询条件使用等号
     *
     * @param key
     * @return
     */

    @SelectProvider(type = BaseSelectProvider.classmethod "dynamicSQL")
    selectByPrimaryKey(Object key);

}

@RegisterMapper
public interface ExistsWithPrimaryKeyMapper<T{

    /**
     * 根据主键字段查询总数,方法参数必须包含完整的主键属性,查询条件使用等号
     *
     * @param key
     * @return
     */

    @SelectProvider(type = BaseSelectProvider.classmethod "dynamicSQL")
    boolean existsWithPrimaryKey(Object key);

}

② BaseInsertMapper:定义基本的插入操作

/**
 * 通用Mapper接口,基础查询
 *
 * @param <T> 不能为空
 * @author liuzh
 */

@RegisterMapper
public interface BaseInsertMapper<Textends
        InsertMapper<T>,
        InsertSelectiveMapper<T
{

}

@RegisterMapper
public interface InsertMapper<T{

    /**
     * 保存一个实体,null的属性也会保存,不会使用数据库默认值
     *
     * @param record
     * @return
     */

    @InsertProvider(type = BaseInsertProvider.classmethod "dynamicSQL")
    int insert(T record);

}

@RegisterMapper
public interface InsertSelectiveMapper<T{

    /**
     * 保存一个实体,null的属性不会保存,会使用数据库默认值
     *
     * @param record
     * @return
     */

    @InsertProvider(type = BaseInsertProvider.classmethod "dynamicSQL")
    int insertSelective(T record);

}

③ BaseUpdateMapper:定义基本的更新操作

/**
 * 通用Mapper接口,基础查询
 *
 * @param <T> 不能为空
 * @author liuzh
 */

@RegisterMapper
public interface BaseUpdateMapper<Textends
        UpdateByPrimaryKeyMapper<T>,
        UpdateByPrimaryKeySelectiveMapper<T
{

}

@RegisterMapper
public interface UpdateByPrimaryKeyMapper<T{

    /**
     * 根据主键更新实体全部字段,null值会被更新
     *
     * @param record
     * @return
     */

    @UpdateProvider(type = BaseUpdateProvider.classmethod "dynamicSQL")
    int updateByPrimaryKey(T record);

}

@RegisterMapper
public interface UpdateByPrimaryKeySelectiveMapper<T{

    /**
     * 根据主键更新属性不为null的值
     *
     * @param record
     * @return
     */

    @UpdateProvider(type = BaseUpdateProvider.classmethod "dynamicSQL")
    int updateByPrimaryKeySelective(T record);

}

④ BaseDeleteMapper:定义基本的删除操作

/**
 * 通用Mapper接口,基础删除
 *
 * @param <T> 不能为空
 * @author liuzh
 */

@RegisterMapper
public interface BaseDeleteMapper<Textends
        DeleteMapper<T>,
        DeleteByPrimaryKeyMapper<T
{

}

@RegisterMapper
public interface DeleteMapper<T{

    /**
     * 根据实体属性作为条件进行删除,查询条件使用等号
     *
     * @param record
     * @return
     */

    @DeleteProvider(type = BaseDeleteProvider.classmethod "dynamicSQL")
    int delete(T record);

}

@RegisterMapper
public interface DeleteByPrimaryKeyMapper<T{

    /**
     * 根据主键字段进行删除,方法参数必须包含完整的主键属性
     *
     * @param key
     * @return
     */

    @DeleteProvider(type = BaseDeleteProvider.classmethod "dynamicSQL")
    int deleteByPrimaryKey(Object key);

}

2、ExampleMapper

/**
 * 通用Mapper接口,Example查询
 *
 * @param <T> 不能为空
 * @author liuzh
 */

@tk.mybatis.mapper.annotation.RegisterMapper
public interface ExampleMapper<Textends
        SelectByExampleMapper<T>,
        SelectOneByExampleMapper<T>,
        SelectCountByExampleMapper<T>,
        DeleteByExampleMapper<T>,
        UpdateByExampleMapper<T>,
        UpdateByExampleSelectiveMapper<T
{

}

① SelectByExampleMapper

@tk.mybatis.mapper.annotation.RegisterMapper
public interface SelectByExampleMapper<T{

    /**
     * 根据Example条件进行查询
     *
     * @param example
     * @return
     */

    @SelectProvider(type = ExampleProvider.classmethod "dynamicSQL")
    List<T> selectByExample(Object example);

}

② SelectOneByExampleMapper

@tk.mybatis.mapper.annotation.RegisterMapper
public interface SelectOneByExampleMapper<T{

    /**
     * 根据Example条件进行查询
     *
     * @param example
     * @return
     */

    @SelectProvider(type = ExampleProvider.classmethod "dynamicSQL")
    selectOneByExample(Object example);

}

③ SelectCountByExampleMapper

@tk.mybatis.mapper.annotation.RegisterMapper
public interface SelectCountByExampleMapper<T{

    /**
     * 根据Example条件进行查询总数
     *
     * @param example
     * @return
     */

    @SelectProvider(type = ExampleProvider.classmethod "dynamicSQL")
    int selectCountByExample(Object example);

}

④ DeleteByExampleMapper

@tk.mybatis.mapper.annotation.RegisterMapper
public interface DeleteByExampleMapper<T{

    /**
     * 根据Example条件删除数据
     *
     * @param example
     * @return
     */

    @DeleteProvider(type = ExampleProvider.classmethod "dynamicSQL")
    int deleteByExample(Object example);

}

⑤ UpdateByExampleMapper

@tk.mybatis.mapper.annotation.RegisterMapper
public interface UpdateByExampleMapper<T{

    /**
     * 根据Example条件更新实体`record`包含的全部属性,null值会被更新
     *
     * @param record
     * @param example
     * @return
     */

    @UpdateProvider(type = ExampleProvider.classmethod "dynamicSQL")
    int updateByExample(@Param("record") T record, @Param("example") Object example);

}

⑥ UpdateByExampleSelectiveMapper

@tk.mybatis.mapper.annotation.RegisterMapper
public interface UpdateByExampleSelectiveMapper<T{

    /**
     * 根据Example条件更新实体`record`包含的不是null的属性值
     *
     * @param record
     * @param example
     * @return
     */

    @UpdateProvider(type = ExampleProvider.classmethod "dynamicSQL")
    int updateByExampleSelective(@Param("record") T record, @Param("example") Object example);

}

3、RowBoundsMapper

/**
 * 通用Mapper接口,带RowBounds参数的查询
 * <p/>
 * 配合分页插件PageHelper可以实现物理分页
 * <p/>
 * PageHelper - http://git.oschina.net/free/Mybatis_PageHelper
 *
 * @param <T> 不能为空
 * @author liuzh
 */

@tk.mybatis.mapper.annotation.RegisterMapper
public interface RowBoundsMapper<Textends
        SelectByExampleRowBoundsMapper<T>,
        SelectRowBoundsMapper<T
{

}

①SelectByExampleRowBoundsMapper

@tk.mybatis.mapper.annotation.RegisterMapper
public interface SelectByExampleRowBoundsMapper<T{

    /**
     * 根据example条件和RowBounds进行分页查询
     *
     * @param example
     * @param rowBounds
     * @return
     */

    @SelectProvider(type = ExampleProvider.classmethod "dynamicSQL")
    List<T> selectByExampleAndRowBounds(Object example, RowBounds rowBounds);

}

② SelectRowBoundsMapper

@tk.mybatis.mapper.annotation.RegisterMapper
public interface SelectRowBoundsMapper<T{

    /**
     * 根据实体属性和RowBounds进行分页查询
     *
     * @param record
     * @param rowBounds
     * @return
     */

    @SelectProvider(type = BaseSelectProvider.classmethod "dynamicSQL")
    List<T> selectByRowBounds(T record, RowBounds rowBounds);

}

4、Marker

/**
 * 标记接口,继承该接口的接口,在MapperScannerConfigurer#setMarkerInterface时,会自动注册到通用Mapper
 *
 * @author liuzh
 * @since 3.2.2
 */

public interface Marker {

}
posted on 2021-09-14 10:29  格物致知_Tony  阅读(864)  评论(0)    收藏  举报