做个外贸网站大概多少钱,安徽金开建设集团网站,自己做网站需要缴费么,练手网站开发目录
目的
准备
注意
相同类型-属性名不同
实体类
映射
使用
验证-查看实现类
测试
不同类型(策略模式) 实体类
映射
工具类
使用#xff1a;对象拷贝
验证-查看实现类
测试
使用#xff1a;集合拷贝
测试
策略模式说明
准备-依赖 目的
简化 BeanUtils.…目录
目的
准备
注意
相同类型-属性名不同
实体类
映射
使用
验证-查看实现类
测试
不同类型(策略模式) 实体类
映射
工具类
使用对象拷贝
验证-查看实现类
测试
使用集合拷贝
测试
策略模式说明
准备-依赖 目的
简化 BeanUtils.copyProperties 属性对拷代码自动生成空判断结合策略模式自定义转换
集合对拷一行代码就能完成以前 先new再 for循环再add的多行代码而且也不用判空 准备
这里我将开发中经常用到的全部依赖都列举出来若下载不下来依赖将settings.xml替换成我博客存档的那一份此处为了不影响观看放在文章末尾处。 注意
写好转换之后maven 记得 clean install查看一下生成的实现类有没有问题
实现类在 target 里面若target没有执行下列操作 相同类型-属性名不同
将 下面 Doctor 中的 i1 s1 分别转给 DoctorDto 中的 i2 s2
实体类
Data
NoArgsConstructor
AllArgsConstructor
public class Doctor {private int id;private String name;String s1;int i1;
}
Data
AllArgsConstructor
NoArgsConstructor
public class DoctorDto {private int id;private String name;private String s2;private int i2;
} 映射
Mapper(componentModel spring)
public interface BeanConvert {BeanConvert INSTANCE Mappers.getMapper(BeanConvert.class);/*** 不一致的属性映射*/Mappings({Mapping(target i2, source i1),Mapping(target s2, source s1)})DoctorDto toDto(Doctor doctor);
} 使用 GetMapping(/test)public DoctorDto get() {Doctor doctor new Doctor();doctor.setId(1);doctor.setName(张三);doctor.setI1(1);doctor.setS1(1);return BeanConvert.INSTANCE.toDto(doctor);} 验证-查看实现类
clean install 重启 测试
可以看到 i1s1中的值已经过来了 不同类型(策略模式) 实体类
将下面 Sku2 中的 Long date Integer code 分别转给 SkuDTO2 中的 Date date String value 一个是时间戳转换一个是枚举转换
Data
NoArgsConstructor
AllArgsConstructor
FieldDefaults(level AccessLevel.PRIVATE)
public class Sku2 {Long skuId;String skuCode;String skuPrice;ListString nameList;Long date;Integer code;
}
Data
NoArgsConstructor
AllArgsConstructor
FieldDefaults(level AccessLevel.PRIVATE)
public class SkuDTO2 {Long skuId;String skuCode;String skuPrice;ListString nameList;Date date;String value;
} 映射
uses 定义了两个策略一个负责转换时间戳一个负责转换枚举
Mapper(componentModel spring, uses {TimeConvertStrategy.class, EnumConvertStrategy.class})
public interface BeanConvert {/*** 策略模式测试*/Mapping(target value, source code)SkuDTO2 domain2Dto(Sku2 sku2);}
Component
public class EnumConvertStrategy {public String convert(Integer code) {return MyEnum.getByCode(code);}}
Component
public class TimeConvertStrategy {public Date date2TimeStamp(Long timeStamp) {if (timeStamp null) {return null;}return new Date(timeStamp);}}
public enum MyEnum {A(1,哈哈),B(2,呵呵);private final Integer code;private final String msg;MyEnum(int code, String msg) {this.code code;this.msg msg;}public Integer getCode() {return code;}public String getMsg() {return msg;}public static String getByCode(Integer code) {if (code null) {return null;}for (MyEnum value : MyEnum.values()) {if (value.getCode().equals(code)) {return value.getMsg();}}return null;}} 工具类
这里使用工具类主要是辅助容器中的bean初始化的包括我们定义的策略的初始化
/*** ApplicationContextAware 接口可以让 Bean 获取到 ApplicationContext 对象* 通过这个对象可以获取 Spring 容器中的其他 Bean实例 或一些组件*/
Component
public class ConvertSupport implements ApplicationContextAware {private static BeanConvert beanConvert;/*** 启动的时候直接获取到 beanConvert 的实例*/Overridepublic void setApplicationContext(ApplicationContext context) throws BeansException {// 这里如果没有执行说明没有注入容器但是我有了Component注解说明其未生效主启动类ComponentScan指定一下if (beanConvert null) {beanConvert context.getBean(BeanConvert.class);System.out.println(执行过这里);}}/*** 列表转换*/public static I, O ListO copyList(ListI inputList, BiFunctionBeanConvert, I, O function) {if (CollectionUtils.isEmpty(inputList)) {return Collections.emptyList();}ListO resultList new ArrayList(inputList.size());for (I input : inputList) {resultList.add(function.apply(beanConvert, input));}return resultList;}/*** bean to bean*/public static I, O O castBean(I input, BiFunctionBeanConvert, I, O function) {return function.apply(beanConvert, input);}} 使用对象拷贝 GetMapping(/test2)public SkuDTO2 get2() {Sku2 sku2 new Sku2();sku2.setSkuId(1L);sku2.setSkuCode(2);sku2.setNameList(Lists.newArrayList(测, 试));sku2.setDate(new Date().getTime());sku2.setCode(1);return ConvertSupport.castBean(sku2, BeanConvert::domain2Dto);} 验证-查看实现类
clean install 重启 测试 使用集合拷贝 GetMapping(/test3)public ListDoctorDto get3() {ListDoctor list Lists.newArrayList(new Doctor(1, 张三, 1, 1),new Doctor(2, 李四, 2, 2),new Doctor(3, 王五, 3, 3));return ConvertSupport.copyList(list, BeanConvert::toDto);}
此后一行代码就能完成以前 先new再 for循环再add的多行代码而且也不用判空 测试 策略模式说明
上面使用的是用来处理不同类型平常去除 if else 的使用方式
先定义两个 策略和上面类似spring管理后通过策略内部判断决定怎么走方法再抽象出一层
/*** 策略1*/
Component
public class Situation1 implements Situation {private static final String value 用户传过来的值为1;/*** 判断进入哪个策略(if)*/Overridepublic Boolean judge(String val) {return value.equals(val);}/*** 逻辑处理*/Overridepublic int logic(int a, int b) {return a b;}
}
/*** 策略2*/
Component
public class Situation2 implements Situation {private static final String value 用户传过来的值为2;/*** 判断进入哪个策略(if)*/Overridepublic Boolean judge(String val) {return value.equals(val);}/*** 逻辑处理*/Overridepublic int logic(int a, int b) {return a - b;}
}
public interface Situation {/*** 判断进入哪个策略(if)*/Boolean judge(String val);/*** 逻辑处理*/int logic(int a, int b);
}
RestController
public class StrategyTest {Autowiredprivate ApplicationContext applicationContext;GetMapping(/test/st)public void test() {String value 用户传过来的值为2;MapString, Situation beans applicationContext.getBeansOfType(Situation.class);beans.forEach((k, Strategy) - {// 判断用户传过来的值从而决定进入哪个策略if (Strategy.judge(value)) {int num Strategy.logic(8, 2);System.out.println(num);}});}
} 准备-依赖
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.6.1/versionrelativePath/ !-- lookup parent from repository --/parentgroupIdcom.mytest/groupIdartifactIdspringboot-demo/artifactIdversion0.0.1-SNAPSHOT/versionnamespringboot-demo/namedescriptionspringboot-demo/descriptionpropertiesorg.mapstruct.version1.5.0.RC1/org.mapstruct.versionorg.projectlombok.version1.18.22/org.projectlombok.versionlombok-mapstruct-binding.version0.2.0/lombok-mapstruct-binding.versionmaven.compiler.source1.8/maven.compiler.sourcemaven.compiler.target1.8/maven.compiler.target/propertiesdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!--HuTool为我们提供的一些便捷工具。--dependencygroupIdcn.hutool/groupIdartifactIdhutool-all/artifactIdversion4.1.14/version/dependency!--Valid--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-validation/artifactIdversion2.3.2.RELEASE/version/dependency!--自定义注解--dependencygroupIdjavax.validation/groupIdartifactIdvalidation-api/artifactIdversion2.0.1.Final/version/dependency!-- 定时任务 --dependencygroupIdorg.quartz-scheduler/groupIdartifactIdquartz/artifactIdexclusionsexclusiongroupIdcom.mchange/groupIdartifactIdc3p0/artifactId/exclusion/exclusions/dependency!-- 解析客户端操作系统、浏览器等 --dependencygroupIdeu.bitwalker/groupIdartifactIdUserAgentUtils/artifactIdversion1.21/version/dependency!-- pagehelper 分页插件 注意 pagehelper 和 spring-boot-starter-parent 版本容易出现循环依赖 一般通过加Lazy解决这里通过版本号解决--dependencygroupIdcom.github.pagehelper/groupIdartifactIdpagehelper-spring-boot-starter/artifactIdversion1.4.1/version/dependency!--HttpUtils需要的所有依赖--dependencygroupIdcom.alibaba/groupIdartifactIdfastjson/artifactIdversion1.2.15/version/dependencydependencygroupIdorg.apache.httpcomponents/groupIdartifactIdhttpclient/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-configuration-processor/artifactIdoptionaltrue/optional/dependency!--mybatisplus--dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion3.4.1/version/dependency!--DateTime 需要的依赖由于没有版本号管理如果不写version上面有一处会爆红--dependencygroupIdjoda-time/groupIdartifactIdjoda-time/artifactIdversion2.9.4/version/dependency!--代码生成器--dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-generator/artifactIdversion3.4.1/version/dependency!--velocity模板引擎--dependencygroupIdorg.apache.velocity/groupIdartifactIdvelocity-engine-core/artifactIdversion2.3/version/dependency!-- easyexcel依赖 --dependencygroupIdcom.alibaba/groupIdartifactIdeasyexcel/artifactIdversion3.0.5/version/dependencydependencygroupIdcn.afterturn/groupIdartifactIdeasypoi-base/artifactIdversion4.3.0/version/dependencydependencygroupIdcn.afterturn/groupIdartifactIdeasypoi-web/artifactIdversion4.3.0/version/dependencydependencygroupIdcn.afterturn/groupIdartifactIdeasypoi-annotation/artifactIdversion4.3.0/version/dependencydependencygroupIdcom.alibaba/groupIdartifactIddruid/artifactIdversion1.1.16/version/dependency!--Lists.partition 需要的依赖--dependencygroupIdcom.google.guava/groupIdartifactIdguava/artifactIdversion25.1-jre/version/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactIdexclusionsexclusiongroupIdio.lettuce/groupIdartifactIdlettuce-core/artifactId/exclusion/exclusions/dependency!-- lt;!ndash;jedisredis客户端ndash;gt;--dependencygroupIdredis.clients/groupIdartifactIdjedis/artifactId/dependency!-- lt;!ndash;使用redisson作为所有分布式锁分布式对象等功能框架也可以使用springboot的方式就不用自己Configuration了ndash;gt;--dependencygroupIdorg.redisson/groupIdartifactIdredisson/artifactIdversion3.13.3/version/dependency!--mysql驱动--dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.17/version/dependencydependencygroupIdorg.mapstruct/groupIdartifactIdmapstruct/artifactIdversion${org.mapstruct.version}/version/dependency!-- 特别注意 mapstruct 和 lombok 的顺序顺序出问题实现类就不映射了 --dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion${org.projectlombok.version}/versionscopeprovided/scope/dependencydependencygroupIdorg.apache.commons/groupIdartifactIdcommons-lang3/artifactIdversion3.10/version/dependency!--CollectionUtils依赖--dependencygroupIdcommons-collections/groupIdartifactIdcommons-collections/artifactIdversion3.2.2/version/dependencydependencygroupIdcom.google.code.google-collections/groupIdartifactIdgoogle-collect/artifactIdversionsnapshot-20080530/version/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-aop/artifactId/dependency!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 --
!-- dependencygroupIdorg.slf4j/groupIdartifactIdslf4j-log4j12/artifactId/dependency--dependencygroupIdcom.alibaba/groupIdartifactIdtransmittable-thread-local/artifactIdversion2.11.5/version/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependencydependencygroupIdcom.google.guava/groupIdartifactIdguava/artifactIdversion21.0/version/dependencydependencygroupIdjavax.persistence/groupIdartifactIdpersistence-api/artifactIdversion1.0/version/dependency!--注意3.0.0 版本 http://localhost:8081/swagger-ui.html 页面可能登陆不上去--dependencygroupIdio.springfox/groupIdartifactIdspringfox-swagger2/artifactIdversion2.9.2/version/dependencydependencygroupIdio.springfox/groupIdartifactIdspringfox-swagger-ui/artifactIdversion2.9.2/version/dependency/dependencies!-- 特别注意 mapstruct 和 lombok 的顺序顺序出问题实现类就不映射了 --buildpluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-compiler-plugin/artifactIdversion3.8.1/versionconfigurationsource1.8/sourcetarget1.8/targetannotationProcessorPathspathgroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion${org.projectlombok.version}/version/path!-- This is needed when using Lombok 1.18.16 and above --pathgroupIdorg.projectlombok/groupIdartifactIdlombok-mapstruct-binding/artifactIdversion${lombok-mapstruct-binding.version}/version/path!-- Mapstruct should follow the lombok path(s) --pathgroupIdorg.mapstruct/groupIdartifactIdmapstruct-processor/artifactIdversion${org.mapstruct.version}/version/path/annotationProcessorPaths/configuration/plugin/pluginsresourcesresourcedirectorysrc/main/java/directoryincludesinclude**/*.properties/includeinclude**/*.xml/includeinclude**/*.yml/include/includesfilteringfalse/filtering/resourceresourcedirectorysrc/main/resources/directoryincludesinclude**/*.properties/includeinclude**/*.xml/includeinclude**/*.yml/include/includesfilteringfalse/filtering/resource/resources/build/project
文章转载自: http://www.morning.hjsrl.cn.gov.cn.hjsrl.cn http://www.morning.hnrdtz.com.gov.cn.hnrdtz.com http://www.morning.ho-use.cn.gov.cn.ho-use.cn http://www.morning.xnbd.cn.gov.cn.xnbd.cn http://www.morning.jwtwf.cn.gov.cn.jwtwf.cn http://www.morning.ygrkg.cn.gov.cn.ygrkg.cn http://www.morning.plqhb.cn.gov.cn.plqhb.cn http://www.morning.dlhxj.cn.gov.cn.dlhxj.cn http://www.morning.gbcnz.cn.gov.cn.gbcnz.cn http://www.morning.wcjk.cn.gov.cn.wcjk.cn http://www.morning.fgrkc.cn.gov.cn.fgrkc.cn http://www.morning.pngph.cn.gov.cn.pngph.cn http://www.morning.zylzk.cn.gov.cn.zylzk.cn http://www.morning.trqhd.cn.gov.cn.trqhd.cn http://www.morning.eronghe.com.gov.cn.eronghe.com http://www.morning.xctdn.cn.gov.cn.xctdn.cn http://www.morning.tnkwj.cn.gov.cn.tnkwj.cn http://www.morning.zkzjm.cn.gov.cn.zkzjm.cn http://www.morning.ysnbq.cn.gov.cn.ysnbq.cn http://www.morning.gwdnl.cn.gov.cn.gwdnl.cn http://www.morning.mknxd.cn.gov.cn.mknxd.cn http://www.morning.wctqc.cn.gov.cn.wctqc.cn http://www.morning.stph.cn.gov.cn.stph.cn http://www.morning.fhjnh.cn.gov.cn.fhjnh.cn http://www.morning.ngkng.cn.gov.cn.ngkng.cn http://www.morning.wcghr.cn.gov.cn.wcghr.cn http://www.morning.chkfp.cn.gov.cn.chkfp.cn http://www.morning.lcmhq.cn.gov.cn.lcmhq.cn http://www.morning.pghfy.cn.gov.cn.pghfy.cn http://www.morning.rkdnm.cn.gov.cn.rkdnm.cn http://www.morning.nccyc.cn.gov.cn.nccyc.cn http://www.morning.mtrz.cn.gov.cn.mtrz.cn http://www.morning.snbry.cn.gov.cn.snbry.cn http://www.morning.hcsqznn.cn.gov.cn.hcsqznn.cn http://www.morning.bsrcr.cn.gov.cn.bsrcr.cn http://www.morning.nqbkb.cn.gov.cn.nqbkb.cn http://www.morning.zlsmx.cn.gov.cn.zlsmx.cn http://www.morning.qnxkm.cn.gov.cn.qnxkm.cn http://www.morning.lkfsk.cn.gov.cn.lkfsk.cn http://www.morning.kqbzy.cn.gov.cn.kqbzy.cn http://www.morning.ndxrm.cn.gov.cn.ndxrm.cn http://www.morning.paxkhqq.cn.gov.cn.paxkhqq.cn http://www.morning.bwznl.cn.gov.cn.bwznl.cn http://www.morning.fhghy.cn.gov.cn.fhghy.cn http://www.morning.ndhxn.cn.gov.cn.ndhxn.cn http://www.morning.plfrk.cn.gov.cn.plfrk.cn http://www.morning.dbphz.cn.gov.cn.dbphz.cn http://www.morning.whothehellami.com.gov.cn.whothehellami.com http://www.morning.zpfr.cn.gov.cn.zpfr.cn http://www.morning.dwgcx.cn.gov.cn.dwgcx.cn http://www.morning.yhjlg.cn.gov.cn.yhjlg.cn http://www.morning.pdwny.cn.gov.cn.pdwny.cn http://www.morning.txltb.cn.gov.cn.txltb.cn http://www.morning.ksbmx.cn.gov.cn.ksbmx.cn http://www.morning.jmlgk.cn.gov.cn.jmlgk.cn http://www.morning.jrsgs.cn.gov.cn.jrsgs.cn http://www.morning.ptmsk.cn.gov.cn.ptmsk.cn http://www.morning.dpsgq.cn.gov.cn.dpsgq.cn http://www.morning.sgfpn.cn.gov.cn.sgfpn.cn http://www.morning.nswcw.cn.gov.cn.nswcw.cn http://www.morning.rqhdt.cn.gov.cn.rqhdt.cn http://www.morning.tqbw.cn.gov.cn.tqbw.cn http://www.morning.flchj.cn.gov.cn.flchj.cn http://www.morning.spghj.cn.gov.cn.spghj.cn http://www.morning.mbprq.cn.gov.cn.mbprq.cn http://www.morning.yzktr.cn.gov.cn.yzktr.cn http://www.morning.sxfmg.cn.gov.cn.sxfmg.cn http://www.morning.cbpkr.cn.gov.cn.cbpkr.cn http://www.morning.tqxtx.cn.gov.cn.tqxtx.cn http://www.morning.sfwfk.cn.gov.cn.sfwfk.cn http://www.morning.cjcry.cn.gov.cn.cjcry.cn http://www.morning.jxfsm.cn.gov.cn.jxfsm.cn http://www.morning.mpbgy.cn.gov.cn.mpbgy.cn http://www.morning.zbgqt.cn.gov.cn.zbgqt.cn http://www.morning.gwyml.cn.gov.cn.gwyml.cn http://www.morning.lnnc.cn.gov.cn.lnnc.cn http://www.morning.rkdnm.cn.gov.cn.rkdnm.cn http://www.morning.rjynd.cn.gov.cn.rjynd.cn http://www.morning.ywpcs.cn.gov.cn.ywpcs.cn http://www.morning.crtgd.cn.gov.cn.crtgd.cn