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.mzph.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;到项…