java - 通用 CRUD(增、刪、改、查)工具類,代碼高效復用

?

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。

1. 基本 CRUD 方法實現:

package com.xxx.xxx.ls.xxx.utils;import com.alibaba.fastjson.JSON;
import com.google.common.collect.ImmutableMap;
import com.xxx.xxx.ls.xxx.dto.LSResultDTO;
import com.xxx.xxx.ls.xxx.model.BaseModel;
import com.xxx.xxx.ls.xxx.dto.BaseDTO;
import com.xxx.xxx.ls.xxx.dto.LSExceptionResultDTO;
import com.xxx.xxx.ls.xxx.enums.ResponseStatusEnum;
import com.xxx.xxx.ls.xxx.exceptions.InstitutionException;
import com.xxx.xxx.ls.xxx.model.BaseInfo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.cxf.common.util.CollectionUtils;
import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.entity.Example;import java.util.Date;
import java.util.List;@Slf4j
public class BaseMethodUtils {/*** 根據id查詢數據** @param id* @param tClass* @param mapper* @param <T>* @param <E>* @return*/public static <T, E> LSResultDTO<T> queryById(String id, Class<T> tClass, Mapper<E> mapper) {log.info("根據id查詢:{}", id);if (StringUtils.isBlank(id)) {return LSExceptionResultDTO.fail(ResponseStatusEnum.PARAMETERS_ERROR);}try {E e = mapper.selectByPrimaryKey(id);log.info("查詢的信息:{}", JSON.toJSONString(e));T t = JSON.parseObject(JSON.toJSONString(e), tClass);if (t == null) {return LSExceptionResultDTO.fail(ResponseStatusEnum.WRONG_CONFIGURATION);}return LSResultDTO.ok(t);} catch (Exception e) {return LSExceptionResultDTO.fail(ResponseStatusEnum.EXEC_FAILURE);}}/*** 查數據列表** @param tClass* @param mapper* @param <T>* @param <E>* @return*/public static <T, E> List<T> queryAll(Class<T> tClass, Mapper<E> mapper) {List<E> infoList = mapper.selectAll();return JsonTransUtils.list2OtherList(infoList, tClass);}/*** 根據條件查數據列表,條件為“等于”** @param tClass* @param eClass* @param map    封裝條件* @param mapper* @param <T>* @param <E>* @return*/public static <T, E> List<T> queryAll(Class<T> tClass, Class<E> eClass, ImmutableMap<String, Object> map, Mapper<E> mapper) {Example e = new Example(eClass);Example.Criteria criteria = e.createCriteria();map.forEach(criteria::andEqualTo);List<E> infoList = mapper.selectByExample(e);return JsonTransUtils.list2OtherList(infoList, tClass);}/*** 根據條件查單條數據** @param queryModel* @param tClass     返回類對象* @param eClass     數據庫映射類對象* @param mapper* @param <T>* @param <E>* @return*/public static <T, E> T queryOne(BaseModel queryModel, Class<T> tClass, Class<E> eClass, Mapper<E> mapper) {log.info("根據條件查詢一條,參數query:{}", JSON.toJSONString(queryModel));if (queryModel == null) {throw new InstitutionException(400, "請求參數有誤");}E e = JSON.parseObject(JSON.toJSONString(queryModel), eClass);E returnInfo = null;try {returnInfo = mapper.selectOne(e);} catch (Exception e1) {throw new InstitutionException(500, "執行異常,數據庫可能存在多個相同條件的數據");}if (returnInfo == null) {log.error("沒找到該條件的配置信息");throw new InstitutionException(404, "該條件的配置不存在");}return JSON.parseObject(JSON.toJSONString(returnInfo), tClass);}/*** 根據條件查詢列表** @param queryModel* @param eClass     映射類對象* @param tClass     返回類對象* @param mapper* @param <T>* @param <E>* @return*/public static <T, E> List<T> queryListByWhere(BaseModel queryModel, Class<E> eClass, Class<T> tClass, Mapper<E> mapper) {log.info("根據條件查詢,參數AppQuery:{}", JSON.toJSONString(queryModel));if (queryModel == null) {throw new InstitutionException(400, "請求參數有誤");}E e = JSON.parseObject(JSON.toJSONString(queryModel), eClass);List<E> infoList = mapper.select(e);if (CollectionUtils.isEmpty(infoList)) {log.error("沒找到該條件的配置信息");throw new InstitutionException(404, "該條件的配置不存在");}return JsonTransUtils.list2OtherList(infoList, tClass);}/*** 保存** @param baseDTO* @param eClass  映射類對象* @param mapper* @param <E>* @return*/public static <E extends BaseInfo> String save(BaseDTO baseDTO, Class<E> eClass, Mapper<E> mapper) {log.info("保存DTO:{}", JSON.toJSONString(baseDTO));if (baseDTO == null) {throw new InstitutionException(400, "請求參數異常");}try {E e = JSON.parseObject(JSON.toJSONString(baseDTO), eClass);e.setGmtCreate(new Date());e.setGmtUpdate(new Date());e.setUserCreate(baseDTO.getUserCreate());e.setUserUpdate(baseDTO.getUserCreate());mapper.insert(e);return e.getId();} catch (Exception e) {throw new InstitutionException(500, "保存失敗");}}/*** 保存,null值取數據庫默認值** @param baseDTO* @param eClass  映射類對象* @param mapper* @param <E>* @return*/public static <E extends BaseInfo> String saveSelective(BaseDTO baseDTO, Class<E> eClass, Mapper<E> mapper) {log.info("保存DTO:{}", JSON.toJSONString(baseDTO));if (baseDTO == null) {throw new InstitutionException(400, "請求參數異常");}try {E e = JSON.parseObject(JSON.toJSONString(baseDTO), eClass);e.setGmtCreate(new Date());e.setGmtUpdate(new Date());e.setUserCreate(baseDTO.getUserCreate());e.setUserUpdate(baseDTO.getUserCreate());mapper.insertSelective(e);return e.getId();} catch (Exception e) {throw new InstitutionException(500, "保存失敗");}}/*** 更新** @param baseDTO* @param eClass* @param mapper* @param <E>* @return*/public static <E extends BaseInfo> Integer update(BaseDTO baseDTO, Class<E> eClass, Mapper<E> mapper) {log.info("更新AppDTO:{}", JSON.toJSONString(baseDTO));if (baseDTO == null) {throw new InstitutionException(400, "請求參數異常");}if (StringUtils.isBlank(baseDTO.getId())) {throw new InstitutionException(400, "id不能為空");}try {E e = JSON.parseObject(JSON.toJSONString(baseDTO), eClass);e.setGmtUpdate(new Date());e.setUserUpdate(baseDTO.getUserUpdate());return mapper.updateByPrimaryKey(e);} catch (Exception e) {throw new InstitutionException(500, "更新失敗");}}/*** 更新,null值取數據庫默認值** @param baseDTO* @param eClass* @param mapper* @param <E>* @return*/public static <E extends BaseInfo> Integer updateSelective(BaseDTO baseDTO, Class<E> eClass, Mapper<E> mapper) {log.info("更新AppDTO:{}", JSON.toJSONString(baseDTO));if (baseDTO == null) {throw new InstitutionException(400, "請求參數異常");}if (StringUtils.isBlank(baseDTO.getId())) {throw new InstitutionException(400, "id不能為空");}try {E e = JSON.parseObject(JSON.toJSONString(baseDTO), eClass);e.setGmtUpdate(new Date());e.setUserUpdate(baseDTO.getUserUpdate());return mapper.updateByPrimaryKeySelective(e);} catch (Exception e) {throw new InstitutionException(500, "更新失敗");}}/*** 根據id刪除** @param id* @param mapper* @param <E>* @return*/public static <E> Integer deleteById(String id, Mapper<E> mapper) {log.info("刪除id:{}", id);return mapper.deleteByPrimaryKey(id);}
}

