首頁>技術>

Mybatis-Plus CRUD 操作簡單瞭解一下各個介面簡介

mybatis-plus中包含BaseMapper,Iservice兩個介面和ServiceImpl類,BaseMapper 針對dao層的方法封裝 CRUD,IService 針對業務邏輯層的封裝,需要指定Dao層類和對應的實體類,是在BaseMapper基礎上的加強,ServiceImpl 針對業務邏輯層的實現,搞懂三者關係就能搞懂怎麼用;

一般典型的使用例子中,XxImpl類實現IService類。但是我下面的例子是XxImpl類繼承自ServiceImpl類,並例項化BaseMapper的子類XxMapper和持久化bean類,實現自定義的XxService介面(繼承IService介面),在XxImpl類實現CRUD的增刪改查功能,並重寫在XxService介面定義的方法。

各個類關係如圖

@Servicepublic class TemplateServiceImpl extends ServiceImpl<TemplateDao, Template> implements TemplateService {    @Override    public List<Template> queryAll() {        return this.list();    }    @Override    public boolean existRecText(String recText) {        return this.getOne(                new LambdaQueryWrapper<Template>()                .eq(Template::getTemplateRectext, recText)) == null ? false : true;    }    @Override    public Template queryByRecText(String recText) {        return this.getOne(                new LambdaQueryWrapper<Template>()                        .eq(Template::getTemplateRectext, recText));    }    @Override    public boolean updataById(String id,int status,String msg) {        return this.update(new LambdaUpdateWrapper<Template>().eq(Template::getTemplateTempId,id)                .set(Template::getTemplateStatus,status)                .set(Template::getTemplateMsg,msg)                .set(Template::getUpdateTime, TimeUtil.getTime()));    }    @Override    public void updateEntity(Template template) {        this.updateById(template);    }    @Override    public void saveNotId(Template template) {        this.save(template);    }}

ServiceImpl類持有BaseMapper這個介面的例項,並實現了Iservice這個介面, 所以XxImpl類(業務主要邏輯實現的地方)在繼承ServiceImpl類時候可以指定BaseMapper的子介面進行例項化(也就是例子中的MaterialDao),而ServiceImpl是Iservice介面的子介面,XxImpl類實現了TemplateServiceImpl這個介面定義的若干業務邏輯函式。

mybatisplus中的IService介面(混個臉熟,沒必要都記住):

