目录
一、
二、工具类
1、AbstractSpecification(抽象动态查询条件)
2、各属性查询条件(IsNull、In、Number、String、Like等)
(1)字符串属性查询条件StringSpecification
(2)、Between动态查询条件BetweenSpecification
(3)相等动态查询条件EqualSpecification
(4)In动态查询条件InSpecification
(5)判空查询条件IsNullSpecification
(6)Like动态查询条件LikeSpecification
(7)不为空动态查询条件NotNullSpecification
(8)数字属性查询条件NumberSpecification
(9)SpecificationGroup
(10)SpecificationHelper
(11)分组查询
(12)2019-06-17补充 or 用法
三、用法
适用于多条件动态查询的业务场景。
刚毕业技术比较差,所以记录的比较详细。
一、
repository继承JpaSpecificationExecutor
public interface VehRepository extends JpaRepository, JpaSpecificationExecutor
{
}
二、工具类
1、AbstractSpecification(抽象动态查询条件)
import org.springframework.data.jpa.domain.Specification;
/**
* 抽象动态查询条件
*
*/
public abstract class AbstractSpecification implements Specification
{
/**
* 逻辑运算:等于
*/
public static final int LOGICAL_OPERATOR_EQUAL = 1;
/**
* 逻辑运算:小于
*/
public static final int LOGICAL_OPERATOR_LESS = 2;
/**
* 逻辑运算:大于
*/
public static final int LOGICAL_OPERATOR_GREATER = 3;
/**
* 逻辑运算:小于等于
*/
public static final int LOGICAL_OPERATOR_LESS_EQUAL = 4;
/**
* 逻辑运算:大于等于
*/
public static final int LOGICAL_OPERATOR_GREATER_EQUAL = 5;
/**
* 逻辑运算:不等于
*/
public static final int LOGICAL_OPERATOR_NOT_EQUAL = 6;
/**
* 逻辑运算:包含
*/
public static final int LOGICAL_OPERATOR_LIKE = 7;
/**
* 逻辑运算:左包含
*/
public static final int LOGICAL_OPERATOR_STARTWITH = 8;
/**
* 逻辑运算:右包含
*/
public static final int LOGICAL_OPERATOR_ENDWITH = 9;
/**
* 逻辑运算:非空
*/
public static final int LOGICAL_OPERATOR_NOT_NULL = 10;
/**
* 逻辑运算:In
*/
public static final int LOGICAL_OPERATOR_IN = 11;
/**
* 逻辑运算:包含(自定义)
*/
public static final int LOGICAL_OPERATOR_LIKE_CUSTOM = 99;
public static final int LOGICAL_OPERATOR_CUSTOM = 100;
protected String attrName;
protected ATTR attrValue;
protected ATTR[] attrValues;
protected int logicalOperator;
/**
* 构造方法
* @param attrName 属性名称
* @param attrValue 属性值
* @param logicalOperator 逻辑运算符
*/
public AbstractSpecification(String attrName, ATTR attrValue, int logicalOperator) {
super();
this.attrName = attrName;
this.attrValue = attrValue;
this.logicalOperator = logicalOperator;
}
public AbstractSpecification(String attrName, int logicalOperator, ATTR ... attrValues) {
super();
this.attrName = attrName;
this.attrValues = attrValues;
if (this.attrValues.length > 0) {
this.attrValue = this.attrValues[0];
}
this.logicalOperator = logicalOperator;
}
}
2、各属性查询条件(IsNull、In、Number、String、Like等)
(1)字符串属性查询条件 StringSpecification
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.persistence.criteria.*;
/**
* 字符串属性查询条件
*/
public class StringSpecification extends AbstractSpecification {
private static Logger log = LoggerFactory
.getLogger(StringSpecification.class);
private int start, len;
/**
* 构造方法
*
* @param attrName 属性名称
* @param attrValue 属性值
* @param logicalOperator 逻辑运算符
*/
public StringSpecification(String attrName, String attrValue, int logicalOperator) {
this(attrName, logicalOperator, attrValue);
}
public StringSpecification(String attrName, int logicalOperator, String... attrValues) {
super(attrName, logicalOperator, attrValues);
this.start = 0;
this.len = 0;
}
public StringSpecification(String attrName, int start, int length, int logicalOperator, String... attrValues) {
super(attrName, logicalOperator, attrValues);
this.start = start;
this.len = length;
}
private Class getFieldClass(String attr) {
// TODO
return null;
}
/* (non-Javadoc)
* @see org.springframework.data.jpa.domain.Specification#toPredicate(javax.persistence.criteria.Root, javax.persistence.criteria.CriteriaQuery, javax.persistence.criteria.CriteriaBuilder)
*/
@Override
public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder cb) {
Path path = SpecificationHelper.getPath(root, attrName);
Expression expr = path;
if (0 < start && 0 < len) {
expr = cb.substring(path, start, len);
} else {
}
switch (logicalOperator) {
case StringSpecification.LOGICAL_OPERATOR_EQUAL: {
return cb.equal(expr, attrValue);
}
case StringSpecification.LOGICAL_OPERATOR_GREATER: {
return cb.greaterThan(expr, attrValue);
}
case StringSpecification.LOGICAL_OPERATOR_GREATER_EQUAL: {
return cb.greaterThanOrEqualTo(expr, attrValue);
}
case StringSpecification.LOGICAL_OPERATOR_LESS: {
return cb.lessThan(expr, attrValue);
}
case StringSpecification.LOGICAL_OPERATOR_LESS_EQUAL: {
return cb.lessThanOrEqualTo(expr, attrValue);
}
case StringSpecification.LOGICAL_OPERATOR_NOT_EQUAL: {
return cb.notEqual(expr, attrValue);
}
case StringSpecification.LOGICAL_OPERATOR_LIKE: {
return cb.like(expr, "%" + attrValue + "%");
}
case StringSpecification.LOGICAL_OPERATOR_STARTWITH: {
return cb.like(expr, attrValue + "%");
}
case StringSpecification.LOGICAL_OPERATOR_ENDWITH: {
return cb.like(expr, "%" + attrValue);
}
case StringSpecification.LOGICAL_OPERATOR_NOT_NULL: {
return cb.isNotNull(path);
}
case StringSpecification.LOGICAL_OPERATOR_LIKE_CUSTOM: {
return cb.like(expr, attrValue);
}
case StringSpecification.LOGICAL_OPERATOR_IN: {
CriteriaBuilder.In predicate = cb.in(expr);
for (String item : attrValues) {
predicate.value(item);
}
return predicate;
}
default:
return null;
}
}
}
(2)、Between动态查询条件 BetweenSpecification
import org.springframework.data.jpa.domain.Specification;
import javax.persistence.criteria.*;
/**
* Between动态查询条件
*/
public class BetweenSpecification> implements Specification
{
private String attrName;
private ATTR lowerBound, upperBound;
/**
* 构造方法
* @param attrName 属性名称
* @param lowerBound 属性值下界
* @param upperBound 属性值上界
*/
public BetweenSpecification(String attrName, ATTR lowerBound, ATTR upperBound) {
super();
this.attrName = attrName;
this.lowerBound = lowerBound;
this.upperBound = upperBound;
}
/* (non-Javadoc)
* @see org.springframework.data.jpa.domain.Specification#toPredicate(javax.persistence.criteria.Root, javax.persistence.criteria.CriteriaQuery, javax.persistence.criteria.CriteriaBuilder)
*/
@Override
public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder cb) {
Path path = SpecificationHelper.getPath(root, attrName);
return cb.between(path, lowerBound, upperBound);
}
}
(3)相等动态查询条件 EqualSpecification
import org.springframework.data.jpa.domain.Specification;
import javax.persistence.criteria.*;
/**
* 相等动态查询条件
*
*/
public class EqualSpecification implements Specification
{
private String fieldName;
private ATTR fieldValue;
public EqualSpecification(String fieldName, ATTR fieldValue) {
super();
this.fieldName = fieldName;
this.fieldValue = fieldValue;
}
@Override
public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder cb) {
Path path = SpecificationHelper.getPath(root, fieldName);
return cb.equal(path, fieldValue);
}
}
(4)In动态查询条件 InSpecification
import org.springframework.data.jpa.domain.Specification;
import javax.persistence.criteria.*;
/**
*
*/
public class InSpecification implements Specification
{
private String attrName;
private ATTR[] values;
public InSpecification(String attrName, ATTR[] values) {
this.attrName = attrName;
this.values = values;
}
@Override
public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder cb) {
Path path = SpecificationHelper.getPath(root, attrName);
CriteriaBuilder.In predicate = cb.in(path);
for(ATTR item : values) {
predicate.value(item);
}
return predicate;
}
}
(5)判空查询条件 IsNullSpecification
import javax.persistence.criteria.*;
/**
*
*/
public class IsNullSpecification extends AbstractSpecification {
public IsNullSpecification(String attrName) {
super(attrName, null, AbstractSpecification.LOGICAL_OPERATOR_CUSTOM);
}
@Override
public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder cb) {
Path path = SpecificationHelper.getPath(root, attrName);
return cb.isNull(path);
}
}
(6)Like动态查询条件 LikeSpecification
/**
* Like动态查询条件
*
*/
public class LikeSpecification extends StringSpecification {
public LikeSpecification(String attrName, String attrValue) {
super(attrName, attrValue, StringSpecification.LOGICAL_OPERATOR_LIKE);
}
}
(7)不为空动态查询条件 NotNullSpecification
import javax.persistence.criteria.*;
/**
*
*/
public class NotNullSpecification extends AbstractSpecification {
public NotNullSpecification(String attrName) {
super(attrName, null, AbstractSpecification.LOGICAL_OPERATOR_CUSTOM);
}
@Override
public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder cb) {
Path path = SpecificationHelper.getPath(root, attrName);
return cb.isNotNull(path);
}
}
(8)数字属性查询条件 NumberSpecification
import javax.persistence.criteria.*;
/**
* 数字属性查询条件
*/
public class NumberSpecification extends AbstractSpecification {
public NumberSpecification(String attrName, Number attrValue, int logicalOperator) {
this(attrName, logicalOperator, attrValue);
}
public NumberSpecification(String attrName, int logicalOperator, Number... attrValues) {
super(attrName, logicalOperator, attrValues);
}
@Override
public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder cb) {
Path path = SpecificationHelper.getPath(root, attrName);
switch (logicalOperator) {
case NumberSpecification.LOGICAL_OPERATOR_EQUAL: {
return cb.equal(path, attrValue);
}
case NumberSpecification.LOGICAL_OPERATOR_GREATER: {
return cb.gt(path, attrValue);
}
case NumberSpecification.LOGICAL_OPERATOR_GREATER_EQUAL: {
return cb.ge(path, attrValue);
}
case NumberSpecification.LOGICAL_OPERATOR_LESS: {
return cb.lt(path, attrValue);
}
case NumberSpecification.LOGICAL_OPERATOR_LESS_EQUAL: {
return cb.le(path, attrValue);
}
case NumberSpecification.LOGICAL_OPERATOR_NOT_EQUAL: {
return cb.notEqual(path, attrValue);
}
case NumberSpecification.LOGICAL_OPERATOR_IN: {
CriteriaBuilder.In predicate = cb.in(path);
for (Number item : attrValues) {
predicate.value(item);
}
return predicate;
}
default:
return null;
}
}
}
(9)SpecificationGroup
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.jpa.domain.Specifications;
import java.util.List;
/**
*
*/
public class SpecificationGroup {
public static Specifications and(List> specList) {
Specifications specs = null;
for(Specification s : specList) {
if(specs != null) {
specs = specs.and(s);
} else {
specs = Specifications.where(s);
}
}
return specs;
}
public static Specifications or(List> specList) {
Specifications specs = null;
for(Specification s : specList) {
if(specs != null) {
specs = specs.or(s);
} else {
specs = Specifications.where(s);
}
}
return specs;
}
}
(10)SpecificationHelper
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.jpa.domain.Specifications;
import javax.persistence.criteria.From;
import javax.persistence.criteria.Join;
import javax.persistence.criteria.Path;
import javax.persistence.criteria.Root;
import java.util.List;
import java.util.StringTokenizer;
/**
*
*/
public class SpecificationHelper {
private static Logger log = LoggerFactory.getLogger(SpecificationHelper.class);
public static Path getPath(Root root, String attrName) {
From f = root;
String[] strs = attrName.split("\\.");
String attr = attrName;
if (strs.length > 1) {
for(int i = 0; i < strs.length; i ++) {
attr = strs[i];
if(i < strs.length - 1) {
boolean hasAttribute = false;
if (root.getJoins() != null) {
for (Join join : root.getJoins()) {
if (attr.equals(join.getAttribute().getName())) {
f = join;
hasAttribute = true;
break;
}
}
}
if(!hasAttribute) {
f = f.join(attr);
}
}
}
}
return f.get(attr);
}
public static From fromCollection(Root root, String attrName) {
From f = root;
String attr = attrName;
StringTokenizer tokenizer = new StringTokenizer(attrName, ".");
while (tokenizer.hasMoreTokens()) {
attr = tokenizer.nextToken();
boolean hasAttribute = false;
if (root.getJoins() != null) {
for (Join join : root.getJoins()) {
if (attr.equals(join.getAttribute().getName())) {
f = join;
hasAttribute = true;
break;
}
}
}
if(!hasAttribute) {
f = f.join(attr);
}
}
return f;
}
public static Specifications and(List> specList) {
return SpecificationGroup.and(specList);
}
public static Specifications or(List> specList) {
return SpecificationGroup.or(specList);
}
}
(11)分组查询
2019.02.19更新
public class GroupSpecification implements Specification {
@Override
public Specification and(Specification other) {
return null;
}
@Override
public Specification or(Specification other) {
return null;
}
@SuppressWarnings("unchecked")
@Override
public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder cb)
{
@SuppressWarnings("rawtypes") List eList=new ArrayList<>();
eList.add(root.get("detectSn"));
query.groupBy(eList);
// query.having(cb.gt( cb.count(root), 1));
return query.getRestriction();
}
}
(12)2019-06-17补充 or 用法
List> list = new ArrayList<>();
List> list2 = new ArrayList<>();
//需要做OR操作的字段
list2.add(new EqualSpecification("ifOutRange","true"));
list2.add(new EqualSpecification("ifIllegal","true"));
list2.add(new EqualSpecification("ifHighSpeed","true"));
//添加OR操作的list
list.add(SpecificationHelper.or(list2));
三、用法
创建list
List> list = new ArrayList<>();
向list中添加条件
(下面代码的意思是 字符串属性 vehNo这个字段 右包含某个值)
list.add(new StringSpecification<>("vehNo", StringTool.trim(vehQueryParam.getVehNo()), StringSpecification.LOGICAL_OPERATOR_ENDWITH));
(下面代码的意思是 In 代码中detectResult字段 中含有(in)detectResult数组中的值 则取出来)
String [] detectResult = new String[5];
detectResult[0]="合格";
detectResult[1]="不合格";
detectResult[2]="一级";
detectResult[3]="二级";
detectResult[4]="三级";
list.add(new InSpecification<>("detectResult",detectResult));
其他的几个用法就不一一举例说明...
然后是分页查询
//三个参数 1、页码2、取几个值3、排序方式
PageRequest pageRequest = new PageRequest(detectRecordQueryParam.getPageNum() - 1,
detectRecordQueryParam.getPageSize(), new Sort(new Order(Direction.DESC, "detectDate")));
Page page;
if (list.isEmpty()) {
page = vehRepository.findAll(pageRequest);
} else {
//前端查询条件传过来的参数 不为空 就是说要用户进行条件查询了 就将list动态查询条件给他
page = vehRepository.findAll(SpecificationHelper.and(list), pageRequest);
}
结果操作
使用PageInfo存储查询结果
(这是PageInfo)
import java.util.ArrayList;
import java.util.List;
/**
*/
public class PageInfo extends PageBase
{
private List records = new ArrayList();
public List getRecords() {
return records;
}
public void setRecords(List records) {
this.records = records;
}
}
PageInfo使用
//对应的Info而不是entity
PageInfo result = new PageInfo();
result.setTotalPages(page.getTotalPages());
result.setPageNo(page.getNumber());
result.setPageSize(page.getSize());
result.setTotalRecords(page.getTotalElements());
对象转换重构
for (VehEntity entity : page.getContent()) {
VehListItem item = new VehicleListItem();
// 对象转换重构
item.setVehicleId(entity.getVehicleId());
item.setVehicleNo(entity.getVehicleNo());
result.getRecords().add(item);
}
这里的result 就是要返回给前端的 结果集
你可能感兴趣的:(java基础)
Java基础——泛型 基础介绍
新停浊酒杯
java 开发语言
在Java中,泛型是十分强大的功能,它允许我们在类、方法和接口中使用类型参数,提供安全且灵活的代码。反省通过让你指定通用类型参数来实现“类型独立性”,避免显式的类型转换(数据类型的强转肯定都用过),同时提高了代码的可读性和可维护性。1.在类上的应用泛型类指的是在类定义时使用类型参数(比如,,等)。这种类能够处理多种类型,而不必为每种类型编写多个相似的类。:泛型类型参数,表示任意类型。通常用于类、方
java面试问题大全及答案大全
小白教程
java面试题 java 面试 开发语言 java面试题 java面试问题大全 java面试题带答案 Java经典面试题
文章目录前言java面试题-Java基础java面试题-JVM知识java面试题-多线程与并发java面试题-主流框架java面试题-数据库相关java面试题-分布式与微服务java面试题-网络知识前言该文档围绕Java技术栈展开,全面涵盖了基础、JVM、多线程与并发、主流框架、数据库、分布式、网络等核心知识领域,以面试题及参考答案的形式呈现,为Java开发者提供了系统复习与深入理解的资料。有需要
你需要更新的Java知识(面试必看、全网最全、持续更新)
珠峰日记
java 后端
一、java基础1、JDK版本相关(新特性、是否长期支持、选择建议等)新特性JDK8StreamAPI:提供了过滤、映射、排序等功能,让集合操作更简便。接口默认方法和静态方法:增强了接口的灵活性,允许在接口中定义默认方法和静态方法。JDK17密封类和接口:通过sealed、permits关键字限制类的继承或接口的实现,提高代码安全性和可维护性。模式匹配(instanceof):在instanceo
Java基础之JVM对象内存分配机制简介
aoneword
JVM基础 jvm java 开发语言
一对象内存分配1.1运行时数据区域1.2常见java应用启动JVM参数:-Xss:每个线程的栈大小(单位kb)-Xms:堆的初始大小,默认物理内存的1/64,示例:-Xms:4g-Xms:10m-Xmx:堆的最大可用大小,默认物理内存的1/4-Xmn:新生代大小-XX:NewRatio:默认2,表示新生代占老年代的1/2,占整个堆内存的1/3-XX:SurvivorRatio:默认8,表示一个su
Java基础语法练习37(枚举、注解(@Override、@Deprecated和@SuppressWarnings))
橙序研工坊
小白Java的成长 java 开发语言
一、枚举在Java中,枚举(enum)是一种特殊的数据类型,它允许开发者定义一组命名的常量集合先看正常示例,如下代码:publicclassEnum01{publicstaticvoidmain(String[]args){System.out.println(Season.SPRING.getName());}}classSeason{privateStringname;privateStrin
java继承后 赋值返回_Java基础进阶 第三天 单例模式、继承、final
weixin_39757212
java继承后 赋值返回
今日任务1、能够理解单例设计模式2、能够独立使用继承3、能够独立使用final关键字1.代码块1.1.代码块的概念和格式代码块,就是使用大括号括起来的一段代码;书写格式:{代码;}1.2.代码块的分类1.2.1.静态代码块静态代码块,就是使用static修饰的代码块,直接写在类中的代码块;classDemo{static{System.out.pintln("静态代码块")}}2.png静态代码块
Java基础语法练习33(单例模式:饿汉式和懒汉式)
橙序研工坊
小白Java的成长 java 开发语言
单例模式:1.饿汉式2.懒汉式饿汉式:步骤如下:1.构造器私有化(防止new)2.类的内部创建对象3.向外暴露一个静态的公共方法个人理解:饿(等不及)就是已经创建好了对象等你来用示例代码如下:publicclasseTon{publicstaticvoidmain(String[]args){//第四步通过方法可以获取对象girlFiendinstance1=girlFiend.getInstan
初学者如何用 Python 写第一个爬虫?
ADFVBM
面试 学习路线 阿里巴巴 python 爬虫 开发语言
??欢迎来到我的博客!非常高兴能在这里与您相遇。在这里,您不仅能获得有趣的技术分享,还能感受到轻松愉快的氛围。无论您是编程新手,还是资深开发者,都能在这里找到属于您的知识宝藏,学习和成长。??博客内容包括:Java核心技术与微服务:涵盖Java基础、JVM、并发编程、Redis、Kafka、Spring等,帮助您全面掌握企业级开发技术。大数据技术:涵盖Hadoop(HDFS)、Hive、Spark
零基础到精通Java合集
羽轩GM
Java教程
Java从零基础到精通合集课程大纲,共分为6个阶段、50+个课程模块,每个课程控制在15分钟以内,结合实战案例与高频面试题,适合碎片化学习:第一阶段:Java基础与开发环境搭建(8课时)目标:掌握基础语法与环境配置,完成首个Java程序开发Java开发环境搭建JDK安装与跨平台原理IntelliJIDEA快速入门与HelloWorld编写环境变量配置(PATH与CLASSPATH)数据类型与运算符
算八字和阴阳五行(Java基础)
夜不眠,码三千
java 开发语言
目录一、引言二、问题描述三、问题分析四、算法分析1.年柱2.月柱3.日柱4.时柱五、完整代码展示六、结果验证七、结语一、引言每年回家过年,亲戚们都会问我“小韩学的什么专业呀,给七大姑八大姨展示一下呀”等等一系列类似的问题。今年在机缘巧合之下,我接触到了算卦,并且通过某音某站学习到了一下关于算卦的一些基础算法,比如说算八字,算五行等等,然后我就有了一个神奇的想法,要是将算卦和Java结合起来会是什么
必看系列:JAVA面试该怎么准备以及如何在面试过程中展示自己的技术能力
web13688565871
面试 学习路线 阿里巴巴 java 面试 开发语言
准备JAVA面试是一个系统而全面的过程,旨在确保你熟悉JAVA的各个方面,并能够清晰地展示自己的技术能力。以下是一些关键的准备步骤和面试技巧:一、面试准备深入理解JAVA基础:熟悉JAVA的核心概念,如JVM、数据类型、运算符、流程控制、面向对象编程(类、对象、继承、封装、多态)等。理解JAVA的内存模型,包括堆、栈和方法区,以及垃圾收集器的工作原理。掌握JAVA核心技术:对JAVA集合框架(如L
Java应用实战:从入门到精通的全面指南
听风吟丶
java 开发语言
引言Java,作为一门跨平台的高级编程语言,自1995年由SunMicrosystems推出以来,凭借其“一次编写,到处运行”的特性,迅速在全球范围内获得了广泛的认可和应用。无论是企业级应用、移动应用开发,还是大数据处理、云计算平台,Java都扮演着举足轻重的角色。本篇文章旨在为初学者提供一条清晰的学习路径,同时也为有一定基础的开发者提供进阶的指导,帮助大家从入门走向精通。一、Java基础篇:搭建
菜鸟Java基础教程 1.Java简介
风之弋然
编程语言 学习笔记 java python 开发语言
Java简介Java简介Java分为三个体系:主要特性1.Java语言是简单的:2.Java语言是面向对象的:3.Java语言是分布式的:4.Java语言是健壮的:5.Java语言是安全的:6.Java语言是体系结构中立的:7.Java语言是可移植的:8.Java语言是解释型的:9.Java是高性能的:10.Java语言是多线程的:11.Java语言是动态的:Java简介Java是由SunMicr
java语言从入门到入土_Java基础从入门到精通
苏咔咔
java语言从入门到入土
1.ubuntu12.10如何安装http://jingyan.baidu.com/article/e5c39bf585968539d6603364.html2.JDK环境变量配置--win8版http://jingyan.baidu.com/article/ca41422fe3b7261eae99edc6.html3.用winrar加密文件http://jingyan.baidu.com/art
【Java基础】Java 中 的`final` 关键字
李少兄
Java java 开发语言
前言在Java编程的世界里,final关键字是一个强大且常用的工具。它可以应用于类、方法和变量,赋予它们不同的“不可变”特性。一、final修饰类1.定义与特性当使用final修饰一个类时,这个类就如同被上了一把坚固的锁,不能被其他类继承,即不会有子类。这是Java语言精心设计的一种机制,目的是确保类的设计和实现不会被意外修改,从而保证类的行为和功能始终保持一致。2.示例代码//定义一个final
【Java基础】Java 中的枚举类
李少兄
Java java python 数据库
一、前言在Java编程中,枚举类(enum)是一个非常实用且强大的特性,自Java5引入以来,它为开发者提供了一种优雅的方式来表示一组固定的常量。枚举类主要用于信息标志和分类,能显著提升代码的可读性、可维护性和安全性。二、枚举类基础概念(一)枚举类的定义枚举类使用enum关键字来定义,它是一种特殊的类,用于封装一组固定的常量。以下是一个简单的示例:enumSeason{SPRING,SUMMER,
JAVA基础学习2
Moon.8888
java 学习 开发语言
JAVA基础学习2包机制1.包的本质其实就是文件夹包语句的语法格式:packagepkg1[.pkg2[.pkg3...]];注意:1.一般利用公司域名倒置作为包名;例如:www.baidu.com倒置过来作为包名:com.baidu.www;2.*作为通配符导入包的的语法格式:importpackage1.[.package2...].(classname|*);JavaDoc生成文档1.Jav
Springboot项目中线程池使用整理
m0_74823715
面试 学习路线 阿里巴巴 spring boot 后端 java
文章目录Springboot项目中线程池使用整理学习目标线程池类型及特点Java基础线程池SpringThreadPoolTaskExecutorThreadPoolTaskExecutorvsThreadPoolExecutor主要区别@Async注解使用AsyncConfigurer接口CompletableFuture线程池实现方式比较1.Spring@Bean方式2.AsyncConfig
【JavaSE Pro】 Java 进阶 笔记汇总(更新中)
m0_74823863
面试 学习路线 阿里巴巴 java 笔记 开发语言
【JavaSEPro】Java进阶笔记汇总Java进阶内容的笔记整理汇总,主要讲解的是Java基础语法之外的一些特有的语言特性,包括接口,内部类,Lambda表达式,泛型,异常等。有问题欢迎和我交流!Day1面向对象进阶(static、单例、代码块、继承)Day2面向对象进阶(包、权限修饰符、抽象类、接口)Day3多态,内部类,常用API(Object,Objects,StringBuilder,
不得不知道的一些Java学习资料
念君思宁
java要笑着学 java jvm servlet
Java学习资料下面是我们花费大量精力整理出来的Java学习资料,这套Java学习资料由Java书籍和Java视频两大部分组成,我们会根据Java学习路线,按照由浅至深的顺序进行推荐。您可以根据自身的学习进度和学习情况,自行选择合适的资料进行学习。一、Java书籍1.Java基础书名适读人群描述《HeadFirstJava(中文版)》Java初学者本书文笔十分轻松,采用对话的形式来讲解Java编程
[持续更新]八股速通之Java基础面试题答案精简速记版!
八股文领域大手子
java 数据库 mysql jvm sql spring
问题1:请解释Java中ArrayList和LinkedList的区别?回答思路:数据结构:明确底层实现(数组vs双向链表)。性能对比:从查询、插入/删除、内存占用三方面分析。适用场景:根据性能特点给出使用建议。补充细节:扩容机制、线程安全性等。示例回答:ArrayList基于动态数组实现,支持快速随机访问(时间复杂度O(1)),但在中间插入或删除元素时,需要移动后续元素,性能较差(平均O(n))
Java基础——8.5 super关键字
kongbai_mumu
Java基础 java 开发语言
8.5super关键字super代表父类的引用,用于访问父类的属性、方法、构造器。8.5.1基本语法super.属性名,访问父类的属性,但不能访问父类的private属性;super.方法名(参数列表),访问父类的方法,但不能访问父类的private方法;super(参数列表);,访问父类的构造器,只能放在构造器的第一句且只能出现一句;例:packagecom.edu.super_;publicc
【Java基础】深入剖析Java中构造器、实例变量、静态变量、代码块的执行顺序!原理+实战,一文搞定!
工一木子
Java基础知识系列 Java java 开发语言
深入剖析Java中构造器、实例变量、静态变量、代码块的执行顺序!原理+实战,一文搞定!在Java编程中,构造器、实例变量、静态变量、实例代码块和静态代码块的执行顺序是一个经典且重要的知识点。无论是日常开发还是面试,理解这些内容的执行顺序都至关重要。今天,我们将通过原理分析和实战代码,彻底搞懂这些内容的执行顺序,并附上详细的代码示例,帮助你轻松掌握!1.核心概念回顾在深入分析之前,我们先回顾一下这些
【Java基础篇】——第2篇:Java语法基础
猿享天开
Java开发从入门到精通 java 开发语言
第2篇:Java语法基础2.1引言在上一篇中,我们介绍了Java的基本概念、应用场景以及如何搭建开发环境。本篇将深入探讨Java的语法基础,涵盖变量与数据类型、运算符、控制结构、数组、方法、面向对象编程的进一步内容、异常处理以及常用的编程规范。通过本篇内容,读者将能够编写基本的Java程序,理解其核心语法结构。2.2Java的基本组成Java程序由以下几个基本组成部分构成:包(Package):用
JAVA基础-类型转换
王依华
java 开发语言
隐式类型转换当两种数据类型兼容,且转换前的数据类型的取值范围小于转换后的数据类型的取值范围,Java会自动进行类型转换。1.比int小的数据类型进行运算的时候,都提升为int类型去运算。publicclassDemo{publicstaticvoidmain(String[]args){bytea=10;shortb=20;//bytec=a+b;//编译报错,因为a+b的结果是int类型,如需要
蓝桥杯知识点复习(超级全面)
初见雨夜
java 数据结构 算法 c++
此系列包含蓝桥杯(软件类)所考察的绝大部分知识点,一共有基础语法,常用API,算法和数据结构,和往年真题四部分,虽然语言以JAVA为主,但算法部分是相通的,C++组的小伙伴也可以看哦。JAVA基础语法:备战蓝桥杯(一):一般输入输出和快速输入输出备战蓝桥杯(二):java编程规范和常用数据类型备战蓝桥杯(三):常用功能符以及循环结构和分支结构备战蓝桥杯(四):函数(方法)、类和对象算法竞赛常用的J
Java并发与面试-每日必看(13)
Starry-Walker
Java后端开发面试题汇总 java 面试 开发语言 锁 并发 后端
前言Java不秃,面试不慌!欢迎来到这片Java修炼场!这里没有枯燥的教科书,只有每日一更的硬核知识+幽默吐槽,让你在欢笑中掌握Java基础、算法、面试套路,摆脱“写代码如写诗、看代码如看天书”的困境。什么是锁?用通俗易懂的方式解释锁(Lock)就像是一把“门锁”,控制多个线程(或者多个任务)访问同一个资源,防止它们互相踩踏,导致数据混乱。想象一下,你和朋友们一起去共享单车停车点,但是只有一辆单车
Java并发与面试-每日必看(14)
Starry-Walker
Java后端开发面试题汇总 java 面试 开发语言 并发 后端 线程
前言Java不秃,面试不慌!欢迎来到这片Java修炼场!这里没有枯燥的教科书,只有每日一更的硬核知识+幽默吐槽,让你在欢笑中掌握Java基础、算法、面试套路,摆脱“写代码如写诗、看代码如看天书”的困境。记住:代码会背叛你,但知识不会!坚持积累,总有一天,HR会为你的八股文落泪,面试官会因你的算法沉默。ReentrantLock中tryLock()和lock()⽅法的区别想象一下,你和朋友去奶茶店买
java将文件流传给前端,JAVA基础知识之InputStreamReader流 和 将本地文件通过前端上传到服务器上...
GrapeDoor
java将文件流传给前端
将本地文件通过前端上传到服务器上publicBaseResponseSwaggerresolveFile(@Valid@ApiParam(value="file")@RequestParam(name="file",required=true)MultipartFilefile){if(file.isEmpty()){thrownewSoftwareException(ComStatusCodeE
补Java基础之重生四-流程控制语句(补充版)
这里是小悦同学呀!
补Java基础之重生小白 java 开发语言
补Java基础之重生四-流程控制语句(补充版)这几天在弄实习材料和论文的定稿,耽误的学习进度~我会加快进度,保证高效的同时,我也会抓好质量!今天我找到了新的课程学习,所以接下来的文章可会有部分重叠,就当巩固一下知识点,虽然这几天的内容非常基础,但是也是算法的基础哦!(一)、选择结构语言的执行过程:1、顺序执行2、选择执行3、循环执行一、if语句1、基本if结构if的语法格式:doublescore
面向对象面向过程
3213213333332132
java
面向对象:把要完成的一件事,通过对象间的协作实现。
面向过程:把要完成的一件事,通过循序依次调用各个模块实现。
我把大象装进冰箱这件事为例,用面向对象和面向过程实现,都是用java代码完成。
1、面向对象
package bigDemo.ObjectOriented;
/**
* 大象类
*
* @Description
* @author FuJian
Java Hotspot: Remove the Permanent Generation
bookjovi
HotSpot
openjdk上关于hotspot将移除永久带的描述非常详细,http://openjdk.java.net/jeps/122
JEP 122: Remove the Permanent Generation
Author Jon Masamitsu
Organization Oracle
Created 2010/8/15
Updated 2011/
正则表达式向前查找向后查找,环绕或零宽断言
dcj3sjt126com
正则表达式
向前查找和向后查找
1. 向前查找:根据要匹配的字符序列后面存在一个特定的字符序列(肯定式向前查找)或不存在一个特定的序列(否定式向前查找)来决定是否匹配。.NET将向前查找称之为零宽度向前查找断言。
对于向前查找,出现在指定项之后的字符序列不会被正则表达式引擎返回。
2. 向后查找:一个要匹配的字符序列前面有或者没有指定的
BaseDao
171815164
seda
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class BaseDao {
public Conn
Ant标签详解--Java命令
g21121
Java命令
这一篇主要介绍与java相关标签的使用 终于开始重头戏了,Java部分是我们关注的重点也是项目中用处最多的部分。
1
[简单]代码片段_电梯数字排列
53873039oycg
代码
今天看电梯数字排列是9 18 26这样呈倒N排列的,写了个类似的打印例子,如下:
import java.util.Arrays;
public class 电梯数字排列_S3_Test {
public static void main(S
Hessian原理
云端月影
hessian原理
Hessian 原理分析
一. 远程通讯协议的基本原理
网络通信需要做的就是将流从一台计算机传输到另外一台计算机,基于传输协议和网络 IO 来实现,其中传输协议比较出名的有 http 、 tcp 、 udp 等等, http 、 tcp 、 udp 都是在基于 Socket 概念上为某类应用场景而扩展出的传输协
区分Activity的四种加载模式----以及Intent的setFlags
aijuans
android
在多Activity开发中,有可能是自己应用之间的Activity跳转,或者夹带其他应用的可复用Activity。可能会希望跳转到原来某个Activity实例,而不是产生大量重复的Activity。
这需要为Activity配置特定的加载模式,而不是使用默认的加载模式。 加载模式分类及在哪里配置
Activity有四种加载模式:
standard
singleTop
hibernate几个核心API及其查询分析
antonyup_2006
html .net Hibernate xml 配置管理
(一) org.hibernate.cfg.Configuration类
读取配置文件并创建唯一的SessionFactory对象.(一般,程序初始化hibernate时创建.)
Configuration co
PL/SQL的流程控制
百合不是茶
oracle PL/SQL编程 循环控制
PL/SQL也是一门高级语言,所以流程控制是必须要有的,oracle数据库的pl/sql比sqlserver数据库要难,很多pl/sql中有的sqlserver里面没有
流程控制;
分支语句 if 条件 then 结果 else 结果 end if ;
条件语句 case when 条件 then 结果;
循环语句 loop
强大的Mockito测试框架
bijian1013
mockito 单元测试
一.自动生成Mock类 在需要Mock的属性上标记@Mock注解,然后@RunWith中配置Mockito的TestRunner或者在setUp()方法中显示调用MockitoAnnotations.initMocks(this);生成Mock类即可。二.自动注入Mock类到被测试类 &nbs
精通Oracle10编程SQL(11)开发子程序
bijian1013
oracle 数据库 plsql
/*
*开发子程序
*/
--子程序目是指被命名的PL/SQL块,这种块可以带有参数,可以在不同应用程序中多次调用
--PL/SQL有两种类型的子程序:过程和函数
--开发过程
--建立过程:不带任何参数
CREATE OR REPLACE PROCEDURE out_time
IS
BEGIN
DBMS_OUTPUT.put_line(systimestamp);
E
【EhCache一】EhCache版Hello World
bit1129
Hello world
本篇是EhCache系列的第一篇,总体介绍使用EhCache缓存进行CRUD的API的基本使用,更细节的内容包括EhCache源代码和设计、实现原理在接下来的文章中进行介绍
环境准备
1.新建Maven项目
2.添加EhCache的Maven依赖
<dependency>
<groupId>ne
学习EJB3基础知识笔记
白糖_
bean Hibernate jboss webservice ejb
最近项目进入系统测试阶段,全赖袁大虾领导有力,保持一周零bug记录,这也让自己腾出不少时间补充知识。花了两天时间把“传智播客EJB3.0”看完了,EJB基本的知识也有些了解,在这记录下EJB的部分知识,以供自己以后复习使用。
EJB是sun的服务器端组件模型,最大的用处是部署分布式应用程序。EJB (Enterprise JavaBean)是J2EE的一部分,定义了一个用于开发基
angular.bootstrap
boyitech
AngularJS AngularJS API angular中文api
angular.bootstrap
描述:
手动初始化angular。
这个函数会自动检测创建的module有没有被加载多次,如果有则会在浏览器的控制台打出警告日志,并且不会再次加载。这样可以避免在程序运行过程中许多奇怪的问题发生。
使用方法: angular .
java-谷歌面试题-给定一个固定长度的数组,将递增整数序列写入这个数组。当写到数组尾部时,返回数组开始重新写,并覆盖先前写过的数
bylijinnan
java
public class SearchInShiftedArray {
/**
* 题目:给定一个固定长度的数组,将递增整数序列写入这个数组。当写到数组尾部时,返回数组开始重新写,并覆盖先前写过的数。
* 请在这个特殊数组中找出给定的整数。
* 解答:
* 其实就是“旋转数组”。旋转数组的最小元素见http://bylijinnan.iteye.com/bl
天使还是魔鬼?都是我们制造
ducklsl
生活 教育 情感
----------------------------剧透请原谅,有兴趣的朋友可以自己看看电影,互相讨论哦!!!
从厦门回来的动车上,无意中瞟到了书中推荐的几部关于儿童的电影。当然,这几部电影可能会另大家失望,并不是类似小鬼当家的电影,而是关于“坏小孩”的电影!
自己挑了两部先看了看,但是发现看完之后,心里久久不能平
[机器智能与生物]研究生物智能的问题
comsci
生物
我想,人的神经网络和苍蝇的神经网络,并没有本质的区别...就是大规模拓扑系统和中小规模拓扑分析的区别....
但是,如果去研究活体人类的神经网络和脑系统,可能会受到一些法律和道德方面的限制,而且研究结果也不一定可靠,那么希望从事生物神经网络研究的朋友,不如把
获取Android Device的信息
dai_lm
android
String phoneInfo = "PRODUCT: " + android.os.Build.PRODUCT;
phoneInfo += ", CPU_ABI: " + android.os.Build.CPU_ABI;
phoneInfo += ", TAGS: " + android.os.Build.TAGS;
ph
最佳字符串匹配算法(Damerau-Levenshtein距离算法)的Java实现
datamachine
java 算法 字符串匹配
原文:http://www.javacodegeeks.com/2013/11/java-implementation-of-optimal-string-alignment.html------------------------------------------------------------------------------------------------------------
小学5年级英语单词背诵第一课
dcj3sjt126com
english word
long 长的
show 给...看,出示
mouth 口,嘴
write 写
use 用,使用
take 拿,带来
hand 手
clever 聪明的
often 经常
wash 洗
slow 慢的
house 房子
water 水
clean 清洁的
supper 晚餐
out 在外
face 脸,
macvim的使用实战
dcj3sjt126com
mac vim
macvim用的是mac里面的vim, 只不过是一个GUI的APP, 相当于一个壳
1. 下载macvim
https://code.google.com/p/macvim/
2. 了解macvim
:h vim的使用帮助信息
:h macvim
java二分法查找
蕃薯耀
java二分法查找 二分法 java二分法
java二分法查找
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
蕃薯耀 2015年6月23日 11:40:03 星期二
http:/
Spring Cache注解+Memcached
hanqunfeng
spring memcached
Spring3.1 Cache注解
依赖jar包:
<!-- simple-spring-memcached -->
<dependency>
<groupId>com.google.code.simple-spring-memcached</groupId>
<artifactId>simple-s
apache commons io包快速入门
jackyrong
apache commons
原文参考
http://www.javacodegeeks.com/2014/10/apache-commons-io-tutorial.html
Apache Commons IO 包绝对是好东西,地址在http://commons.apache.org/proper/commons-io/,下面用例子分别介绍:
1) 工具类
2
如何学习编程
lampcy
java 编程 C++ c
首先,我想说一下学习思想.学编程其实跟网络游戏有着类似的效果.开始的时候,你会对那些代码,函数等产生很大的兴趣,尤其是刚接触编程的人,刚学习第一种语言的人.可是,当你一步步深入的时候,你会发现你没有了以前那种斗志.就好象你在玩韩国泡菜网游似的,玩到一定程度,每天就是练级练级,完全是一个想冲到高级别的意志力在支持着你.而学编程就更难了,学了两个月后,总是觉得你好象全都学会了,却又什么都做不了,又没有
架构师之spring-----spring3.0新特性的bean加载控制@DependsOn和@Lazy
nannan408
Spring3
1.前言。
如题。
2.描述。
@DependsOn用于强制初始化其他Bean。可以修饰Bean类或方法,使用该Annotation时可以指定一个字符串数组作为参数,每个数组元素对应于一个强制初始化的Bean。
@DependsOn({"steelAxe","abc"})
@Comp
Spring4+quartz2的配置和代码方式调度
Everyday都不同
代码 配置 spring4 quartz2.x 定时任务
前言:这些天简直被quartz虐哭。。因为quartz 2.x版本相比quartz1.x版本的API改动太多,所以,只好自己去查阅底层API……
quartz定时任务必须搞清楚几个概念:
JobDetail——处理类
Trigger——触发器,指定触发时间,必须要有JobDetail属性,即触发对象
Scheduler——调度器,组织处理类和触发器,配置方式一般只需指定触发
Hibernate入门
tntxia
Hibernate
前言
使用面向对象的语言和关系型的数据库,开发起来很繁琐,费时。由于现在流行的数据库都不面向对象。Hibernate 是一个Java的ORM(Object/Relational Mapping)解决方案。
Hibernte不仅关心把Java对象对应到数据库的表中,而且提供了请求和检索的方法。简化了手工进行JDBC操作的流程。
如
Math类
xiaoxing598
Math
一、Java中的数字(Math)类是final类,不可继承。
1、常数 PI:double圆周率 E:double自然对数
2、截取(注意方法的返回类型) double ceil(double d) 返回不小于d的最小整数 double floor(double d) 返回不大于d的整最大数 int round(float f) 返回四舍五入后的整数 long round