
java
Neic
思路决定出路。
展开
-
java对象为什么要序列化?
最近这段时间一直在忙着编写Java业务代码,麻木地搬着Ctrl-C、Ctrl-V的砖,在不知道重复了多少次定义Java实体对象时“implements Serializable”的C/V大法后,脑海中突然冒出一个思维(A):问了自己一句“Java实体对象为什么一定要实现Serializable接口呢?”,关于这个问题,脑海中的另一个思维(B)立马给出了回复“居然问这么幼稚和基础的问题,实现Serilizable接口是为了序列化啊!”,思维(A):“哦,好吧!然而,然后呢?”此时思维(B)陷入了沉默,突然转载 2022-03-04 17:36:07 · 1336 阅读 · 0 评论 -
mapstruct 遇到的问题
package com.xmeport.web.mapstruct;import com.xmeport.web.model.entity.nexp.EhsEntryHeadV1;import com.xmeport.web.model.vo.EhsEntryHeadV1VO;import org.mapstruct.Mapper;import org.mapstruct.Mapping;import org.mapstruct.factory.Mappers;/** * Desc...原创 2022-02-22 16:33:54 · 903 阅读 · 0 评论 -
excel 数据 解析、校验、导出
引入依赖 <!--表格导出工具POI--> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.17</version> </dependency>原创 2021-11-11 16:55:28 · 848 阅读 · 0 评论 -
后端对VO请求参数校验以及文件校验
控制层请求入参/** * 保存 */ @RequestMapping("/save") @ResponseBody public ApiResponses<Void> save(@RequestParam(value = "appCompanyCheckVOJson")String appCompanyCheckVOJson, //主表附件原创 2021-11-03 11:35:47 · 771 阅读 · 0 评论 -
开发附件页面:上传、下载、删除
附件页面:上传、下载、删除 fastDFs工具类原创 2021-10-20 16:58:41 · 632 阅读 · 0 评论 -
文件工具类 FileUtils :文件生成、备份、复制、删除
public class FileUtils { /** * 文件生成 * @param content * @param filePath * @param fileName */ public static void fileCreate(String content, String filePath, String fileName) { File file = new File(filePath); file.mkdirs(); FileWriter f.原创 2021-10-20 15:42:07 · 1040 阅读 · 0 评论 -
处理跨域照片的访问和文件下载
下载的事件<a href="javascript:void(0)" onclick="downFile(this)" th:value="${item.getTranLicFileId()}"><i class="fa fa-download ui-datepicker-trigger" style="top: 10px;"></i></a>/** 附件下载*/function downFile(e){ var id = $(e)..原创 2021-10-19 16:45:22 · 197 阅读 · 0 评论 -
Java后台如何根据路径地址下载文件?
public static final String HTTp_URL="http:下载链接"; public static void main(String[] args) { Dol(); } public static void Dol(){ BufferedInputStream bis=null; ..原创 2021-10-19 09:06:52 · 3387 阅读 · 0 评论 -
DateUtil
import org.apache.commons.lang3.StringUtils;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;public class DateUtil { /** * 取得当月天数 * */ public static int getCurrentMonthLastDay() { Calendar a = Calendar.getIns.原创 2021-07-02 10:53:20 · 548 阅读 · 0 评论 -
内网IP拦截器
package com.xmeport.project.config;import com.xmeport.framework.filter.XssFilter;import com.xmeport.project.interceptor.GetEntApiInterceptor;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.web.servlet.Fil.原创 2021-05-31 15:25:36 · 448 阅读 · 0 评论 -
从HttpServletRequest对象获取请求路径(拦截器使用)
String loginUrl="http://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/index";原创 2021-05-11 10:36:03 · 967 阅读 · 0 评论 -
事务手动回滚方式
方法1:在service层方法的catch语句中增加:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();语句,手动回滚,这样上层就无需去处理异常(现在项目的做法)方法2:例如service层处理事务,那么service中的方法中不做异常捕获,或者在catch语句中最后增加throw new RuntimeException()语句,以便让aop捕获异常再去回滚,并且在service上层(webservice转载 2021-04-29 15:46:45 · 6557 阅读 · 0 评论 -
文件上传 fastfds服务器
pom <!-- fastdfs --> <dependency> <groupId>net.oschina.zcx7878</groupId> <artifactId>fastdfs-client-java</artifactId> <version>1.27.0.0</version> .原创 2021-04-23 10:14:31 · 191 阅读 · 0 评论 -
开发细节:上传表单带文件
<div style="padding-top:10px "> <hr style="z-index: -1;"/> <p style="position: relative;width: 65px;padding-left:5px;margin-top: -27px;margin-bottom: -10px;z-index: 100; background-color:#f1f4f7"&...原创 2021-03-24 13:32:12 · 171 阅读 · 0 评论 -
easyExcel 上传并导入
控制层/** * excel导入 */ @RequestMapping(path = "/app-excel-import", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, method = RequestMethod.POST) @ResponseBody public ApiResponses<Void> excelImport(@RequestPart(name = "file") Mult原创 2021-01-26 15:32:01 · 338 阅读 · 0 评论 -
ResultMap复杂对象⼀对⼀查询结果映射之association
association: 映射到POJO的某个复杂类型属性,⽐如订单order对象⾥⾯包含 user对象<resultMap id="VideoOrderResultMap" type="VideoOrder"> <id column="id" property="id"/> <result column="user_id" property="userId"/> <result column="out_trade_no" property="outTr原创 2020-12-21 16:03:44 · 124 阅读 · 0 评论 -
忽略特殊字符串,比对两字符串是否相同
public class RegExTests { static String regEx = "[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?\\s*·\\uFF00-\\uFFFF]"; public static boolean businessEquals(String str1,String str2) { Pattern pattern = Patte.原创 2020-12-18 14:32:52 · 437 阅读 · 0 评论 -
如何利用注解创建Servlet3.0的web项目
在servlet3.0中,servlet、filter,listener不需要配置在web.xml文件中,可以直接通过注解的方式来实现。首先新建一个支持servlet3的web项目。 在servlet3中,我们可以不需要生成web.xml文件。 正在上传…重新上传取消 接下来我们发送一个servlet请求,新建一个页面: <%@ page language="java" contentType="text/html; charset=utf-8" p...转载 2020-12-15 16:48:55 · 317 阅读 · 0 评论 -
自定义分页
mapper.xml<mapper namespace="com.xmeport.web.mapper.nexpmanageplat.EhsEntryHeadMapper"> <select id="getStatisticsPage" parameterType="com.xmeport.web.model.vo.nexpmanageplat.EhsEntryHeadVO" resultType="com.xmeport.web.model.vo.nexpmanagepl.原创 2020-12-08 16:52:44 · 126 阅读 · 0 评论 -
ORA-01861: 文字与格式字符串不匹配
背景:因为业务不允许直接t.machine_date >= #{ehsEntryHeadVO.machineStartDate}比较,需要to_date来比较。aaa为java时间类型,下面这样写会报错to_date(#{aaa},'yyyy-mm-dd'),直接上解决办法:to_date(to_char(#{aaa}, 'yyyy-MM-dd'),'yyyy-mm-dd')代码示例: <if test="ehsEntryHeadVO..原创 2020-12-08 16:36:39 · 422 阅读 · 0 评论 -
读取Optional实例中的变量值的方法
get()是这些方法中最简单但又最不安全的方法。如果变量存在,它直接返回封装的变量值,否则就抛出一个NoSuchElementException异常。所以,除非你非常确定Optional变量一定包含值,否则使用这个方法是个相当糟糕的主意。此外,这种方式即便相对于嵌套式的null检查,也并未体现出多大的改进。 orElse(T other) 它允许你在Optional对象不包含值时提供一个默认值。 orElseGet(Supplier<? extend...原创 2020-12-02 10:10:21 · 1587 阅读 · 0 评论 -
<fmt:parseDate> 标签 yyyyMMddHHmmssSSS转yyyy-MM-dd HH:mm:ss SSS
后台返回'yyyyMMddHHmmssSSS'格式的字符串时间,先解析获得值,再转成需要的格式 <td> <fmt:parseDate value="${item.returnTime }" var="returnTime" pattern="yyyyMMddHHmmssSSS"/> <fmt:formatDate.原创 2020-11-19 13:17:15 · 552 阅读 · 0 评论 -
java 8 流的构建方式
本节将介绍如何从值序列、数组、文件来创建流,甚至由生成函数来创建无限流!由值创建流你可以使用静态方法Stream.of,通过显式值创建一个流。它可以接受任意数量的参数。例 如,以下代码直接使用Stream.of创建了一个字符串流。然后,你可以将字符串转换为大写,再 一个个打印出来:Stream stream = Stream.of("Java 8 ", "Lambdas ", "In ", "Action"); stream.map(String::toUpperCase).forEach原创 2020-11-17 18:12:34 · 133 阅读 · 0 评论 -
Java 8使用函数式接口
函数式接口 函数描述符 原始类型特化 Predicate<T> T->boolean IntPredicate,LongPredicate,DoublePredicate Consumer<T> T->void IntConsumer,LongConsumer,Doubl...原创 2020-11-10 17:10:29 · 219 阅读 · 1 评论 -
异步线程
public class SendMailTaskThread { private static Logger logger = LoggerFactory.getLogger(SendMailTaskThread.class); public static void startThread(String userId){ Runnable createEMS = new MyTask(userId); new Thread(createEMS).sta.原创 2020-11-09 18:24:00 · 581 阅读 · 0 评论 -
Java 8中有效的Lambda表达式
(String s) -> s.length()第一个Lambda表达式具有一个String类型的参 数并返回一个int。Lambda没有return语句, 因为已经隐含了return(Apple a) -> a.getWeight() > 150第二个Lambda 表达式有一个 Apple 类型的 参数并返回一 个boolean(苹 果的重量是否 超过150克)(int x, int y) -> { System.out.println("Res...原创 2020-11-09 10:59:03 · 640 阅读 · 1 评论 -
行为参数化
编写灵活的prettyPrintApple方法编写一个prettyPrintApple方法,它接受一个Apple的List,并可以对它参数化,以 多种方式根据苹果生成一个String输出(有点儿像多个可定制的toString方法)。例如,你 可以告诉 prettyPrintApple 方法,只打印每个苹果的重量。此外,你可以让 prettyPrintApple方法分别打印每个苹果,然后说明它是重的还是轻的。解决方案和我们 前面讨论的筛选的例子类似。为了帮你上手,我们提供了prettyPrintApple原创 2020-11-06 15:21:00 · 176 阅读 · 0 评论 -
java1.8--流
几乎每个Java应用都会制造和处理集合。但集合用起来并不总是那么理想。比方说,你需要 从一个列表中筛选金额较高的交易,然后按货币分组。你需要写一大堆套路化的代码来实现这个 数据处理命令,如下所示:Map<Currency, List<Transaction>> transactionsByCurrencies = new HashMap<>(); for(Transaction transaction :transactions){ if .原创 2020-11-05 16:43:02 · 184 阅读 · 0 评论 -
api接口实体增加校验注解
String类型 @NotBlank(message="XX不能为空") @Length(message = "XX最大长度为36位",max = 36) private String XX; /** * 申报业务类型 */ @TableField("FLAG") @NotBlank(message="类型不能为空") @Pattern(regexp = "A|B", message = "业务类型应该为A或B, .原创 2020-11-05 09:35:41 · 494 阅读 · 0 评论 -
Spring Boot validation整合hibernate validator实现数据验证
引言这里主要讲解在Spring Boot项目中整合hibernate validator框架实现Spring Boot项目的validation 验证机制。方便后端验证前端或者接口传递过来的数据格式是否正确。一.准备环境jdk1.8+(Spring Boot项目推荐使用1.8) eclipse(或者你喜欢的IDE) maven 3+二.编码实现Spring Boot validation2.1创建一个spring boot项目并添web模块和validation模块项目...转载 2020-11-04 17:07:00 · 567 阅读 · 0 评论 -
@PostConstruct
最近在公司项目中碰到了@PostConstruct这个注解,不解其意,查阅了下,总结如下:1、从Java EE5规范开始,Servlet中增加了两个影响Servlet生命周期的注解,@PostConstruct和@PreDestroy,这两个注解被用来修饰一个非静态的void()方法。写法有如下两种方式:@PostConstructpublic void someMethod(){}或者public @PostConstruct void someMethod(){}被@Pos.转载 2020-10-21 15:21:47 · 230 阅读 · 0 评论 -
oracle修改当前序列(DataGrip/PLSQL)
1.DataGrip 下无法修改通过图形界面修改,但可以通过执行下面sql语句来达到目的。-- 查询当前的序列select SEQ_SYS_OPER_LOG.currval from DUAL;-- n为做自增能够达到预想的值alter sequence SEQ_SYS_OPER_LOG increment by n;-- 接着自增一次select SEQ_SYS_OPER_LOG.nextval from DUAL;-- 再将序列的值修改回去alter sequence seq_原创 2020-10-20 16:54:33 · 1829 阅读 · 0 评论 -
hibernate 查询时间范围
public Page findPage(Page page,RecordNotice recordNotice) { StringBuffer hql = new StringBuffer("from RecordNotice t where 1=1 "); List<Object> params = new ArrayList<Object>(); /**操作时间起**/ if(!CommonUtils.isNullOrEmpty(...原创 2020-10-20 13:21:50 · 921 阅读 · 0 评论 -
建表规约 (MySQL 数据库)
1.表名不使用复数名词。说明:表名应该仅仅表示表里面的实体内容,不应该表示实体数量,对应于 DO 类名也是单数形式,符合表达习惯。2.禁用保留字,如 desc、range、match、delayed 等,请参考 MySQL 官方保留字。3.主键索引名为 pk_字段名;唯一索引名为 uk_字段名;普通索引名则为 idx_字段名。说明:pk_ 即 primary key;uk_ 即 unique key;idx_ 即 index 的简称。4.小数类型为 decim.转载 2020-10-13 16:06:24 · 568 阅读 · 0 评论 -
异常处理
1.有 try 块放到了事务代码中,catch 异常后,如果需要回滚事务,一定要注意手动回滚事务。2.finally 块必须对资源对象、流对象进行关闭,有异常也要做 try-catch。说明:如果 JDK7 及以上,可以使用 try-with-resources 方式。3.不要在 finally 块中使用 return。说明:try 块中的 return 语句执行成功后,并不马上返回,而是继续执行 finally 块中的语句,如果此处存在 return 语句,则在此直接.转载 2020-10-13 10:32:50 · 513 阅读 · 0 评论 -
注释规约
1.类、类属性、类方法的注释必须使用 Javadoc 规范,使用/**内容*/格式,不得使用// xxx 方式。说明:在 IDE 编辑窗口中,Javadoc 方式会提示相关注释,生成 Javadoc 可以正确输出相应注释;在 IDE中,工程调用方法时,不进入方法即可悬浮提示方法、参数、返回值的意义,提高阅读效率。2.所有的抽象方法(包括接口中的方法)必须要用 Javadoc 注释、除了返回值、参数、异常说明外,还必须指出该方法做什么事情,实现什么功能。说明:对子类的实现要求,或者调转载 2020-10-12 17:31:15 · 675 阅读 · 0 评论 -
控制语句
1.在一个 switch 块内,每个 case 要么通过 continue/break/return 等来终止,要么注释说明程序将继续执行到哪一个 case 为止;在一个 switch 块内,都必须包含一个default 语句并且放在最后,即使它什么代码也没有。说明:注意 break 是退出 switch 语句块,而 return 是退出方法体。2.当 switch 括号内的变量类型为 String 并且此变量为外部参数时,必须先进行 null判断。反例:猜猜下面的..转载 2020-10-12 17:22:25 · 291 阅读 · 0 评论 -
lock锁
在使用阻塞等待获取锁的方式中,必须在 try 代码块之外,并且在加锁方法与 try 代码块之间没有任何可能抛出异常的方法调用,避免加锁成功后,在 finally 中无法解锁。说明一:如果在 lock 方法与 try 代码块之间的方法调用抛出异常,那么无法解锁,造成其它线程无法成功获取锁。说明二:如果 lock 方法在 try 代码块之内,可能由于其它方法抛出异常,导致在 finally 代码块中,unlock 对未加锁的对象解锁,它会调用 AQS 的 tryRelease 方法(取决于具体实现类.转载 2020-10-12 15:43:16 · 399 阅读 · 0 评论 -
多线程异常的总结
最近开发一个导入excel数据的功能,记录一下多线程开发中遇到的困难及解决办法。1.一开始测试数据的时候发现多线程运行是看不到异常的日志记录的,需要自定义线程工程才可以看到异常日志。2.后面学到了future类,通过这个类可以得到线程运行后的返回结果,如果有异常的话,得到的结果是抛出的异常,可以对这异常进行捕获。后来我遇到了我认为的一个终极bug,可能是我的能力有限,一直在这个地方卡住了,future.get()一直会被阻塞。第一次程序可以执行,但第二次执行的时候一直被阻塞了。我debug下发现是线原创 2020-09-24 23:22:01 · 509 阅读 · 0 评论 -
获取7天前的日期,不包含时分秒
Date startDate = DateUtils.addDays(new Date(), -7);overShipmentVO.setAppStartDate(DateUtils.round(startDate, Calendar.DATE));主要用到的是org.apache.commons.lang3.time.DateUtils这个工具类原创 2020-09-03 11:37:48 · 1005 阅读 · 0 评论