Mybatis-plus详解
生活随笔
收集整理的這篇文章主要介紹了
Mybatis-plus详解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
導入依賴
常用注解
@TableName 用于定義表名@TableId 用于定義表的主鍵@TableField 用于定義表的非主鍵字段。
@Version 用于字段實現樂觀鎖
@TableLogic ? ? ? ? ? 用于定義表的字段進行邏輯刪除(非物理刪除)
查詢操作
刪除
新增,修改
條件構造器(Wrapper)
常用條件
【比較大小: ( =, <>, >, >=, <, <= )】
【范圍:(between、not between、in、not in)】
【模糊匹配:(like)】
【空值比較:(isNull、isNotNull)】
【分組、排序:(group、having、order)】
【拼接、嵌套 sql:(or、and、nested、apply)】
【QueryWrapper 條件:】
【UpdateWrapper 條件:】
導入依賴
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mybatis-plus.boot.version}</version></dependency>常用注解
@TableName 用于定義表名
@TableId 用于定義表的主鍵
@TableField 用于定義表的非主鍵字段。
@Version 用于字段實現樂觀鎖
@TableLogic ? ? ? ? ? 用于定義表的字段進行邏輯刪除(非物理刪除)
查詢操作
// 根據 ID 查詢 T selectById(Serializable id); // 根據 entity 條件,查詢一條記錄 T selectOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);// 查詢(根據ID 批量查詢) List<T> selectBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList); // 根據 entity 條件,查詢全部記錄 List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper); // 查詢(根據 columnMap 條件) List<T> selectByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap); // 根據 Wrapper 條件,查詢全部記錄 List<Map<String, Object>> selectMaps(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper); // 根據 Wrapper 條件,查詢全部記錄。注意: 只返回第一個字段的值 List<Object> selectObjs(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);// 根據 entity 條件,查詢全部記錄(并翻頁) IPage<T> selectPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper); // 根據 Wrapper 條件,查詢全部記錄(并翻頁) IPage<Map<String, Object>> selectMapsPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper); // 根據 Wrapper 條件,查詢總記錄數 Integer selectCount(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);刪除
// 根據 entity 條件,刪除記錄 int delete(@Param(Constants.WRAPPER) Wrapper<T> wrapper); // 刪除(根據ID 批量刪除) int deleteBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList); // 根據 ID 刪除 int deleteById(Serializable id); // 根據 columnMap 條件,刪除記錄 int deleteByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);新增,修改
int insert(T entity);int updateById(@Param("et") T entity);int update(@Param("et") T entity, @Param("ew") Wrapper<T> updateWrapper);想要查看執(zhí)行的 sql 語句,可以在 yml 文件中添加配置信息,如下。
mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl條件構造器(Wrapper)
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 30notBetween(R column, Object val1, Object val2); // 等價于 not between a and b, 例: notBetween("age", 18, 30) ---> age not between 18 and 30in(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 nullisNotNull(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,nameorderByAsc(R... columns); // 等價于 ORDER BY 字段, ... ASC, 例: orderByAsc("id", "name") ---> order by id ASC,name ASCorderByDesc(R... columns); // 等價于 ORDER BY 字段, ... DESC, 例: orderByDesc("id", "name") ---> order by id DESC,name DESChaving(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); // 無視優(yōu)化規(guī)則直接拼接到 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, ageselect(Predicate<TableFieldInfo> predicate); // Lambda 表達式,過濾需要的字段。lambda(); // 返回一個 LambdaQueryWrapper【UpdateWrapper 條件:】
set(String column, Object val); // 用于設置 set 字段值。例: set("name", null) ---> set name = nullsetSql(String sql); // 用于設置 set 字段值。例: setSql("name = '老李頭'") ---> set name = '老李頭'lambda(); // 返回一個 LambdaUpdateWrapperLambda 條件構造器
@Test public void selectLambda(){LambdaQueryWrapper<User> lambda =new Wrapper.<User>lambdaQuery();lambda.like(User::getName,"雨").lt(User::getAge,40); //寫錯會直接爆紅List<user> userList =userMapper.selectList(lambdaQuery);userList.forEach(System.out::println); }總結
以上是生活随笔為你收集整理的Mybatis-plus详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS 16 Beta 2新增流量备份i
- 下一篇: REVERSE-COMPETITION-