mysql存储过程分割字符串
mysql存储过程循环分割字符串示例:业务逻辑: 在sys_menu表中 inster添加菜单数据,在sys_roles_menus表中给菜单分配权限
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566-- 创建菜单的存储过程 并为菜单赋权限 默认权限admin roleId = 1 CREATE PROCEDURE `kq`(IN roleId INT)begin declare i int default 0; declare j int default 0; -- 记录所有的inster 之后的自增主键id declare k varchar(255) default ''; -- 定义用于分割字符串的变量 declare _next TEXT DEFAULT NULL; declare _nextlen INT DEFAU ...
java模拟浏览器做文件上传
java模拟浏览器做文件上传所需jar:
123456789101112131415161718192021<properties> <httpclient.version>4.5.13</httpclient.version> <httpcore.version>4.4.14</httpcore.version></properties> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>${httpclient.version}</version> </dependency> <dependency> <groupId>org.apac ...
使用jacob实现word转pdf
使用jacob实现word转pdf WPS版准备:
java用到的jar包:jacob-1.18
jacob-1.18-x64.dll、jacob-1.18-x86.dll
根据您的操作系统的需要将jacob-1.18-x64.dll或jacob-1.18-x86.dll放置你的jdk/jre的bin目录下
在你的项目中引入jacob-1.18 jar
本下载压缩包内包含jacob-1.18和jacob-1.18-x64.dll、jacob-1.18-x86.dll
下载:官网
补充:
需要安装wps
jacob不得低于1.18
jdk1.8
示例:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768package com.yzw;import com.jacob.activeX.ActiveXComponent;import com.jacob.com.Dispatc ...
解释器设计模式
解释器设计模式(Interpreter Pattern)描述: 解释器设计模式就是提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。
核心思想: 对于一些固定语法构建一个解释 语法 的解释器
使用场景:
可以将一个需要解释执行的语言中的句子表示为一个抽象语法树。
一些重复出现的问题可以用一种简单的语言来进行表达。
一个简单语法需要解释的场景。
解释器设计模式的优点:
可扩展性比较好,灵活。
增加了新的解释表达式的方式。
易于实现简单文法。
解释器设计模式的缺点:
可利用场景比较少。
对于复杂的文法比较难维护。
解释器模式会引起类膨胀。
解释器模式采用递归调用方法。
示例:
抽象出 表达式接口
123interface Interpreter { int interpret();}
相加表达式
1234567891011121314151617181920 class AddInterpreter implements ...
状态设计模式
状态设计模式(State Pattern)描述: 在状态设计模式中类的行为是基于状态改变的,这种类型的模式属于行为设计模式。在状态上设计模式中我们创建表示各种状态和一个行为随这状态对象改变而改变
核心思想: 允许对象在内部状态发生改变时改变它的行为,对象看起来好像改变了它的类
使用场景:
行为随状态的改变而改变的场景
条件,分支语句的代替者
状态设计模式的优点:
封装了转换规则。
枚举可能的状态,在枚举状态之前需要确定状态种类。
将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需要改变对象状态即可改变对象的行为。
允许状态转换逻辑与状态对象合成一体,而不是某一个巨大的条件语句块。
可以让多个环境对象共享一个状态对象,从而减少系统中对象的个数。
状态设计模式的缺点:
状态模式的使用必然会增加系统类和对象的个数。
状态模式的结构与实现都较为复杂,如果使用不当将导致程序结构和代码的混乱。
状态模式对”开闭原则”的支持并不太好,对于可以切换状态的状态模式,增加新的状态类需要修改那些负责状态转换的源代码,否则无法切换到新增状态,而且修改某个状态类的行 ...
备忘录设计模式
备忘录设计模式(Memento Pattern)描述: 备忘录设计模式是行为型设计模式之一,该设计模式用于保存对象当前的状态,并且在之后可以再次恢复到此状态,以便在适当的时候恢复此状态
核心思想: 在不破坏封装的前提, 保存一个对象在某一个时刻的状态或者部分状态
使用场景:
需要保存恢复数据的相关状态场景
提供一个可回滚的操作
可以使用于快照功能
备忘录设计模式的优点
给用户提供了一种可以恢复状态的机制,可以使用户比较方便的回滚到某个历史状态
实现了历史的封装,使用户不用关心状态保存的细节
备忘录设计模式的缺点:
消耗资源,如果类的成员过多会占用比较大的资源,每一次保存都会消耗一定的内存
示例:
备忘录
12345678910111213141516171819202122232425262728293031class Memento { private int menoy; private ArrayList<String> fruits; //窄接口,访问部分信息 public int getMenoy() ...
中介者设计模式
中介者设计模式(Mediator Pattern)描述: 中介者设计模式是用来降低多个对象和类之间通信的复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,代码易于维护。中介模式属于行为型模式
核心思想: 对象与对象之间存在大量的关联关系,这样势必会导致系统结构变的很复杂,同时若一个对象发生变化,我们也需要跟踪与之相关联的对象,同时做出相应的处理
使用场景:
系统中对对象之间存在比较复杂的引用关系,导致它们之间的依赖关系结构混乱而且难以服用改对象
想通过一个中间类来封装多个类中的行为,而不像生成太多的子类
中介者设计模式的优点:
降低了类的复杂度将一对多转化为一对一
各个类之间解耦
符合迪米特法则
中介者设计模式的缺点:
中介者会变得庞大, 变得复杂难以维护
示例:
抽象中介者
1234interface Mediator { void send(String message, Colleague colleague);}
中介者具体实现
12345678910111213141516171819202122 ...
迭代器设计模式
迭代器设计模式(Iterator Pattern)描述: 提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。
核心思想: 使用不同的方式来遍历整个整合对象。
使用场景:
访问聚合对象的内容而无需暴露他的内部表示
需要为聚合对象提供多种访问方式
为便利不同的聚合结构提供一个统一的接口
迭代器设计模式的优点:
支持一不同的方式遍历一个聚合对象
迭代器简化了聚合类
在同一个聚合上可以有多个遍历
在迭代器设计模式中怎加新的聚合类和迭代类都很方便,无需修改源代码 , 符合开闭原则
迭代器设计模式的缺点:
由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性。
示例:
定义迭代器接口
1234 public interface Iterator { boolean hasNext(); E next();}
实现迭代器
123456789101112131415161718192021222324class MyIterator< ...
命令设计模式
命令设计模式(Command Pattern)描述: 命令设计模式是一种数据驱动的设计模式,它属于行为模式,请求以命令的方式包裹在对象中,并传递给调用对象,调用对象寻找可以处理改命令的合适对象,并把该命令传递给相应的对象,该对象执行命令。
核心思想: 将一个情求封装为一个对象,从而可以使用不同的请求对客户进行参数化
使用场景: 认为是命令的地方可以使用命令设计模式
命令设计模式的优点:
降低系统的耦合
新的命令可以很容易的添加到系统中去
命令设计模式是缺点:
会导致某些系统过多的具体命名的类,不符合依赖倒置原则
示例:
抽象命令接口
12345//命令接口interface Order { //执行任务 void execute();}
创建一个请求类
12345678910111213class Stock { private String name = "ABC"; private int quantity = 10; public void buy() { ...
代理设计模式
代理设计模式(Proxy Pattern)描述: 代理设计模式就是一个对象代表另外一个对象的功能, 也就是指客户端并不直接调用实际的对象,而是通过中间的代理对象来间接的调用实际对象, 这种设计设计模式属于结构模式。
核心思想: 为对象提供一种以代理对象控制这个对象的访问
使用场景: 想访问一个类时做一些额外的操作,比如添加日志等
代理设计模式的优点:
职责清晰
高扩展
代理设计模式的缺点:
由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。
实现代理模式需要额外的工作,有些代理模式的实现非常复杂。
示例:
创建一个接口
123public interface Image { void display();}
创建实现接口的类
123456789101112131415161718public class RealImage implements Image { private String fileName; public RealImage(String fileName) ...