Mapper3通用介面的使用
Mapper3介面有兩種形式,一種是提供了一個方法的介面。還有一種是不提供方法,但是繼承了多個單方法的介面,一般是某類方法的集合。
參考:https://blog.csdn.net/fangwenzheng88/article/details/78713091
基礎介面
public interface Mapper<T> extends
BaseMapper<T>,
ExampleMapper<T>,
RowBoundsMapper<T>,
Marker {
}
實現基本的增刪改查,不用自己寫重複的sql
public class BaseServiceImpl<M extends Mapper<T>, T> implements BaseService<T> { @Autowired protected M mapper; public T getById(Object id) { return mapper.selectByPrimaryKey(id); } public PageModel<T> getList(ReceiveParameterModel receiveParameterModel) { PageModel<T> pageModel = null; if (receiveParameterModel != null) { Class<T> clazz = (Class<T>)((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[1]; Example example = ExampleUtil.getExample(clazz, receiveParameterModel); if (receiveParameterModel.getPage() == null || receiveParameterModel.getRows() == null) { Integer total = mapper.selectCountByExample(example); List<T> list = mapper.selectByExample(example); pageModel = new PageModel<T>(total, list); } if (receiveParameterModel.getPage() != null && receiveParameterModel.getRows() != null) { PageHelper.startPage(receiveParameterModel.getPage(), receiveParameterModel.getRows()); pageModel = new PageModel<T>(mapper.selectByExample(example)); } } return pageModel; } public T insert(T entity) { mapper.insert(entity); return entity; } public T update(T entity) { mapper.updateByPrimaryKeySelective(entity); return entity; } public T updateNull(T entity) { mapper.updateByPrimaryKey(entity); return entity; } public void delete(List<Object> obj) { obj.forEach(ob -> mapper.deleteByPrimaryKey(ob)); } }
Select
例如SelectMapper<T>
是一個單方法的介面,BaseSelectMapper<T>
是一個繼承了4個基礎查詢方法的介面。
方法:
List<T> select(T record)
根據實體中的屬性值進行查詢,查詢條件使用等號
T selectByPrimaryKey(Object key);
根據主鍵欄位進行查詢,方法引數必須包含完整的主鍵屬性,查詢條件使用等號
List<T> selectAll();
查詢全部結果,select(null)方法能達到同樣的效果
T selectOne(T record);
根據實體中的屬性進行查詢,只能有一個返回值,有多個結果是丟擲異常,查詢條件使用等號
int selectCount(T record);
根據實體中的屬性查詢總數,查詢條件使用等號
Insert
int insert(T record);
儲存一個實體,null的屬性也會儲存,不會使用資料庫預設值
int insertSelective(T record);
儲存一個實體,null的屬性不會儲存,會使用資料庫預設值
Update
int updateByPrimaryKey(T record);
根據主鍵更新實體全部欄位,null值會被更新
int updateByPrimaryKeySelective(T record);
根據主鍵更新屬性不為null的值
Delete
int delete(T record);
根據實體屬性作為條件進行刪除,查詢條件使用等號
int deleteByPrimaryKey(Object key);
根據主鍵欄位進行刪除,方法引數必須包含完整的主鍵屬性
CRUD組合介面
BaseMapper<T>
繼承了base組合介面中的4個組合介面,包含完整的CRUD方法
Example方法
List<T> selectByExample(Object example);
根據Example條件進行查詢
這個查詢支援通過Example
類指定查詢列,通過selectProperties
方法指定查詢列
int selectCountByExample(Object example);
根據Example條件進行查詢總數
int updateByExample(@Param("record") T record, @Param("example") Object example);
根據Example條件更新實體record
包含的全部屬性,null值會被更新
int updateByExampleSelective(@Param("record") T record, @Param("example") Object example);
根據Example條件更新實體record
包含的不是null的屬性值
int deleteByExample(Object example);
根據Example條件刪除資料
Example組合介面
ExampleMapper<T>
包含上面Example中的5個方法
Condition方法
Condition方法和Example方法作用完全一樣,只是為了避免Example帶來的歧義,提供的的Condition方法
List<T> selectByCondition(Object condition);
根據Condition條件進行查詢
int selectCountByCondition(Object condition);
根據Condition條件進行查詢總數
int updateByCondition(@Param("record") T record, @Param("example") Object condition);
根據Condition條件更新實體record
包含的全部屬性,null值會被更新
int updateByConditionSelective(@Param("record") T record, @Param("example") Object condition);
根據Condition條件更新實體record
包含的不是null的屬性值
int deleteByCondition(Object condition);
根據Condition條件刪除資料
Condition組合介面
ConditionMapper<T>
包含上面Condition中的5個方法
RowBounds
預設為記憶體分頁,可以配合PageHelper實現物理分頁
List<T> selectByRowBounds(T record, RowBounds rowBounds);
根據實體屬性和RowBounds進行分頁查詢
List<T> selectByExampleAndRowBounds(Object example, RowBounds rowBounds);
根據example條件和RowBounds進行分頁查詢
List<T> selectByConditionAndRowBounds(Object condition, RowBounds rowBounds);
根據example條件和RowBounds進行分頁查詢,該方法和selectByExampleAndRowBounds完全一樣,只是名字改成了Condition
RowBounds組合介面
RowBoundsMapper<T>
包含上面RowBounds中的前兩個方法,不包含selectByConditionAndRowBounds
special特殊介面
這些介面針對部分資料庫設計,不是所有資料庫都支援
int insertList(List<T> recordList);
批量插入,支援批量插入的資料庫可以使用,例如MySQL,H2等,另外該介面限制實體包含id
屬性並且必須為自增列
int insertUseGeneratedKeys(T record);
插入資料,限制為實體包含id
屬性並且必須為自增列,實體配置的主鍵策略無效
Ids介面
通過操作ids字串進行操作,ids 如 "1,2,3" 這種形式的字串,這個方法要求實體類中有且只有一個帶有@Id
註解的欄位,否則會丟擲異常。
List<T> selectByIds(String ids)
根據主鍵字串進行查詢,類中只有存在一個帶有@Id註解的欄位
int deleteByIds(String ids)
根據主鍵字串進行刪除,類中只有存在一個帶有@Id註解的欄位
Ids組合介面
IdsMapper<T>
Mapper介面
Mapper<T>
該介面相容Mapper2.x版本,繼承了BaseMapper<T>
, ExampleMapper<T>
, RowBoundsMapper<T>
三個組合介面。
@Override
public PageModel<Dictionary> getAllDictionary(ReceiveParameterModel receiveParameterModel) {
if (receiveParameterModel != null && (receiveParameterModel.getRows() == null || receiveParameterModel.getPage() == null)) {
int selectCount = mapper.selectCount(new Dictionary());
Example example = ExampleUtil.getExample(Dictionary.class, receiveParameterModel);
List<Dictionary> selectByExample = mapper.selectByExample(example);
PageModel<Dictionary> pageModel = new PageModel<>(selectCount,selectByExample);
return pageModel;
}else if(receiveParameterModel != null && receiveParameterModel.getPage() != null && receiveParameterModel.getRows() != null){
PageHelper.startPage(receiveParameterModel.getPage(), receiveParameterModel.getRows());
Example example = ExampleUtil.getExample(Dictionary.class, receiveParameterModel);
List<Dictionary> selectByExample = mapper.selectByExample(example);
//PageInfo<Dictionary> pageInfo = new PageInfo<>(selectByExample);
return new PageModel<Dictionary>(selectByExample);
}
return null;
}