自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 收藏
  • 关注

原创 Mybatis-Plus使用小记

使用mybatsi-plus增强在使用mybatis时的效率。mybatsi-plus更多的功能请参考mybatis-plus,这里主要介绍一下:代码生成器、CURD接口。引入jar包<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.3.2<

2020-12-26 15:08:44 865

原创 javax validation

使用protobuf时,对参数的校验很不方便,多是要手动编写一堆if-else的判断条件。介绍下使用javax validation来做参数校验,减少代码量、提供开发效率、定制统一的错误返回结果。原生的校验注解有:注解作用@Size判断集合或字符的大小@NotEmpty判断集合或字符不能为空@Pattern判断正则表达式是否满足@PastOrPresent判断日期类型是否小于等于某时@Past判断日期类型是否小于某时@FutureOrPrese

2020-12-26 14:55:42 756

原创 JavaBeans映射工具比较

JavaBeans映射工具比较BeanUtilsBeanCopierOrika多对一List映射MapStructOrika、MapStruct耗时比较定义一些基础对象// 定义转换的实体public class OrikaDTO { private Integer id; private String name; private Date createTime; private Timestamp lastUpdateTime; priva

2020-12-26 14:39:58 626

原创 使用JsonFormat映射protobuf和javabean

使用JsonFormat映射protobuf和javabeanprotobuf2protobuf3总结JsonFomat是谷歌官方推出的protobuf映射工具,可以将protobuf对象转换成JSON,所以我们可以使用JsonFomat转换成的json在javabean和protobuf对象间转换。JsonFormat有两个版本:com.googlecode.protobuf.format.JsonFormat(以下简称为F.JsonFormat)和com.google.protobuf.util.J

2020-12-26 14:23:59 3952

原创 MapStruct文档(十三)——问题分析

12.1、AbstractProcessorAbstractProcessor可以在编译时获取注解,生成代码。主要的方法有:init:做一些初始化操作。process:核心处理。返回是boolean类型,false表示继续由其他处理器处理该“元素(包、类、方法、变量等)”上的注解类型(当前要处理的注解集合)。getSupportedAnnotationTypes:获取可以处理的注解。可以在AbstractProcessor的实现类上使用@SupportedAnnotationTyp...

2020-12-10 13:51:55 3040

原创 MapStruct文档(十二)——protobuf映射