2. json 轉換類工具類:

package com.xxx.xxx.xxx.xxx.utils;import com.alibaba.fastjson.JSON;import java.util.ArrayList;
import java.util.List;public class JsonTransUtils{/***  轉為新列表(對象屬性名要相同)* @param originList 原列表* @param tClass 新列表類對象* @param <T>* @return*/public static <T> List<T> list2OtherList(List originList,Class<T> tClass){List<T> list = new ArrayList<>();for (Object info : originList) {T t = JSON.parseObject(JSON.toJSONString(info),tClass);list.add(t);}return list;}
}

3. sql 工具類:

package com.xxx.xxx.xxx.xxx.utils;import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import tk.mybatis.mapper.entity.Example;import java.lang.reflect.Field;@Slf4j
public class SqlUtils {/*** 封裝模糊查詢條件,排序條件(不排序傳“”或null)** @param t              封裝查詢條件類* @param orderByContent* @param <T>* @return* @throws IllegalAccessException*/public static <T> Example getSelectExample(T t, String orderByContent) throws IllegalAccessException {Example example = new Example(t.getClass());Example.Criteria criteria = example.createCriteria();if (!StringUtils.isBlank(orderByContent)) {example.setOrderByClause(orderByContent);}Field[] declaredFields = t.getClass().getDeclaredFields();for (Field field : declaredFields) {field.setAccessible(true);if (field.get(t) != null && !"serialVersionUID".equals(field.getName())) {criteria.andLike(field.getName(), "%" + field.get(t).toString() + "%");}}return example;}
}

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/447683.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/447683.shtml
英文地址,請注明出處:http://en.pswp.cn/news/447683.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CSS文本溢出顯示省略號

