日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

mybatisplus查询今天的数据_MybatisPlus(CRUD)

發布時間:2025/1/21 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mybatisplus查询今天的数据_MybatisPlus(CRUD) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

插入功能

//測試插入@Testpublic void testInsert(){ User user = new User(); user.setName("ironman"); user.setAge(3); user.setEmail("123456@qq.com"); System.out.println(user); System.out.println("======================"); System.out.println(userMapper.insert(user));//會自動生成id,并回填}

數據庫默認插入的id為:全局的唯一id

主鍵生成策略

分布式系統唯一id生成:https://www.cnblogs.com/liujianping/p/10401842.html

雪花算法:

snowflake是Twitter開源的分布式ID生成算法,結果是一個long型的ID。其核心思想是:使用41bit作為毫秒數,10bit作為機器的ID(5個bit是數據中心,5個bit的機器ID),12bit作為毫秒內的流水號(意味著每個節點在每毫秒可以產生 4096 個 ID),最后還有一個符號位,永遠是0。

主鍵自增

  • 實體類字段上添加@TableId(type = IdType.AUTO)

  • 數據庫字段一定得是自增

  • 這兩個條件缺一不可,否則就會報錯

  • 再次插入實現自增

  • 其余的源碼解釋

    public enum IdType { AUTO(0), //數據庫id自增 NONE(1), //未設置主鍵 INPUT(2), //手動輸入 ASSIGN_ID(3), ASSIGN_UUID(4), /** @deprecated */ @Deprecated ID_WORKER(3), //默認的全局唯一id /** @deprecated */ @Deprecated ID_WORKER_STR(3), //ID_WORKER字符串表示法 /** @deprecated */ @Deprecated UUID(4); //全局唯一id}

    更新操作

    //測試更新 @Test public void testUpdate(){ User user = new User(); //通過條件自動拼接動態SQL user.setId(1L); user.setName("i m ironman"); // 雖然名字是byID,但是實際上參數是一個對象 System.out.println(userMapper.updateById(user)); }

    所有的SQL都是自動的進行動態設置

    自動填充

    創建時間,修改時間!這些個操作一般都是自動化完成的,我們不希望手動更新。(gmt_create,gmt_modified)

    方式一:數據庫級別

  • 在表中新增字段create_time,update_time

  • 再次測試插入方法,先把實體類同步

  • private?Date?createTime;private?Date?updateTime;

    方法二:代碼級別

  • 刪除數據庫的默認值,更新操作

  • 實體類字段屬性上需要增加注釋

  • //字段添加填充內容@TableField(fill = FieldFill.INSERT)private Date createTime;@TableField(fill = FieldFill.INSERT_UPDATE)private Date updateTime;
  • 編寫處理器處理注解

  • package com.zhang.mybatis_plus.handler;import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;import lombok.extern.slf4j.Slf4j;import org.apache.ibatis.reflection.MetaObject;import org.springframework.stereotype.Component;import java.util.Date;import static jdk.nashorn.internal.runtime.regexp.joni.Config.log;@Slf4j@Componentpublic class MyMetaObjectHandler implements MetaObjectHandler { //插入是的更新策略 @Override public void insertFill(MetaObject metaObject) { log.info("start insert ......."); //setFieldValByName(String fieldName, Object fieldVal, MetaObject metaObject) this.setFieldValByName("createTime",new Date(),metaObject); this.setFieldValByName("updateTime",new Date(),metaObject); } //更新時的填充策略 @Override public void updateFill(MetaObject metaObject) { this.setFieldValByName("updateTime",new Date(),metaObject); }}
  • 測試插入

  • 樂觀鎖

    樂觀鎖:顧名思義,總是十分樂觀,總是認為不會出現問題,無論干什么都不去上鎖,如果出現了問題,再次更新測試(version ,new version)

    悲觀鎖:顧名思義,總是十分悲觀,總是認為會出現問題,無論干什么都會上鎖,再去操作。

    意圖:

    當要更新一條記錄的時候,希望這條記錄沒有被別人更新

    樂觀鎖實現方式:

    • 取出記錄時,獲取當前version

    • 更新時,帶上這個version

    • 執行更新時, set version = newVersion where version = oldVersion

    • 如果version不對,就更新失敗

    樂觀鎖:1.先查詢,獲得版本號 version =1 ----線程Aupdate user set name = "ironman",version = version + 1 where id = 2 and version = 1 ----線程B搶先完成,這個時候version = 2,會導致A線線程修改失敗update user set name = "ironman",version = version + 1 where id = 2 and version = 1

    測試MP的樂觀鎖插件

  • 數據庫增加version字段

  • 實體類增加對應的字段

  • @Version //代表樂觀鎖注解private Integer version;
  • 注冊組件

  • package com.zhang.mybatis_plus.config;import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;import org.mybatis.spring.annotation.MapperScan;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.transaction.annotation.EnableTransactionManagement;@MapperScan("com.zhang.mybatis_plus.mapper")@EnableTransactionManagement@Configuration //配置類public class MybatisPlusConfig { //注冊樂觀鎖插件 @Bean public OptimisticLockerInterceptor optimisticLockerInterceptor(){ return new OptimisticLockerInterceptor(); }}

    測試一下

    //測試樂觀鎖成功@Testpublic void testOptimisticLocker(){ //1.查詢用戶信息 User user = userMapper.selectById(1L); //2.修改用戶信息 user.setName("zhang"); user.setEmail("123456@qq.com"); //3. 執行更新操作 userMapper.updateById(user);}//測試樂觀鎖失敗@Testpublic void testOptimisticLocker2(){ //線程1 //1.查詢用戶信息 User user = userMapper.selectById(1L); //2.修改用戶信息 user.setName("zhang"); user.setEmail("123456@qq.com"); //線程2 //1.查詢用戶信息 User user2 = userMapper.selectById(1L); //2.修改用戶信息 user2.setName("zhangxi"); user2.setEmail("123456@qq.com"); //3. 執行更新操作 userMapper.updateById(user2); userMapper.updateById(user);//如果沒有樂觀鎖,就會覆蓋插隊線程的值}

    查詢操作

    //測試查詢@Testpublic void testSelectById(){ /*User user = userMapper.selectById(1L); System.out.println(user);*/ //批量查詢 List users = userMapper.selectBatchIds(Arrays.asList(1,2,3)); users.forEach(System.out::println);}//測試條件查詢@Testpublic void testSelectById3(){ HashMapmap = new HashMap<>(); //自定義查詢 map.put("name","Jack"); List users = userMapper.selectByMap(map); users.forEach(System.out::println);}

    分頁查詢

  • 原始的limit分頁

  • pageHelper第三方插件

  • MP內置的分頁插件

  • 步驟:

  • 配置攔截器組件

  • @Bean public PaginationInterceptor paginationInterceptor() { PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); // 設置請求的頁面大于最大頁后操作, true調回到首頁,false 繼續請求 默認false // paginationInterceptor.setOverflow(false); // 設置最大單頁限制數量,默認 500 條,-1 不受限制 // paginationInterceptor.setLimit(500); // 開啟 count 的 join 優化,只針對部分 left join paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true)); return paginationInterceptor; }
  • 直接使用page對象即可

  • //測試分頁查詢@Testpublic void testPage(){ //參數1:當前頁 //參數2:頁面大小 Page page = new Page<>(1, 5); userMapper.selectPage(page,null); page.getRecords().forEach(System.out::println); System.out.println(page.getTotal());}

    刪除操作

    //測試刪除@Testpublic void testDeleteById(){ userMapper.deleteById(1287313900072681476L);}//批量刪除@Testpublic void testDeleteBatchId(){ userMapper.deleteBatchIds(Arrays.asList(1287313900072681477L,1287313900072681478L));}//map刪除@Testpublic void testDeleteMap(){ HashMapmap = new HashMap<>(); map.put("name","ironman"); userMapper.deleteByMap(map);}

    邏輯刪除

    物理刪除:從數據庫中直接移除

    邏輯刪除:在數據庫中隱藏,沒有被移除,而是通過一個變量來讓他失效!deleted =0 ==》 deleted=1

    管理員可以查看被刪除的記錄!防止數據的丟失,類似于回收站!

    測試:

  • 在數據庫字段中添加deleted字段

  • pojo實體類中增加屬性

  • @TableLogic //邏輯刪除private Integer deleted;
  • 配置

  • //注冊bean,從3.1.1后,這一步已經不再需要@Beanpublic ISqlInjector sqlInjector(){ return new LogicSqlInjector();}mybatis-plus: global-config: db-config: logic-delete-field: flag # 全局邏輯刪除的實體字段名(since 3.3.0,配置后可以忽略不配置步驟2) logic-delete-value: 1 # 邏輯已刪除值(默認為 1) logic-not-delete-value: 0 # 邏輯未刪除值(默認為 0)
  • 測試刪除

  • 記錄依舊在數據庫,但是值已經發生了變化

    總結

    以上是生活随笔為你收集整理的mybatisplus查询今天的数据_MybatisPlus(CRUD)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 欧美偷拍亚洲 | 最近最经典中文mv字幕 | 天堂av2014 | 日本少妇久久 | va视频在线 | 成人午夜福利一区二区 | 成人91网站 | 午夜精品成人毛片非洲 | 色综合社区| 秋霞福利网 | 久久黄色片 | 国产美女视频 | 美女被c出白浆 | 国产对白在线 | 污视频网站在线 | 国产美女一区二区 | 在线视频播放大全 | 中文字幕高清视频 | 亚洲人成在线观看 | av在线资源站 | 欧美国产一二三区 | 日本一区二区色 | 欧美激情在线观看一区 | 久久久久久黄色 | 一区二区三区视频免费在线观看 | 国产91久久精品一区二区 | 精品一区二区中文字幕 | 91成品人影院 | 久久久国产精品黄毛片 | 亚洲成人久 | 日韩高清欧美 | 日本一二三区在线视频 | 欧美日性视频 | 欧美精品在线第一页 | 日韩高清影视 | 手机在线亚洲 | 快色视频| 丰满孕妇性春猛交xx大陆 | 色一情一区二区三区四区 | 偷拍xxxx| 欧美体内谢she精2性欧美 | 伊人一区 | 国产九色在线播放九色 | 欧美特级一级片 | 欧美在线免费视频 | 亚洲bb | 成人高清网站 | 女同爱爱视频 | 黄在线免费看 | 国产精品69毛片高清亚洲 | 日韩福利在线播放 | 久久婷婷精品 | 中文字幕有码无码人妻av蜜桃 | 国产拍拍视频 | 久久久噜噜噜久久中文字幕色伊伊 | 亚洲av永久中文无码精品综合 | 成人黄色激情小说 | 桃色一区 | 国产精品久久久久久久久绿色 | 亚洲一区电影网 | 激情五月综合网 | 欧美夜夜操 | 国产精品久久777777毛茸茸 | 午夜视频一区二区三区 | h片网站在线观看 | 日韩视频一 | 久久国产影视 | 青青草国产一区二区三区 | 日韩二级片| 一级性视频 | 亚洲免费视频观看 | 国产成人精品电影 | 欧美爱爱网址 | 手机在线永久免费观看av片 | 一级特黄bbbbb免费观看 | 国产欧美日韩综合精品一区二区 | 成年人网站黄 | 欧美日韩国产第一页 | 黄色片中国 | 国产又爽又黄的激情精品视频 | 五月婷婷小说 | 亚洲激情免费 | 丁香六月婷婷综合 | 国产1区2区3区 | 久久99精品久久久久久三级 | 亚洲三级黄色片 | va毛片 | 永久精品 | 香蕉视频一区二区 | 99热在线观看免费精品 | 夜夜免费视频 | 亚洲永久无码精品一区二区 | 国产性生活一级片 | 激情自拍偷拍 | 欧美精选一区二区 | 亚洲精品天堂网 | 久草一区二区 | 日本午夜视频 | 国产夫妻性生活 |