【设计模式】-策略模式:优雅处理条件逻辑 策略模式(Strategy Pattern)是一种行为型设计模式,它允许在运行时根据不同的条件选择不同的算法或行为。它将每个条件分支的逻辑封装在一个独立的类中,使得它们可以独立变化,互不影响。策略模式使用了面向对象的封装、继承和多态等特性,使得代码具备高内聚低耦合的特点。通过将条件逻辑的变化封装到策略类中,不仅可以简化代码的编写,还能提高代码的可维护性、可扩展性和可重用性。通过策略模式,我们可以优雅地处理条件逻辑,将各个条件分支的逻辑封装到独立的策略类中,使得代码结构清晰、易于扩展和维护。
【设计模式】-装饰器模式 首先,我们需要定义一个接口或抽象类,它定义了核心功能的方法。这个接口或抽象类是被装饰的对象的类型,也是装饰器对象的类型。接下来,我们定义一个装饰器类,它实现了相同的接口或抽象类,并且持有一个核心功能对象的引用。} }
【设计模式】-代理模式 在软件开发中,经常遇到需要对某个对象进行控制或者监控的场景。而直接修改对象的代码可能使代码变得复杂且难以维护。这时,使用代理模式(Proxy Pattern)可以很好地解决这个问题。代理模式是一种结构型设计模式,,实现对原有对象的控制或扩展。Java中的代理模式常用于实现日志记录权限控制事务控制等功能。
【设计模式】-建造者模式 建造者模式通过将对象的构建过程与表示分离,使得同样的构建过程可以创建不同的表示。它可以帮助我们创建复杂的对象,并保证对象的构建过程可配置和可扩展。在实际应用中,建造者模式具有较高的灵活性和可扩展性。
【设计模式】-工厂方法模式 该工厂类的子类负责具体的对象创建,每个子类都可以通过实现工厂接口的方式来创建自己的对象。在实际应用中,我们经常需要根据不同的条件或者参数来创建不同的对象。使用工厂方法模式,我们可以通过不同的工厂子类来创建不同的对象,而无需在使用对象的地方编写判断条件或者创建对象的具体代码。
【设计模式】-单例模式 如果对象不存在时,多个线程执行第二行,很有可能都会进入到if方法体中,虽然同一时刻只有一个线程可以获取锁,但是进来的线程已经都在队列中了。如果不加第四行的判断,进来的线程迟早都会获取到锁资源,进而实例化一个新的对象。原理:维护一组单例类的实例,将这些实例存放在一个单例Map中,对于已经登记过的实例,则从Map直接返回,对于没有登记的,则先登记,然后返回。饿汉式,在类创建的同时就已经创建好一个静态的对象,并且以后都不需要重新创建,所以不存在线程不安全的问题。我用的比较少,感兴趣的可以去搜一下。
关于mybatis批量更新(updateBatch)的问题 关于使用循环,依次执行多条update的方式方式如下:<update id="updateBatch"> <foreach collection="list" item="item" index="index" separator=";" open="" close=""> update history_max_num set max_num = #{item.maxNum,jdbcType=DECIMAL} where id = #{
使用docker搭建ftp服务器 最近在做的一个调度系统的需求里,有一个需求,需要用到ftp服务器进行文件的下载和上传。刚好新分配的两个linux服务器上没有搭建ftp,想着就用docker安装一下。安装的方式,参照:Linux下使用docker搭建ftp服务器 - william_zhao - 博客园顺序无非,拉取镜像,启动服务器,访问服务器。1)docker拉取ftp镜像docker pull fauria/vsftpd2)启动ftp服务器docker run -d -p 2121:21 -p 2020.
Java8 stream 多条件排序,且支持自定义排序 需求:从数据库中查询到实体类的list,需要根据实体类中的某几个字段进行排序。假设:实体类如下:static class SortExample{ private Integer id; private String region; private String fileType; private String fileCode; private String fileSize; ...
命令记录-mysql本地允许远程访问 本地mysql允许远程访问,修改命令如下 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;...
关于Mybatis查询Sql结果未映射到对应得实体类上 1)如果你写了resultMap的xml映射,那么select标签的属性选择resultMap。且确保column属性中的值对应sql 语句中的列,property属性中的值对应的是实体类中字段名2)如果你没写resultMap的xml映射,那也没事。mybatis会自动帮你映射。但是你的select标签的属性要使用resultType属性,用于指向具体的实体类。但同时,你要满足上面三个条件之一。同时确保mapUnderscoreToCamelCase参数为true。
关于Cannot add or update a child row: a foreign key constraint fails 报错记录 今天导入表数据的时候,insert语句报错,Cannot add or update a child row: a foreign key constraint fails看了访问比较多的是一篇文章,照了试了一下,也不行。明明数据是从另一个库中导出来的,只是导入本地而已。,不应该有问题看了 这个文章 救了老命1)先取消外键约束SET FOREIGN_KEY_CHECKS=0; 2)修改表数据。我的就直接执行insert语句了3)恢复外键约束SET FOREIG...
关于RUOYI-CLOUD-NACOS系统的部署 代码:RuoYi-Cloud:(nacos版本)参考:RuoYi-Cloud从配置到运行 - 惊鸿难定 - 博客园RuoYi-Cloud版本分为两种,分别是eureka和nacos的我这里采用的nacos
Linux上安装多个JDK,并随意切换版本 今天在一个新的服务器上运行项目,发现没有设置JDK的环境变量,导致$JAVA_HOME找不到jdk的安装位置。而且发现JDK版本也不太符合要求。于是又要重装JDK。但是新的JDK不想卸载,能怎么办,只能安装好几个,留着给大家自己选喽1)首先查看当前服务器JDK的版本库,以及安装位置alternatives --config java使用alternatives --config java命令,本身就是选择JDK版本,选择的时候,就能看到当前服务器可以使用的JDK版本,无论是系统自带还是人工
修改Mysql字符集 新建mysql数据库的时候,没有指定字符集和排序规则,导致插入中文的时候,插入失败。由于表已经建好了,使用Dbeaver可以直接修改字符集和排序规则。修改完成之后,点击右下角的save 按钮,再弹框中点击执行按钮。按理说这里样子刷新之后,字符集就改过来了。但是今天新建的好几张表都没修改成功。后来直接在页面执行下面sql语句。竟然就可以了ALTER TABLE TABLE_NAME CONVERT TO CHARACTER SET utf8mb4 COLLATE u
SpringBoot动态获取项目部署的端口号 参考:通过Spring boot编码获取当前程序运行的host和端口号_不当初-CSDN博客方法是采用Spring提供的ApplicationListener接口来监听项目的启动,在启动的时候获取到项目的端口号。然后我自己试着采用上面的链接,测试发现,除了项目启动时,能正常打印出端口号,其他业务逻辑执行的时候,获取到的端口号都为0尝试改了一下,代码如下,试着还行,凑合着先用import lombok.Data;import org.springframework.boot.we
WINDOWS安装多个JDK,并随意切换JDK版本 最近新接手一个项目。启动的时候,发现有些jar和现在正在使用的JDK版本不一致,一直启动有问题。想着就多装一个JDK。由于为了保证java的运行环境和编译环境保持一致,就需要我们设置jdk的环境变量。),多个JDK,就涉及到JDK环境变量的切换问题。
Linux (centos)开放端口 以下命令,适用 Centos7开放或者关闭具体端口1) 首先查看现在所有已开放的端口firewall-cmd --zone=public --list-ports2)开放指定端口firewall-cmd --zone=public --add-port=27017/tcp --permanent设置完成,下面会出现success,但是这时只是设置成功,还没生效。生效需要重启以下防火墙:firewall-cmd --reload3) 移除指定端口firewal...