項目中常常有這種需要我們對溢出文本進行"..."顯示的操作&#xff0c;單行多行的情況都有&#xff08;具體幾行得看設計師心情了&#xff09;&#xff0c;這篇隨筆是我個人對這種情況解決辦法的歸納&#xff0c;歡迎各路英雄指教。 單行 語法 overflow:hidden;text-o…

@JsonFormat Date類型時間 格式化 注解 使用

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 JsonFormat注解是一個時間格式化注解&#xff0c;比如我們存儲在mysql中的數據是date類型的&#xff0c;當我們讀取出來封裝在實體類中的…

好用的在線工具

1.在線工具 http://tool.oschina.net/ 網站里面包含很多強大的工具&#xff0c;代碼對比&#xff0c;正則表達式在線驗證&#xff0c;各種語言的語法對照表等。 2.so JSON在線工具 https://www.sojson.com/ 這個網站可能更加偏向前端一些吧&#xff0c;里面有一些加密解密&…

解決 Idea 卡在 Resolving Maven dependencies ...

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 Idea卡在Resolving Maven dependencies的解決方案 在Reimpot All Maven Porjects時, 如果項目過大, maven依賴過多, 會直接卡在Resolvin…

VS Code (visual studio code) VSC 編輯器(微軟出品,js開發的編輯器)

一.選擇合適的編輯器&#xff0c;提高編程效率 代碼編輯器的選擇&#xff0c;可以說是開發者社區中一個經久不衰的話題&#xff0c;現今編輯器的數量數不勝數&#xff0c;vim&#xff0c;sublime Text,Emacs,Atom等等&#xff0c;那么對于一個開發者而言&#xff0c;挑選一個合…

Docker 安裝 redis 、Redis docker 方式部署

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 找鏡像&#xff1a; docker search redis2. 拉取鏡像&#xff1a; 在這一步可以選擇版本&#xff0c;不選擇版本&#xff0c;默認為…

xcode windows版安裝使用教程

隨著iPhone、iPad、Mac等蘋果產品越來越火爆&#xff0c;越來越多的初學者想要了解和嘗試蘋果平臺&#xff0c;包括蘋果操作系統Mac OS X、蘋果演示軟件Keynote、蘋果開發工具Xcode等。然而&#xff0c;蘋果電腦價格昂貴&#xff0c;并不是每個人都可以承受。 因此&#xff0c;…

解決:Unable to open debugger port (127.0.0.1:55017): java.net.SocketException “Socket closed“

項目以前啟動正常&#xff0c;突然報錯&#xff0c;啟動不起來了&#xff0c;報了個Unable to open debugger port (127.0.0.1:55017): java.net.SocketException "Socket closed"這個錯。 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;…