【新增資料:(增)】    default boolean save(T entity); // 呼叫 BaseMapper 的 insert 方法,用於新增一條資料。    boolean saveBatch(Collection<T> entityList, int batchSize); // 批次插入資料注:    entityList 表示實體物件集合     batchSize 表示一次批次插入的資料量,預設為 1000【新增或修改資料:(增或改)】    boolean saveOrUpdate(T entity); // id 若存在,則修改, id 不存在則新增資料   default boolean saveOrUpdate(T entity, Wrapper<T> updateWrapper); // 先根據條件嘗試更新,然後再執行 saveOrUpdate 操作   boolean saveOrUpdateBatch(Collection<T> entityList, int batchSize); // 批次插入並修改資料 【刪除資料:(刪)】    default boolean removeById(Serializable id); // 呼叫 BaseMapper 的 deleteById 方法,根據 id 刪除資料。    default boolean removeByMap(Map<String, Object> columnMap); // 呼叫 BaseMapper 的 deleteByMap 方法,根據 map 定義欄位的條件刪除    default boolean remove(Wrapper<T> queryWrapper); // 呼叫 BaseMapper 的 delete 方法,根據實體類定義的 條件刪除物件。    default boolean removeByIds(Collection<? extends Serializable> idList); // 用 BaseMapper 的 deleteBatchIds 方法, 進行批次刪除。    【修改資料:(改)】    default boolean updateById(T entity); // 呼叫 BaseMapper 的 updateById 方法,根據 ID 選擇修改。    default boolean update(T entity, Wrapper<T> updateWrapper); // 呼叫 BaseMapper 的 update 方法,根據 updateWrapper 條件修改實體物件。    boolean updateBatchById(Collection<T> entityList, int batchSize); // 批次更新資料【查詢資料:(查)】    default T getById(Serializable id); // 呼叫 BaseMapper 的 selectById 方法,根據 主鍵 ID 返回資料。    default List<T> listByIds(Collection<? extends Serializable> idList); // 呼叫 BaseMapper 的 selectBatchIds 方法,批次查詢資料。    default List<T> listByMap(Map<String, Object> columnMap); // 呼叫 BaseMapper 的 selectByMap 方法,根據表字段條件查詢    default T getOne(Wrapper<T> queryWrapper); // 返回一條記錄(實體類儲存)。    Map<String, Object> getMap(Wrapper<T> queryWrapper); // 返回一條記錄(map 儲存)。    default int count(Wrapper<T> queryWrapper); // 根據條件返回 記錄數。    default List<T> list(); // 返回所有資料。    default List<T> list(Wrapper<T> queryWrapper); // 呼叫 BaseMapper 的 selectList 方法,查詢所有記錄(返回 entity 集合)。    default List<Map<String, Object>> listMaps(Wrapper<T> queryWrapper); // 呼叫 BaseMapper 的 selectMaps 方法,查詢所有記錄(返回 map 集合)。    default List<Object> listObjs(); // 返回全部記錄,但只返回第一個欄位的值。    default <E extends IPage<T>> E page(E page, Wrapper<T> queryWrapper); // 呼叫 BaseMapper 的 selectPage 方法,分頁查詢    default <E extends IPage<Map<String, Object>>> E pageMaps(E page, Wrapper<T> queryWrapper); // 呼叫 BaseMapper 的 selectMapsPage 方法,分頁查詢注:    get 用於返回一條記錄。    list 用於返回多條記錄。    count 用於返回記錄總數。    page 用於分頁查詢。    【鏈式呼叫:】    default QueryChainWrapper<T> query(); // 普通鏈式查詢    default LambdaQueryChainWrapper<T> lambdaQuery(); // 支援 Lambda 表示式的修改    default UpdateChainWrapper<T> update(); // 普通鏈式修改    default LambdaUpdateChainWrapper<T> lambdaUpdate(); // 支援 Lambda 表示式的修改注:    query 表示查詢    update 表示修改    Lambda 表示內部支援 Lambda 寫法。形如:    query().eq("column", value).one();    lambdaQuery().eq(Entity::getId, value).list();    update().eq("column", value).remove();    lambdaUpdate().eq(Entity::getId, value).update(entity);
條件構造器(Wrapper,定義 where 條件)
Wrapper  條件構造抽象類    -- AbstractWrapper 查詢條件封裝,用於生成 sql 中的 where 語句。        -- QueryWrapper Entity 物件封裝操作類,用於查詢。        -- UpdateWrapper Update 條件封裝操作類,用於更新。    -- AbstractLambdaWrapper 使用 Lambda 表示式封裝 wrapper        -- LambdaQueryWrapper 使用 Lambda 語法封裝條件,用於查詢。        -- LambdaUpdateWrapper 使用 Lambda 語法封裝條件,用於更新。

常用條件:

