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
再次測試插入方法,先把實體類同步
方法二:代碼級別
刪除數據庫的默認值,更新操作
實體類字段屬性上需要增加注釋
編寫處理器處理注解
測試插入
樂觀鎖
樂觀鎖:顧名思義,總是十分樂觀,總是認為不會出現問題,無論干什么都不去上鎖,如果出現了問題,再次更新測試(version ,new version)
悲觀鎖:顧名思義,總是十分悲觀,總是認為會出現問題,無論干什么都會上鎖,再去操作。
意圖:
當要更新一條記錄的時候,希望這條記錄沒有被別人更新
樂觀鎖實現方式:
取出記錄時,獲取當前version
更新時,帶上這個version
執行更新時, set version = newVersion where version = oldVersion
如果version不對,就更新失敗
測試MP的樂觀鎖插件
數據庫增加version字段
實體類增加對應的字段
注冊組件
測試一下
//測試樂觀鎖成功@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內置的分頁插件
步驟:
配置攔截器組件
直接使用page對象即可
刪除操作
//測試刪除@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實體類中增加屬性
配置
測試刪除
記錄依舊在數據庫,但是值已經發生了變化
總結
以上是生活随笔為你收集整理的mybatisplus查询今天的数据_MybatisPlus(CRUD)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue实现多行数据提交_2020年大厂面
- 下一篇: word2003快速排版工具栏_干货分享