html5 如何打包成apk,將H5封裝成android應用APK文件的幾種方法

直接使用編程軟件提供的方法&#xff1a; 1、需要下載安裝MyEclipse2014&#xff0c;Android SDK&#xff0c;eclipse(需配置Android開發環境) Java和Android環境安裝與配置。 2、打開MyEclipse2014&#xff0c;新建一個HTML5 Mobile Application Project&#xff0c;命名&…

解決 Unmapped Spring configuration files found.Please configure Spring facet.

最近在學習使用IDEA工具&#xff0c;覺得與Eclipse相比&#xff0c;還是有很多的方便之處。 但是&#xff0c;當把自己的一個項目導入IDEA之后&#xff0c;Event Log提示“Unmapped Spring configuration files found.Please configure Spring facet.” 這個提示不影響工程正…

uni-app—從安裝到卸載

uni-app實現了一套代碼&#xff0c;同時運行到多個平臺。支持iOS模擬器、Android模擬器、H5、微信開發者工具、支付寶小程序Studio、百度開發者工具、字節跳動開發者工具 工具安裝 開發uni-app需要安裝HBuilder X.下載地址。 下載成功后直接解壓即可 簡單的配置一下開發偏好&am…

jenkins 執行構建 并查看結果

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 繼完成構建項目配置http://www.cnblogs.com/yajing-zh/p/5111060.html后&#xff0c;則要執行構建。 回到jenkins主頁之后&#xff0c;…

使用jquery獲取url及url參數的方法

使用jquery獲取url以及使用jquery獲取url參數是我們經常要用到的操作 1、jquery獲取url很簡單&#xff0c;代碼如下&#xff1a; window.location.href; 其實只是用到了javascript的基礎的window對象&#xff0c;并沒有用jquery的知識。 2、jquery獲取url參數比較復雜&#xff…

js 遍歷對象的幾種方法

第一種&#xff1a; for......in const obj {id:1,name:zhangsan,age:18}for(let key in obj){console.log(key --- obj[key])} 輸出結果&#xff1a; 第二種&#xff1a; 1&#xff09;、Object.keys&#xff08;obj&#xff09; 2&#xff09;、Object.values&#xff08…

你辛苦來人間一趟,不是來作任務的,你應該好好享受陽光、雨露和愛 ...

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 摘記以下格言&#xff0c;愿已今生不忘&#xff1a;------------------------------------------------------- 1) 忽視就是一種認輸。 …

人生五不為

人生如若以百年算&#xff0c;除去童年和老年&#xff0c;一般也有60多年的活躍期。在這活躍期中&#xff0c;人們要求學擇業、要成家育子、要做許許多多的事情&#xff0c;同時也被人世間的不少因素所困擾。這些因素都有哪些呢&#xff1f;不外乎是&#xff1a;名、利、錢、情…

解決:Intellij idea 啟動項目報錯 error:java: 無效的源發行版: 8

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1.我的情況&#xff1a; 我自已電腦環境變量配置的 JDK8 &#xff0c;后來公司項目沿用 JDK7&#xff0c;我就換回了 7 。 今天打算運行…

補腎分男女,養腎如養命

腎虛是一個籠統的名詞&#xff0c;主要區分為腎陽虛和腎陰虛&#xff0c;這兩個癥形表現不一樣。 腎陽虛的病人畏寒怕冷浮腫&#xff0c;腰腿冷痛、尿頻、慢性腹瀉伴有性功能失常的表現&#xff0c;陽萎、遺精、早泄。 腎陰虛的病人主要是面容憔悴、腰背酸痛、下肢無力&#…

vscode 編輯器快捷鍵

代碼段同時縮進&#xff1a; 選中代碼段&#xff0c;按下tab鍵可以同時時代碼縮進。 先按下shifttab鍵可以取消縮進&#xff0c;向前移動。 轉載于:https://www.cnblogs.com/150536FBB/p/11555744.html

簡述 maven 命令 package、install、deploy 的區別

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 原文有圖片說明命令運行過程&#xff0c;我只記錄最終結論&#xff1a; 區別即&#xff1a; package &#xff1a;打包&#xff08;到項…