目录11.1、protobuf211.2、protobuf311.1、protobuf2定义一些基础类enum DownloadResourceTypeEnum{ download_resource_type_enum_audio = 0; //音频 download_resource_type_enum_vedio = 1; //视频 download_resource_type_enum_picture = 2; //图片 download_resource..

2020-12-10 13:36:39 3094

原创 MapStruct文档(十一)——SPI

mapstruct提供了一些列SPI,供我们自定义实现一些功能:AccessorNamingStrategy(实现自定义的get/set,获取字段名)、DefaultProvider(实现自定义的建造者)、MappingExclusionProvider(实现自定义的排除,也就是不自动映射字段)、EnumMappingStrategy(实现自定义的枚举命名)、EnumTransformationStrategy(实现自定义的枚举转换)。要实现自定义功能要先建一个项目,可以打包成jar包,自定义的实现以上

2020-12-10 11:11:54 1240 1

原创 MapStruct文档(十)——映射扩展

目录9.1、*装饰器映射9.2、映射前置/后置方法9.3、循环嵌套对象调用前后置方法9.1、*装饰器映射在进行映射时可以通过装饰器模式,为目标对象设置一些,不能由源对象直接生成或者源对象没有的属性。spring注入策略的装饰器映射使用@DecoratedWith注解制定装饰器。装饰器中使用@Qualifier("delegate")指定注入的bean。@Mapper@DecoratedWith(TestDecotator.class)public interface

2020-12-09 16:19:29 4096

原创 MapStruct文档(九)——高级映射选项

目录8.1、映射配置继承8.2、逆映射8.3、共享配置8.3.1、MappingInheritanceStrategy.EXPLICIT8.3.2、MappingInheritanceStrategy.AUTO_INHERIT_FROM_CONFIG8.3.3、MappingInheritanceStrategy.AUTO_INHERIT_REVERSE_FROM_CONFIG8.3.4、MappingInheritanceStrategy.AUTO_INHERIT_ALL_FR

2020-12-09 16:16:54 9949

原创 MapStruct文档(八)——高级映射选项

目录7.1、默认值7.2、表达式7.2、确定映射结果的具体类型7.4、NULL映射控制7.4.1、源对象NULL映射7.4.3、在更新时源对象属性NULL映射7.4.3、何时NULL检查7.1、默认值可以给@Mapping的属性defaultValue设置一个值,若果源字段为空,那么目标字段就为此默认值。@Mapper(uses = BaseMapper.class)public interface TestMapper { @Mapping(targ

2020-12-09 16:13:15 8368

原创 MapStruct文档(七)——对象工厂

目录6、对象工厂6.1、映射工厂6.2、更新工厂6、对象工厂6.1、映射工厂在映射成目标对象时,创建目标对象实例,可以使用@ObjectFactory注解的方法取代调用默认的构造方法创建目标对象,工厂方法可以是无参返回类型是目标类型的方法,无参的工厂方法可以不设置@ObjectFactory注解;或有参返回类型是目标类型的方法,参数可以用@TargetType或@Context注解。@Datapublic class TestFivePO { private Te

2020-12-09 16:09:22 980

原创 MapStruct文档(六)——枚举映射

目录5.1、枚举和枚举映射5.2、枚举和String映射5.2.1、enum to String5.2.2、String to enum5.3、自定义名称转换5.1、枚举和枚举映射枚举通常是直接映射到同名的枚举对象中,不同名需@ValueMapping指定,并且源和目标上可以设置MappingConstants.ANY_REMAINING:只能用在source上,标识source中除了同名自动映射和指定映射外,其余所有对象都映射到target对象上。MappingC.

2020-12-09 16:05:46 9147

原创 MapStruct文档(五)——集合映射

目录4.1、List4.2、Map4.3、更新集合4.4、集合策略4.5、*集合属性映射4.5.1、手动创建add方法4.5.2、getter和adder类型不同4.5.3、多个相同参数列表的add方法4.1、List迭代的每一项遵循以上规则。@Mapperpublic interface TestMapper { TestBO testToBO(TestPO testPO); List<TestBO> testToBOS(L

2020-12-09 15:58:59 4503

原创 MapStruct文档(四)——转换

目录3.1、隐式转换3.1.1、枚举、BigDecimal、Date、Timestamp3.1.2、LocalDateTime3.1.3、Boolean3.2、*对象属性转换3.3、将映射目标类型传递给自定义映射器3.4、将上下文或状态对象传递给自定义方法3.5、区别相同参数类型和返回类型的映射方法3.1、隐式转换enum和String BigDecimal(等)、基本数据类(包括包装类)和String java.time.LocalDateTime(等)和.

2020-12-09 15:46:18 7263

原创 MapStruct文档(三)——Spring注入

通常我们的项目都是基于spring的,对象的注入就必不可少。在pom文件的bulid->plugins->plugin(maven-compiler-plugin)->configuration下添加相应配置。mapstruct配置...<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin&lt

2020-12-09 15:38:14 5473

原创 MapStruct文档(二)——映射

1、映射1.1、自定义方法若mapstruct满足不了我们的需求,也可以自己写转换方法。1.1.1、抽象类@Mapperpublic abstract class TestMapper { public TestBO testToBO(TestPO testPO) { TestBO testBO = new TestBO(); testBO.setName(testPO.getName() + "BO"); return ...

2020-12-09 15:20:16 3313

原创 MapStruct文档(一)——简介

mapstruct是一个java的bena对象转换映射工具。只需定义mapper接口,会在编译时动态生成set/get的class实现类文件,在运行时直接调用。速度快,其他性能指标也很好。需要配置的mavne设置...<dependencies> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct</a.

2020-12-09 15:04:40 2529

原创 解释器模式

定义一个语言的文法,并且建立一个解释器来解释该语言中的句子,“语言”是指使用规定格式和语法的代码。其中,Context类用于存储解释器之外的一些全局信息;NumberNode类称作终结符表达式;SymbolNode类称作非终结符表达式;非终结符表达式中包含其他非终结符表达式或终结符表达式,非终结符表达式中的interpret方法通常以递归方式执行。public interface N...

2018-10-27 19:41:16 340

原创 中介者模式

中介者模式通过提供了一个中介类,处理不同类之间复杂的引用关系;将一个网状的系统结构变成一个以中介者对象为中心的星形结构。public interface Mediator { void broadcast(ChatUser chatUser, String message);}public class ChatMediator implements Mediator {...

2018-10-25 14:30:14 122

原创 访问者模式

表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。对象结构中对象对应的类很少改变,但经常需要在此对象结构上定义新的操作。需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免让这些操作"污染"这些对象的类,也不希望在增加新操作时修改这些类。Element抽象元素一般是抽象类或者接口,它定义一个accept()方法,该方法通常以...

2018-10-24 14:21:21 180

原创 状态模式

对象的行为依赖于它的状态,并且可以根据它的状态改变而改变它的相关行为。Context类是一个状态管理器,控制状态转换。public interface State { void action();}public class AliveState implements State { @Override public void action() { ...

2018-10-24 09:48:33 130

原创 备忘录模式

就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。public class Memento { private String value; public Memento(String value) { this.value = value; } public Stri...

2018-10-22 16:39:10 111

原创 命令模式

用于将命令的请求者和命令的执行者解耦。public class ToyCar { public void Forward() { System.out.println("forward"); } public void Back() { System.out.println("back"); }}public int...

2018-10-21 17:16:53 150

原创 责任链模式

每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者。public abstract class StringHandler { private StringHandler nextHandler; public StringHandler setNextHandler(StringHandler nextHandler) ...

2018-10-20 10:50:51 131

原创 迭代子模式

一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。分为:宽接口聚集,又叫做白盒聚合;窄接口聚合,又叫做黑盒聚合;区别在于白盒聚合向外部提供了操作聚合元素的方法。白盒聚合/** * * 外部迭代接口 */public interface Iterator { boolean hasNext(); String next();}pub...

2018-10-19 16:32:51 113

原创 观察者模式

定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。public interface User { void update(String message);}public class Worker implements User { @Override public void update(String m...

2018-10-16 20:55:44 2060

原创 模板模式

定义一个操作中的算法的步骤框架,而将一些具体实现放到子类中。模板方法使得子类可以在不改变一个算法的结构步骤的情况下就可重定义该算法的某些特定步骤的实现。public abstract class Dinner { void wash() { System.out.println("wash"); } abstract void cut(); ...

2018-10-15 16:02:35 99

原创 享元模式

主要用于减少创建对象的数量,通常和工厂模式连用。public interface Shape { void draw();}public class Circle implements Shape { @Override public void draw() { System.out.println("draw circle"); }...

2018-10-13 08:57:51 88

原创 组合模式

组合多个对象形成树形结构以表示“整体-部分”的结构层次。Component :组合中的对象接口,定义共有接口;Leaf:“部分”,叶子对象;Composite:容器,“整体”对象,实现与叶子对象有关操作。public abstract class File { String name; public File(String name) { this.na...

2018-10-12 17:48:05 106

原创 策略模式

可相互替换一系列的算法或行为;避免使用多重条件判断,扩展性好。public interface Calculator { void getResult();}public class AddMethod implements Calculator { @Override public void getResult() { System.out...

2018-10-12 09:52:21 126

原创 外观模式

隐藏系统中各个子系统的细节,提供一个统一的接口;但不符合开闭原则。public class SubSystem1 { public void operation1() { System.out.println("operation1"); } public void operation2() { System.out.printl...

2018-10-11 15:30:24 105

原创 桥接模式

桥接用于把抽象化与实现化解耦,使得二者可以独立变化。在一个类存在多个独立变化的维度,多个维度都需要独立进行扩展,而且多个维度可以进行组合的情况下可以使用桥接模式。其中,抽象部分为与业务密切相关的核心维度,其他部分为实现部分;抽象部分关联着实现部分。public interface Color { void paint();}public class Red implemen...

2018-10-10 13:54:57 113

原创 代理模式

可以隐藏委托类的实现,实现客户与委托类间的解耦,减少冗余代码。静态代理与动态代理的区别在于,代理类是否是手动编写的;动态代理有JDK动态代理和Cglib动态代理,后者针对没有接口的类。静态代理public interface House { void buy();}public class HouseImpl implements House { @Over...

2018-10-09 11:34:49 115

原创 适配器模式

将现有的不能满足需求的方法转换成功能相同的满足需求的方法,类适配器和对象适配器类似;而接口适配器还可以满足实现接口中的部分方法的要求。类适配器模式public class AC220 { public void charge() { System.out.println("AC220V"); }}public interface DC5 { ...

2018-10-08 10:40:26 158

原创 装饰器模式

动态地给一个对象添加一些额外的部分。防止类膨胀。public interface Car { void make();}public class Benz implements Car { @Override public void make() { System.out.println("make Benz"); }}publ...

2018-10-07 09:29:06 178

原创 原型模式

浅拷贝与深拷贝的区别在于,引用类型是否指向同一个内存地址。浅拷贝public class Attachment { private String name; public String getName() { return name; } public void setName(String name) { this.n...

2018-10-06 08:58:35 196

原创 建造者模式

建造者模式和工厂模式有点类似,区别在于:建造者模式创建的是一个完整的对象,侧重于一步步构造;工厂模式创建的是一系列相似的对象。public class Actor { private String role; private String sex; private String figure; public String getRole() { ...

2018-10-05 13:22:02 222

原创 单例模式

这里直接推荐两种线程安全写法。Double-Checkpublic class DoubleCheckSingleton { private volatile static DoubleCheckSingleton doubleCheckSingleton; private DoubleCheckSingleton() { } public stati...

2018-10-04 08:31:01 178

原创 简单工厂模式,工厂方法模式,抽象工厂模式

不用关注创建对象的过程,就能获得实例;减少new操作。简单工厂模式public interface Shape { void draw();}public class Triangle implements Shape { @Override public void draw() { System.out.println("draw ...

2018-10-03 09:04:13 176

原创 shiro小结

从本篇起,开始做一些日常工作小结。由于本人依旧属于刚入门级别,所以做出的一些总结难免会有一些不严谨,甚至是错误;但本人并不想误人子弟,只是想记录的轨迹,仅此而已。使用shiro,先要导入相关jar包使用IDEA的,且创建的是maven工程的,可直接在pom.xml引入 &lt;dependency&gt; &lt;groupId&gt;org.ap...

2017-06-12 11:25:10 274

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除