【通用條件:】【比較大小: ( =, <>, >, >=, <, <= )】    eq(R column, Object val); // 等價於 =,例: eq("name", "老王") ---> name = '老王'    ne(R column, Object val); // 等價於 <>,例: ne("name", "老王") ---> name <> '老王'    gt(R column, Object val); // 等價於 >,例: gt("name", "老王") ---> name > '老王'    ge(R column, Object val); // 等價於 >=,例: ge("name", "老王") ---> name >= '老王'    lt(R column, Object val); // 等價於 <,例: lt("name", "老王") ---> name < '老王'    le(R column, Object val); // 等價於 <=,例: le("name", "老王") ---> name <= '老王'    【範圍:(between、not between、in、not in)】   between(R column, Object val1, Object val2); // 等價於 between a and b, 例: between("age", 18, 30) ---> age between 18 and 30   notBetween(R column, Object val1, Object val2); // 等價於 not between a and b, 例: notBetween("age", 18, 30) ---> age not between 18 and 30   in(R column, Object... values); // 等價於 欄位 IN (v0, v1, ...),例: in("age",{1,2,3}) ---> age in (1,2,3)   notIn(R column, Object... values); // 等價於 欄位 NOT IN (v0, v1, ...), 例: notIn("age",{1,2,3}) ---> age not in (1,2,3)   inSql(R column, Object... values); // 等價於 欄位 IN (sql 語句), 例: inSql("id", "select id from table where id < 3") ---> id in (select id from table where id < 3)   notInSql(R column, Object... values); // 等價於 欄位 NOT IN (sql 語句)   【模糊匹配:(like)】    like(R column, Object val); // 等價於 LIKE '%值%',例: like("name", "王") ---> name like '%王%'    notLike(R column, Object val); // 等價於 NOT LIKE '%值%',例: notLike("name", "王") ---> name not like '%王%'    likeLeft(R column, Object val); // 等價於 LIKE '%值',例: likeLeft("name", "王") ---> name like '%王'    likeRight(R column, Object val); // 等價於 LIKE '值%',例: likeRight("name", "王") ---> name like '王%'    【空值比較:(isNull、isNotNull)】    isNull(R column); // 等價於 IS NULL,例: isNull("name") ---> name is null    isNotNull(R column); // 等價於 IS NOT NULL,例: isNotNull("name") ---> name is not null【分組、排序:(group、having、order)】    groupBy(R... columns); // 等價於 GROUP BY 欄位, ..., 例: groupBy("id", "name") ---> group by id,name    orderByAsc(R... columns); // 等價於 ORDER BY 欄位, ... ASC, 例: orderByAsc("id", "name") ---> order by id ASC,name ASC    orderByDesc(R... columns); // 等價於 ORDER BY 欄位, ... DESC, 例: orderByDesc("id", "name") ---> order by id DESC,name DESC    having(String sqlHaving, Object... params); // 等價於 HAVING ( sql語句 ), 例: having("sum(age) > {0}", 11) ---> having sum(age) > 11【拼接、巢狀 sql:(or、and、nested、apply)】   or(); // 等價於 a or b, 例:eq("id",1).or().eq("name","老王") ---> id = 1 or name = '老王'   or(Consumer<Param> consumer); // 等價於 or(a or/and b),or 巢狀。例: or(i -> i.eq("name", "李白").ne("status", "活著")) ---> or (name = '李白' and status <> '活著')   and(Consumer<Param> consumer); // 等價於 and(a or/and b),and 巢狀。例: and(i -> i.eq("name", "李白").ne("status", "活著")) ---> and (name = '李白' and status <> '活著')   nested(Consumer<Param> consumer); // 等價於 (a or/and b),普通巢狀。例: nested(i -> i.eq("name", "李白").ne("status", "活著")) ---> (name = '李白' and status <> '活著')   apply(String applySql, Object... params); // 拼接sql(若不使用 params 引數,可能存在 sql 注入),例: apply("date_format(dateColumn,'%Y-%m-%d') = {0}", "2008-08-08") ---> date_format(dateColumn,'%Y-%m-%d') = '2008-08-08'")   last(String lastSql); // 無視最佳化規則直接拼接到 sql 的最後,可能存若在 sql 注入。   exists(String existsSql); // 拼接 exists 語句。例: exists("select id from table where age = 1") ---> exists (select id from table where age = 1)   【QueryWrapper 條件:】    select(String... sqlSelect); // 用於定義需要返回的欄位。例: select("id", "name", "age") ---> select id, name, age    select(Predicate<TableFieldInfo> predicate); // Lambda 表示式,過濾需要的欄位。    lambda(); // 返回一個 LambdaQueryWrapper    【UpdateWrapper 條件:】    set(String column, Object val); // 用於設定 set 欄位值。例: set("name", null) ---> set name = null    etSql(String sql); // 用於設定 set 欄位值。例: setSql("name = '老李頭'") ---> set name = '老李頭'    lambda(); // 返回一個 LambdaUpdateWrapper

19
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 醒醒!Python已經支援中文變數名啦