1-1 MyBatis與JPA對比
image.png
image.png
image.png
1-2 MyBatis-Plus簡介
image.png
image.png
image.png
image.png
2-1 通用傳統(tǒng)模式簡介及通用mapper新增方法
image.png配置文件
image.png通用mapper方法大綱
image.png
2-2 常用注解
1.@TableName 表名映射
數(shù)據(jù)庫名不同,在類上增加@TableName("mp_user")
2.@TableId 主鍵映射
主鍵ID的駝峰一般無法識別,在主鍵屬性上增加@TableId
3.@TableField 字段映射
屬性與字段名不相同,在屬性上增加@TableField("name")
當表名為 mp_user 時,在不改變 實體類的名字的情況下,通過添加 @TableName(“表名mp_user”)的方式來指定對應的數(shù)據(jù)庫表名,以此解決在不編寫sql語句的情況下,實體類的名字與數(shù)據(jù)庫表名不一致而導致無法進行表操作的問題。
image.png
2-3 排除非表字段的三種方式
第一種:
添加 transient 標識 某一字段不參與實例化過程,一般用于過渡字段,在數(shù)據(jù)庫表中沒有對應的字段,如果直接添加而進行實例化的排除, 會被自動進行映射到數(shù)據(jù)庫表中,而由于沒有對應的字段,會報錯。
image.png第二種:
將要排除的字段聲明為靜態(tài)變量,手動創(chuàng)建 對應的靜態(tài)GET/SET 方法,靜態(tài)的屬性的靜態(tài)方法只能使用類進行調(diào)用,此時,實例化的過程會將該靜態(tài)字段排除掉,在調(diào)用 MP 進行映射時不會被映射進去
image.png第三種:
使用 @TableField(exist=false)標識當前變量不是數(shù)據(jù)庫表中的字段,這種情況下,該屬性不會被映射到數(shù)據(jù)庫中
image.png
3-1 普通查詢
普通查詢方法:
1、List<T> selectBatch(List<T> ids)
2、List<T> selectByMap(Map<key,value> map)
PS:map中的key為數(shù)據(jù)庫中的列名(如果輸入的是實體類中的屬性名會報錯)、value是列對應的值
image.pngselectById 普通查詢
selectBatchIds 多個值查詢 Arrays.asList()
selectByMap 條件查詢 Map的key為字段,生成的語句為where name= ? and age=?
selectBatchIds(@Param(Constants.COLLECTION)Collection<? extends Serializable> idList);
根據(jù)id集合獲取對象集合list
Arrays.asList(id1,id2)
將list集合參數(shù)進行forEach輸出:
userList.forEach(System.out::println);
image.png
3-2 條件構造器查詢
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
3-3 select不列出全部字段
選擇查詢表中的字段
select(字段1,字段2) 選擇字段返回,select可以寫在queryWrapper后面:
image.pngselect排除某些字段
去除某些列名的數(shù)據(jù)返回
.select(User.class, info->!info.getColumn().equals("create_time")&&
!info.getColumn().equals("email"));
數(shù)據(jù)返回create_time和email
image.png
3-4 condition作用
like(condition,"字段",value) 判定哪個字段不為空時,進行判定,
與原mybatis中的
<if test="focus_count != null ">
是一個道理,那么在這里,其實跟if test 比較起來,也差不多,
if test 需要寫兩遍 上判定,下判定
同樣的在mp中的寫法 寫得也算簡短了
image.png如果判定isNotEmpty為true,則進行該字段的對比查詢
如果返回false,說明這個字段為空,不進行按此字段查詢
image.png
3-5 實體作為條件構造器構造方法的參數(shù)
image.png實體對象中設置名字的模糊查詢
不想設定等值搜索,將這里設定注解 condition.
image.png年齡小于的注入
image.png
3-6 AllEq用法
allEq的用法
image.png
image.pngallEq第二個參數(shù)設定false,值為null的忽略掉
image.png忽略如果鍵為name時的查詢參數(shù)
image.png
3-7 其他使用條件構造器的方法
以map的形式,比實體類的優(yōu)勢在于選擇查詢時,不會有那么多null的字段鍵返回.
image.png
image.pngselectOne只能查返回數(shù)據(jù)中僅一條的
image.pngimage.pngimage.png
3-8 lambda條件構造器
Lambda表達式查詢方式
三種Lambda表達式創(chuàng)建方式
image.png使用lambda表達式進行l(wèi)ike和lt的搜索
防止編譯的錯誤
image.png使用Lambda查詢多條件
提供了防誤寫功能,寫錯就報錯,防止編譯的錯誤
image.pngimage.png
4-1 自定義sql
自定義SQL的兩種方式:
第一種: 使用自定義注解 的方式實現(xiàn),在 dao 層的方法上使用@Select (“sql 語句”)的方式編寫 sql 語句,會自動映射到數(shù)據(jù)庫表中
image.png第二種: 使用創(chuàng)建 mapper.xml 的方式來創(chuàng)建 配置文件,通過在配置文件中 創(chuàng)建 sql 語句,并配置 namespace 名稱空間,指向有效的 dao 層,從而實現(xiàn)數(shù)據(jù)的映射
image.png使用第二種需要對application.yml文件進行配置
image.png
4-2 分頁查詢
分頁查詢 :
分頁插件配置類: 創(chuàng)建 MybatisPlusConfig類,注入到 Spring中進行管理
image.png分頁查詢的第一種方式:
使用userMapper.selectPage(page,data);返回結果為 實體類 javabean
image.png分頁查詢的第二種方式:
使用userMapper.selectPage(page,data);返回結果為 Map<String,Object>集合類
image.pngimage.png
image.png
5-1 更新方法
updateById
image.pngupdateWrapper
image.pngupdateWrapper2
image.pngupdateWrapper3
image.pngupdateWrapperLambda
image.pngupdateWrapperLambdaChain
image.png
5-2 刪除方法
deleteById
image.pngdeleteByMap
image.pngdeleteBatchIds
image.pngdeleteByWrapper
image.png
6-1 AR模式
AR模式的使用:
條件1:
必須存在對應的原始mapper并繼承Model<User> 泛型類,并配置相應類注解,
同時申明序列號 serialVersionUID = 1L
image.png條件2:
在 mapper 接口 中要 繼承 BaseMapper<Object.class> 泛型類
image.png
6-2 基本配置
創(chuàng)建mybatis-config.xml 配置文件
image.png
image.pngimage.png
7-1 通用service
service所有方法
image.png
image.png
image.png






































































