实体类的属性映射怎么可以少了它?
我们都知道,随着一个工程的越来越成熟,模块划分会越来越细,其中实体类一般存于 domain 之中,但 domain 工程最好不要被其他工程依赖,所以其他工程想获取实体类数据时就需要在各自工程写 model,自定义 model 可以根据自身业务需要映射相应的实体属性。这样一来,这个映射工程貌似并不简单了。阿森差点就犯难了……
序
所以阿淼今天就要给大家安利一款叫 mapstruct
的插件,它就是专门用来处理 domin 实体类与 model 类的属性映射的,我们只需定义 mapper 接口,mapstruct 在编译的时候就会自动的帮我们实现这个映射接口,避免了麻烦复杂的映射实现。
那可能有的小伙伴就要问了?为啥不用 BeanUtils
的 copyProperties
方法呢?不也照样可以实现属性的映射么?
这个啊,阿淼我开始也是好奇,所以就和 BeanUtils
深入交流了一番,最后才发现,BeanUtils
就是一个大老粗,只能同属性映射,或者在属性相同的情况下,允许被映射的对象属性少;但当遇到被映射的属性数据类型被修改或者被映射的字段名被修改,则会导致映射失败。而 mapstruct
就是一个巧媳妇儿了,她心思细腻,把我们可能会遇到的情况都给考虑到了(要是阿淼我也能找一个这样的媳妇儿该多好,内心笑出了猪声)
如下是这个插件的开源项目地址和各种例子:
Github地址:https://github.com/mapstruct/mapstruct/
使用例子:https://github.com/mapstruct/mapstruct-examples
一、准备工作
接下来,阿淼将和大家一起去解开这个巧媳妇儿的真正面纱,所以我们还需要做一点准备工作。
1.1、了解@Mapper 注解
从 mybatis3.4.0 开始加入的 @Mapper 注解,目的就是为了不再写mapper映射文件。
我们只需要在 dao 层定义的接口上使用注解就可以实现sql语句的编写,例如:
@Select("select * from user where name = #{name}")
public User find(String name);
如上就是一个简单的使用,虽然简单,但也确实体现出了这个注解的优越性,至少少写了一个xml文件。
但阿淼我今天可不是想跟你探讨 @Mapper
注解,我主要是想去看我的巧媳妇儿 mapstruct
,所以我就只是想说下 @Mapper
注解的 componentModel
属性,componentModel
属性用于指定自动生成的接口实现类的组件类型,这个属性支持四个值:
default: 这是默认的情况,mapstruct 不使用任何组件类型, 可以通过Mappers.getMapper(Class)方式获取自动生成的实例对象。
cdi: the generated mapper is an application-scoped CDI bean and can be retrieved via @Inject
spring: 生成的实现类上面会自动添加一个@Component注解,可以通过Spring的 @Autowired方式进行注入
jsr330: 生成的实现类上会添加@javax.inject.Named 和@Singleton注解,可以通过 @Inject注解获取
1.2、依赖包
首先需要把依赖包导入,主要由两个包组成:
org.mapstruct:mapstruct
:包含了一些必要的注解,例如@Mapping。r若我们使用的JDK版本高于1.8,当我们在pom里面导入依赖时候,建议使用坐标是:org.mapstruct:mapstruct-jdk8
,这可以帮助我们利用一些Java8的新特性。
org.mapstruct:mapstruct-processor
:注解处理器,根据注解自动生成mapper的实现。
org.mapstruct
mapstruct-jdk8
1.2.0.Final
org.mapstruct
mapstruct-processor
1.2.0.Final
好了,准备工作做完了,接下来我们就看看巧媳妇儿巧在什么地方吧。
二、先简单玩一把
2.1、定义实体类以及被映射类
// 实体类
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class User {
private Integer id;
private String name;
private String createTime;
private LocalDateTime updateTime;
}
// 被映射类VO1:和实体类一模一样
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class UserVO1 {
private Integer id;
private String name;
private String createTime;
private LocalDateTime updateTime;
}
// 被映射类VO1:比实体类少一个字段
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class UserVO2 {
private Integer id;
private String name;
private String createTime;
}
2.2、定义接口:
当实体类和被映射对象属性相同或者被映射对象属性值少几个时:
@Mapper(componentModel = "spring")
public interface UserCovertBasic {
UserCovertBasic INSTANCE = Mappers.getMapper(UserCovertBasic.class);
/**
* 字段数量类型数量相同,利用工具BeanUtils也可以实现类似效果
* @param source
* @return
*/
UserVO1 toConvertVO1(User source);
User fromConvertEntity1(UserVO1 userVO1);
/**
* 字段数量类型相同,数量少:仅能让多的转换成少的,故没有fromConvertEntity2
* @param source
* @return
*/
UserVO2 toConvertVO2(User source);
}
从上面的代码可以看出:接口中声明了一个成员变量INSTANCE,母的是让客户端可以访问 Mapper 接口的实现。
2.3、使用
@RestController
public class TestController {
@GetMapping("convert")
public Object convertEntity() {
User user = User.builder()
.id(1)
.name("张三")
.createTime("2020-04-01 11:05:07")
.updateTime(LocalDateTime.now())
.build();
List objectList = new ArrayList<>();
objectList.add(user);
// 使用mapstruct
UserVO1 userVO1 = UserCovertBasic.INSTANCE.toConvertVO1(user);
objectList.add("userVO1:" + UserCovertBasic.INSTANCE.toConvertVO1(user));
objectList.add("userVO1转换回实体类user:" + UserCovertBasic.INSTANCE.fromConvertEntity1(userVO1));
// 输出转换结果
objectList.add("userVO2:" + " | " + UserCovertBasic.INSTANCE.toConvertVO2(user));
// 使用BeanUtils
UserVO2 userVO22 = new UserVO2();
BeanUtils.copyProperties(user, userVO22);
objectList.add("userVO22:" + " | " + userVO22);
return objectList;
}
}
2.4、查看编译结果
通过IDE的反编译功能查看编译后自动生成 UserCovertBasic
的实现类 UserCovertBasicImpl
,内容如下:
@Component
public class UserCovertBasicImpl implements UserCovertBasic {
public UserCovertBasicImpl() {
}
public UserVO1 toConvertVO1(User source) {
if (source == null) {
return null;
} else {
UserVO1 userVO1 = new UserVO1();
userVO1.setId(source.getId());
userVO1.setName(source.getName());
userVO1.setCreateTime(source.getCreateTime());
userVO1.setUpdateTime(source.getUpdateTime());
return userVO1;
}
}
public User fromConvertEntity1(UserVO1 userVO1) {
if (userVO1 == null) {
return null;
} else {
User user = new User();
user.setId(userVO1.getId());
user.setName(userVO1.getName());
user.setCreateTime(userVO1.getCreateTime());
user.setUpdateTime(userVO1.getUpdateTime());
return user;
}
}
public UserVO2 toConvertVO2(User source) {
if (source == null) {
return null;
} else {
UserVO2 userVO2 = new UserVO2();
userVO2.setId(source.getId());
userVO2.setName(source.getName());
userVO2.setCreateTime(source.getCreateTime());
return userVO2;
}
}
}
2.5、浏览器查看结果
好了,一个流程就走完了,是不是感觉贼简单呢?
而且呀,阿淼温馨提醒: 如果是要转换一个集合的话,只需要把这里的实体类换成集合就行了,例如:
List toConvertVOList(List source);
三、不简单的情况
上面已经把整个流程都给过了一遍了,相信大家对 mapstruct
也有了一个基础的了解了,所以接下来的情况我们就不展示全部代码了,毕竟篇幅也有限,所以就直接上关键代码(因为不关键的和上面内容一样,哈哈)
3.1、类型不一致
实体类我们还是沿用 User
;被映射对象 UserVO3
改为:
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class UserVO3 {
private String id;
private String name;
// 实体类该属性是String
private LocalDateTime createTime;
// 实体类该属性是LocalDateTime
private String updateTime;
}
那么我们定义的接口就要稍稍修改一下了:
@Mappings({
@Mapping(target = "createTime", expression = "java(com.java.mmzsblog.util.DateTransform.strToDate(source.getCreateTime()))"),
})
UserVO3 toConvertVO3(User source);
User fromConvertEntity3(UserVO3 userVO3);
上面 expression
指定的表达式内容如下:
public class DateTransform {
public static LocalDateTime strToDate(String str){
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyy-MM-dd HH:mm:ss");
return LocalDateTime.parse("2018-01-12 17:07:05",df);
}
}
通过IDE的反编译功能查看编译后的实现类,结果是这样子的:
从图中我们可以看到,编译时使用了expression中定义的表达式对目标字段 createTime
进行了转换;然后你还会发现 updateTime
字段也被自动从 LocalDateTime 类型转换成了 String 类型。
阿淼小结:
当字段类型不一致时,以下的类型之间是 mapstruct
自动进行类型转换的:
1、基本类型及其他们对应的包装类型。
此时 mapstruct
会自动进行拆装箱。不需要人为的处理
2、基本类型的包装类型和string类型之间
除此之外的类型转换我们可以通过定义表达式来进行指定转换。
3.2、字段名不一致
实体类我们还是沿用 User
;被映射对象 UserVO4
改为:
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class UserVO4 {
// 实体类该属性名是id
private String userId;
// 实体类该属性名是name
private String userName;
private String createTime;
private String updateTime;
}
那么我们定义的接口就要稍稍修改一下了:
@Mappings({
@Mapping(source = "id", target = "userId"),
@Mapping(source = "name", target = "userName")
})
UserVO4 toConvertVO(User source);
User fromConvertEntity(UserVO4 userVO4);
通过IDE的反编译功能查看编译后的实现类,编译后的结果是这样子的:
很明显, mapstruct
通过读取我们配置的字段名对应关系,帮我们把它们赋值在了相对应的位置上,可以说是相当优秀了,但这也仅仅是优秀,而更秀的还请继续往下看:
阿淼小结:
当字段名不一致时,通过使用 @Mappings
注解指定对应关系,编译后即可实现对应字段的赋值。
3.3、属性是枚举类型
实体类我们还是改用 UserEnum
:
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class UserEnum {
private Integer id;
private String name;
private UserTypeEnum userTypeEnum;
}
被映射对象 UserVO5
改为:
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class UserVO5 {
private Integer id;
private String name;
private String type;
}
枚举对象是:
@Getter
@AllArgsConstructor
public enum UserTypeEnum {
Java("000", "Java开发工程师"),
DB("001", "数据库管理员"),
LINUX("002", "Linux运维员");
private String value;
private String title;
}
那么我们定义的接口还是照常定义,不会受到它是枚举就有所变化:
@Mapping(source = "userTypeEnum", target = "type")
UserVO5 toConvertVO5(UserEnum source);
UserEnum fromConvertEntity5(UserVO5 userVO5);
通过IDE的反编译功能查看编译后的实现类,编译后的结果是这样子的:
很明显, mapstruct
通过枚举类型的内容,帮我们把枚举类型转换成字符串,并给type赋值,可谓是小心使得万年船啊。看来这巧媳妇儿不仅仅优秀还心细啊……
源代码
文章中的所有例子已上传github:https://github.com/mmzsblog/mapstructDemo
到此这篇关于详解Java中的mapstruct使用的文章就介绍到这了,更多相关Java mapstruct使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
你可能感兴趣的:(详解Java中的mapstruct插件使用)
GMSL max9286应用参考原理图:硬件工程师的利器
杜文岱Igor
GMSLmax9286应用参考原理图:硬件工程师的利器【下载地址】GMSLmax9286应用参考原理图本仓库提供了一个名为“GMSLmax9286应用参考原理图”的资源文件。该文件详细展示了max9286芯片在GMSL(GigabitMultimediaSerialLink)系统中的应用原理图项目地址:https://gitcode.com/Open-source-documentation-tu
AWS ECS Fargate 实现批量启用部署断路器
flybirding10011
aws 服务器 云计算 运维
背景介绍在AWSElasticContainerService(ECS)中,部署断路器是服务滚动更新过程中的一项重要功能。它可以持续监控新版本任务的运行状况,判断它们是否已达到稳定状态。如果新版本任务无法正常运行,部署断路器将自动停止部署并回滚到先前的稳定版本,从而确保服务的高可用性。启用部署断路器是一种最佳实践,可以降低由于新任务定义部署失败而导致的服务中断风险。然而,手动为每个服务启用部署断路
PAT乙级真题 — 1087 有多少不同的值(java)
黄昏岭
算法 数据结构
当自然数n依次取1、2、3、……、N时,算式⌊n/2⌋+⌊n/3⌋+⌊n/5⌋有多少个不同的值?(注:⌊x⌋为取整函数,表示不超过x的最大自然数,即x的整数部分。)输入格式:输入给出一个正整数N(2≤N≤104)。输出格式:在一行中输出题面中算式取到的不同值的个数。输入样例:2017输出样例:1480思路:先找最大值——10000/2+10000/3+10000/5=10335,然后定义10335
YOLOv8中Bottleneck模块详解
王了了哇
YOLO 计算机视觉 深度学习 pytorch python
1.Bottleneck模块介绍Bottleneck模块在YOLOv8中的作用是进行特征提取和增强,是网络中的核心构建模块之一。它的主要功能是通过卷积操作来处理输入特征图,并在适当情况下应用残差连接,使得信息能够有效地通过网络层进行传播。2.Bottleneck模块的位置和作用在YOLOv8的网络结构中,Bottleneck模块被多次使用,主要出现在以下几个部分:Backbone部分:在多个层次上
DOS命令行乱码解决办法
王了了哇
windows
DOS中文乱码解决在中文Windows系统中,如果一个文本文件是UTF-8编码的,那么在CMD.exe命令行窗口(所谓的DOS窗口)中不能正确显示文件中的内容。在默认情况下,命令行窗口中使用的代码页是中文或者美国的,即编码是中文字符集或者西文字符集。如果想正确显示UTF-8字符,可以按照以下步骤操作:1、打开CMD.exe命令行窗口2、通过chcp命令改变代码页,UTF-8的代码页为65001ch
Bash 中的运算方式
躺不平的理查德
# bash 开发语言
目录概述:1.(())运算符2.let命令3.expr命令4.$[]直接运算5.bc(计算器,支持浮点数)6.awk(强大的文本处理工具,也可计算)概述:Bash本身只支持整数运算,但可以结合bc和awk进行浮点运算。以下是常见的计算方法:1.(())运算符(())是Bash的整数计算语法,支持算术运算符、逻辑运算符,并且可以直接操作变量。echo$((2+3))#输出5echo$((10/3))
JD短视频带货项目详解 | 普通素人月入过万的新机会
沐凡资源
全文检索
一、项目本质JD短视频带货是京东近几年重点扶持的「内容电商」项目,创作者通过发布商品种草短视频,用户点击视频中的商品链接下单后,即可获得佣金分成。核心逻辑:用短视频内容激活京东站内流量,对标抖音的「兴趣电商」,但竞争小得多。二、为什么现在入场是红利期?平台疯狂撒钱:JD2023年拿出10亿现金补贴,新人发5条视频就送50元流量缺口大:JD用户习惯搜索购物,短视频内容占比不足5%,官方急需创作者补位
java springboot连接sqlserver使用
大得369
java spring boot sqlserver
pom.xml增加sqlserver驱动com.microsoft.sqlservermssql-jdbc9.4.0.jre8application.yml配置文件server:port:9001#spring:#application:#name:dade01#datasource:#driver-class-name:com.mysql.jdbc.Driver#url:jdbc:mysql:/
含文档+PPT+源码】科技公司人事管理系统设计与实现
小咕聊编程
科技 eclipse java tomcat maven spring
项目介绍本课程演示的是一款科技公司人事管理系统设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料2.带你从零开始部署运行本套系统3.该项目附带的源码资料可作为毕设使用该SpringBoot+Vue的人事管理系统设计与实现,后端采用SpringBoot架构,前端采用Vue+ElementUI实现页面的快
java 缓存篇2
dzl84394
java 缓存 开发语言
缓存的部署方式单机主从哨兵集群特性主从(Master-Slave)哨兵(Sentinel)集群(Cluster)数据分片不支持不支持支持,基于slot进行水平分片高可用性部分支持(手动故障转移)高可用性,自动故障转移高可用性,自动故障转移及数据分片配置复杂度低中高扩展性低至中中高适用场景中小规模应用,读多写少需要高可用性且不需要分片的应用大规模分布式应用,需水平扩展和高可用性一致性弱(异步复制,可
zipkin备忘
dzl84394
springboot学习 日志 java zipkin
server安装https://zipkin.io/pages/quickstart.html这里提供了几种安装方式当天他可以吧数据方存cassandra,kafka,es,等地方服务器直接下载curl-sSLhttps://zipkin.io/quickstart.sh|bash-s得到zipkin.jar启动nohup/usr/local/jdk17/bin/java-jarzipkin.ja
PCL 最小包围球(三维)
大鱼BIGFISH
点云进阶 C++ PCL 最小包围球(三维)
文章目录一、简介二、实现代码三、实现效果参考资料一、简介与最小包围圆的思路相同,最小二维球的求解过程如下所示:1.初始化:将点集中的所有点加入待处理列表。2.查找最远点:在当前最小包围球的基础上,查找点集中距离圆心最远的点。3.调整最小包围球:如果找到最远点,则调整最小包围球,使其包含该点。4.迭代:重复步骤2和3,直到最小包围球能够包含所有点。二、实现代码相关代码可以参考:PCL最小包围圆(二维
Java整合GPT-3.5和GPT-4,让PPT制作变得更加轻松智能化
GPTCoder
ChatGPT java 人工智能 gpt-3 自然语言处理 chatgpt
在当今的商业环境中,PPT演示文稿已成为一种重要的沟通工具。然而,创建高质量的PPT往往耗时且繁琐。基于这个痛点,本文将介绍如何使用Java整合GPT-3.5/4,根据PPT模板自动生成完整的PPT。我们将使用ApachePOI库操作来PPT文件,同时调用GPT-3.5/4API生成内容。首先,我们需要导入ApachePOI库。在Maven项目中,将以下依赖添加到pom.xml文件中:org.ap
Elasticsearch和Kibana的安装部署及服务器配置
TpCode
elasticsearch 服务器 大数据
Elasticsearch和Kibana是一对强大的工具,用于搜索、分析和可视化大规模数据集。Elasticsearch是一个开源的分布式搜索和分析引擎,而Kibana是一个用于数据可视化的开源工具。本文将详细介绍如何安装、部署和配置Elasticsearch和Kibana,并在服务器上运行它们。步骤1:安装JavaElasticsearch和Kibibana都需要Java来运行。确保您的服务器上
PrimeFaces实战:IdleMonitor与Ajax的完美结合
t0_54program
ajax okhttp 前端 个人开发
在现代的Web开发中,用户交互的实时反馈是一个重要的用户体验环节。PrimeFaces作为一个强大的JavaEEUI库,提供了许多便捷的功能组件,其中之一就是IdleMonitor。通过IdleMonitor,我们可以轻松地检测用户何时处于空闲状态以及何时从空闲状态恢复活跃状态。结合Ajax技术,我们可以在用户状态变化时动态地更新页面内容,而无需重新加载整个页面。接下来,我们将通过一个简单的示例来
Java(Springboot)
奶龙牛牛
java spring boot 开发语言
get请求在Controller中--->从仓库里取出要用的mysql----->对于get请求(httpsession,model容器)----->从httpsession取出userid再赋值给userid----->用userid在mysql获取用户的信息------>然后用户的信息在保存在model容器里---->return到html地址里面put请求得到请求体的参数--->从https
JAVA面试宝典:2020年程序员面试必备
Neo-ke
本文还有配套的精品资源,点击获取简介:Java面试宝典是求职或晋升的必备参考资料,涵盖了Java、Redis、SpringBoot、Netty、虚拟机、前端、SpringCloud、MySQL和RocketMQ等热门技术领域的最新知识。掌握这些知识点不仅有助于面试成功,还能提升专业技能,在IT行业保持竞争力。1.Java基础与核心技术Java作为一门面向对象的编程语言,在IT行业中广泛应用。本章将
理解WebGPU 中的 GPUAdapter :连接浏览器与 GPU 的桥梁
ttod_qzstudio
WebGPU WebGPU
在WebGPU开发中,GPUAdapter是一个至关重要的对象,它作为浏览器与GPU之间的桥梁,为开发者提供了请求GPU设备、查询GPU特性以及获取适配器信息的能力。本文将详细介绍GPUAdapter的核心属性和方法,并通过实际代码示例展示如何使用它来初始化WebGPU环境。什么是GPUAdapter?GPUAdapter是WebGPUAPI中的一个接口,表示浏览器选择的物理GPU的抽象。它提供了
基于A*算法与贝塞尔曲线的路径规划与可视化:从栅格地图到平滑路径生成
机器懒得学习
pygame python
引言在机器人导航、自动驾驶和游戏开发等领域,路径规划是一个核心问题。如何高效地找到从起点到终点的最优路径,并且确保路径的平滑性和安全性,是许多应用场景中的关键挑战。本文将介绍一种结合A算法和贝塞尔曲线的路径规划方法,并通过Pygame实现可视化。我们将从栅格地图的加载与处理开始,逐步讲解A算法的实现、贝塞尔曲线的生成,以及如何通过鼠标交互实现动态路径规划。通过本文,你将掌握如何在实际项目中应用这些
深入解析LangChain:构建智能应用的全方位指南
AIGC大模型 吱屋猪
langchain 语言模型 人工智能 自然语言处理 llama 百度 机器学习
1.LangChain介绍与环境配置面试官:“你能先简单介绍一下LangChain吗?包括它的背景、主要功能,以及它在当前语言模型开发中的意义。”你:"LangChain是一个开源框架,旨在简化和增强基于语言模型的应用开发。随着语言模型,特别是大型预训练模型的兴起,开发者逐渐认识到这些模型不仅可以生成文本,还可以被用于处理复杂的对话、数据分析以及其他需要自然语言处理的任务。然而,这些模型的集成和实
Word文档查重工具:高效保障文档原创性
奚畏财
Word文档查重工具:高效保障文档原创性【下载地址】Word文档查重工具Word文档查重工具欢迎使用Word文档查重工具!本工具专为处理和审查Word格式的标书文件设计,能够高效、准确地辅助您识别和定位文档中的重复内容项目地址:https://gitcode.com/open-source-toolkit/fcb77在当今信息爆炸的时代,文档的原创性显得尤为重要。无论是学术研究、商业报告还是企业标
JavaScript前端性能优化技巧分享
代码旅人博客
前端 javascript 性能优化
在前端开发中,性能优化是一个持续不断的追求。随着Web应用的日益复杂,如何确保应用的流畅性和响应速度,成为了每个前端开发者必须面对的问题。JavaScript作为前端的核心语言,其性能优化更是至关重要。本文将分享一些JavaScript前端性能优化的技巧,帮助开发者提升Web应用的性能。一、减少DOM操作DOM(文档对象模型)操作是JavaScript中常见的性能瓶颈之一。频繁的DOM操作会导致浏
PAT乙级真题 — 1085 PAT单位排行(java)【20/25—测试点4、5超时】
黄昏岭
算法
每次PAT考试结束后,考试中心都会发布一个考生单位排行榜。本题就请你实现这个功能。输入格式:输入第一行给出一个正整数N(≤105),即考生人数。随后N行,每行按下列格式给出一个考生的信息:准考证号得分学校其中准考证号是由6个字符组成的字符串,其首字母表示考试的级别:B代表乙级,A代表甲级,T代表顶级;得分是[0,100]区间内的整数;学校是由不超过6个英文字母组成的单位码(大小写无关)。注意:题目
理解 WebGPU 中的 GPUQueue:GPU 的命令队列
ttod_qzstudio
WebGPU WebGPU
在现代图形编程中,与GPU的交互变得越来越高效和灵活,而WebGPUAPI的出现更是为Web开发者带来了强大的图形处理能力。其中,GPUQueue作为WebGPU的核心接口之一,扮演着至关重要的角色。本文将详细介绍GPUQueue的概念、功能、使用方法以及其在WebGPU架构中的地位。一、什么是GPUQueue?在WebGPU中,GPUQueue是一个命令队列接口,用于控制GPU上命令的执行。它类
云创智城充电系统:基于 SpringCloud 的高可用、可扩展架构详解-多租户、多协议兼容、分账与互联互通功能实现
云创智城-yuncitys
智能充电桩 电动车充电系统 虚拟充电桩 系统架构 智慧城市 汽车
在新能源汽车越来越普及的今天,充电基础设施的管理和运营变得越来越重要。云创智城充电系统,就像一个超级智能管家,为新能源充电带来了全新的解决方案,让充电这件事变得更方便、更高效、更安全。一、厉害的技术架构,让系统稳稳当当云创智城充电系统用了很厉害的技术,搭建出一个又稳又能不断变大变强的架构。它就像一个大商场,每个区域都有自己的功能,还能随时根据需求扩建。这个系统用SpringCloud和Spring
深入浅出 Go 语言:协程(Goroutine)详解
软件架构师笔记
golang golang 网络 算法 协程
深入浅出Go语言:协程(Goroutine)详解引言Go语言的协程(goroutine)是其并发模型的核心特性之一。协程允许你轻松地编写并发代码,而不需要复杂的线程管理和锁机制。通过协程,你可以同时执行多个任务,并且这些任务可以共享相同的地址空间,从而简化了内存管理和数据共享。本文将深入浅出地介绍Go语言中的协程编程,涵盖协程的基本概念、如何启动和管理协程、通道(channel)的使用以及常见的并
Java面试宝典(Spring篇)
y_Haveme
Spring 面试题 开发语言 java spring
目录1.什么是spring?2.Spring框架的优点。3.什么是IOC(控制反转)?4.依赖注入的方式。5.Autowired和Resource关键字的区别?6.什么是AOP(面向切面编程)?7.什么是通知呢?有哪些类型呢?8.springbean的生命周期。9.Spring支持的几种bean的作用域。10.Spring框架中都用到了哪些设计模式?11.事务三要素是什么?12.Spring事务实
Go 语言的优势和学习路线图
weixin_jie401214
golang 学习 java
简介Go语言又称Golang,由Google公司于2009年发布,近几年伴随着云计算、微服务、分布式的发展而迅速崛起,跻身主流编程语言之列,和Java类似,它是一门静态的、强类型的、编译型编程语言,为并发而生,所以天生适用于并发编程(网络编程)。目前Go语言支持Windows、Linux等多个平台,也可以直接在Android和iOS等移动端执行,从业务角度来看,Go语言在云计算、微服务、大数据、区
【Node-Red】Function节点教学
零炻大礼包
Node-Red 笔记 node.js
本篇来讲在Node-Red中编写函数时用到的一个至关重要的节点:function。function节点允许消息运行JavaScript代码。其中部分内容来自官方文档翻译:function节点用户指南。Function节点教学1.变量定义2.返回值1)返回单条数据进阶1进阶22)返回多条数据3.其他变量定义1)数组定义buffer2.Array4.运算符1)算数运算符2)赋值运算符3)字符与运算符4
海鸥表表带太长了怎么拆_海鸥手表表带 海鸥手表怎么换表带
weixin_39878549
海鸥表表带太长了怎么拆
海鸥手表相信每一个熟悉钟表的朋友,都不会对这个品牌陌生。作为国产最早的钟表品牌之一,海鸥表历经多年的发展,如今掌握多项高级制表技术,被誉为国产手表中的第一品牌!目前佩戴海鸥手表的朋友有很多,大家经常会问海鸥手表怎么换表带?其实这并不是一个困难的问题,下面腕表之家就为大家介绍。海鸥手表怎么换金属表带1.把环状的表带从表扣处暂时拆开,让表带可以平摊在桌面上。以利于下一步的动作。最好下边垫一块绒布,可以
书其实只有三类
西蜀石兰
类
一个人一辈子其实只读三种书,知识类、技能类、修心类。
知识类的书可以让我们活得更明白。类似十万个为什么这种书籍,我一直不太乐意去读,因为单纯的知识是没法做事的,就像知道地球转速是多少一样(我肯定不知道),这种所谓的知识,除非用到,普通人掌握了完全是一种负担,维基百科能找到的东西,为什么去记忆?
知识类的书,每个方面都涉及些,让自己显得不那么没文化,仅此而已。社会认为的学识渊博,肯定不是站在
《TCP/IP 详解,卷1:协议》学习笔记、吐槽及其他
bylijinnan
tcp
《TCP/IP 详解,卷1:协议》是经典,但不适合初学者。它更像是一本字典,适合学过网络的人温习和查阅一些记不清的概念。
这本书,我看的版本是机械工业出版社、范建华等译的。这本书在我看来,翻译得一般,甚至有明显的错误。如果英文熟练,看原版更好:
http://pcvr.nl/tcpip/
下面是我的一些笔记,包括我看书时有疑问的地方,也有对该书的吐槽,有不对的地方请指正:
1.
Linux—— 静态IP跟动态IP设置
eksliang
linux IP
一.在终端输入
vi /etc/sysconfig/network-scripts/ifcfg-eth0
静态ip模板如下:
DEVICE="eth0" #网卡名称
BOOTPROTO="static" #静态IP(必须)
HWADDR="00:0C:29:B5:65:CA" #网卡mac地址
IPV6INIT=&q
Informatica update strategy transformation
18289753290
更新策略组件: 标记你的数据进入target里面做什么操作,一般会和lookup配合使用,有时候用0,1,1代表 forward rejected rows被选中,rejected row是输出在错误文件里,不想看到reject输出,将错误输出到文件,因为有时候数据库原因导致某些column不能update,reject就会output到错误文件里面供查看,在workflow的
使用Scrapy时出现虽然队列里有很多Request但是却不下载,造成假死状态
酷的飞上天空
request
现象就是:
程序运行一段时间,可能是几十分钟或者几个小时,然后后台日志里面就不出现下载页面的信息,一直显示上一分钟抓取了0个网页的信息。
刚开始已经猜到是某些下载线程没有正常执行回调方法引起程序一直以为线程还未下载完成,但是水平有限研究源码未果。
经过不停的google终于发现一个有价值的信息,是给twisted提出的一个bugfix
连接地址如下http://twistedmatrix.
利用预测分析技术来进行辅助医疗
蓝儿唯美
医疗
2014年,克利夫兰诊所(Cleveland Clinic)想要更有效地控制其手术中心做膝关节置换手术的费用。整个系统每年大约进行2600例此类手术,所以,即使降低很少一部分成本,都可以为诊 所和病人节约大量的资金。为了找到适合的解决方案,供应商将视野投向了预测分析技术和工具,但其分析团队还必须花时间向医生解释基于数据的治疗方案意味着 什么。
克利夫兰诊所负责企业信息管理和分析的医疗
java 线程(一):基础篇
DavidIsOK
java 多线程 线程
&nbs
Tomcat服务器框架之Servlet开发分析
aijuans
servlet
最近使用Tomcat做web服务器,使用Servlet技术做开发时,对Tomcat的框架的简易分析:
疑问: 为什么我们在继承HttpServlet类之后,覆盖doGet(HttpServletRequest req, HttpServetResponse rep)方法后,该方法会自动被Tomcat服务器调用,doGet方法的参数有谁传递过来?怎样传递?
分析之我见: doGet方法的
揭秘玖富的粉丝营销之谜 与小米粉丝社区类似
aoyouzi
揭秘玖富的粉丝营销之谜
玖富旗下悟空理财凭借着一个微信公众号上线当天成交量即破百万,第七天成交量单日破了1000万;第23天时,累计成交量超1个亿……至今成立不到10个月,粉丝已经超过500万,月交易额突破10亿,而玖富平台目前的总用户数也已经超过了1800万,位居P2P平台第一位。很多互联网金融创业者慕名前来学习效仿,但是却鲜有成功者,玖富的粉丝营销对外至今仍然是个谜。
近日,一直坚持微信粉丝营销
Java web的会话跟踪技术
百合不是茶
url会话 Cookie会话 Seession会话 Java Web 隐藏域会话
会话跟踪主要是用在用户页面点击不同的页面时,需要用到的技术点
会话:多次请求与响应的过程
1,url地址传递参数,实现页面跟踪技术
格式:传一个参数的
url?名=值
传两个参数的
url?名=值 &名=值
关键代码
web.xml之Servlet配置
bijian1013
java web.xml Servlet配置
定义:
<servlet>
<servlet-name>myservlet</servlet-name>
<servlet-class>com.myapp.controller.MyFirstServlet</servlet-class>
<init-param>
<param-name>
利用svnsync实现SVN同步备份
sunjing
SVN 同步 E000022 svnsync 镜像
1. 在备份SVN服务器上建立版本库
svnadmin create test
2. 创建pre-revprop-change文件
cd test/hooks/
cp pre-revprop-change.tmpl pre-revprop-change
3. 修改pre-revprop-
【分布式数据一致性三】MongoDB读写一致性
bit1129
mongodb
本系列文章结合MongoDB,探讨分布式数据库的数据一致性,这个系列文章包括:
数据一致性概述与CAP
最终一致性(Eventually Consistency)
网络分裂(Network Partition)问题
多数据中心(Multi Data Center)
多个写者(Multi Writer)最终一致性
一致性图表(Consistency Chart)
数据
Anychart图表组件-Flash图转IMG普通图的方法
白糖_
Flash
问题背景:项目使用的是Anychart图表组件,渲染出来的图是Flash的,往往一个页面有时候会有多个flash图,而需求是让我们做一个打印预览和打印功能,让多个Flash图在一个页面上打印出来。
那么我们打印预览的思路是获取页面的body元素,然后在打印预览界面通过$("body").append(html)的形式显示预览效果,结果让人大跌眼镜:Flash是
Window 80端口被占用 WHY?
bozch
端口占用 window
平时在启动一些可能使用80端口软件的时候,会提示80端口已经被其他软件占用,那一般又会有那些软件占用这些端口呢?
下面坐下总结:
1、web服务器是最经常见的占用80端口的,例如:tomcat , apache , IIS , Php等等;
2
编程之美-数组的最大值和最小值-分治法(两种形式)
bylijinnan
编程之美
import java.util.Arrays;
public class MinMaxInArray {
/**
* 编程之美 数组的最大值和最小值 分治法
* 两种形式
*/
public static void main(String[] args) {
int[] t={11,23,34,4,6,7,8,1,2,23};
int[]
Perl正则表达式
chenbowen00
正则表达式 perl
首先我们应该知道 Perl 程序中,正则表达式有三种存在形式,他们分别是:
匹配:m/<regexp>;/ (还可以简写为 /<regexp>;/ ,略去 m)
替换:s/<pattern>;/<replacement>;/
转化:tr/<pattern>;/<replacemnt>;
[宇宙与天文]行星议会是否具有本行星大气层以外的权力呢?
comsci
举个例子: 地球,地球上由200多个国家选举出一个代表地球联合体的议会,那么现在地球联合体遇到一个问题,地球这颗星球上面的矿产资源快要采掘完了....那么地球议会全体投票,一致通过一项带有法律性质的议案,既批准地球上的国家用各种技术手段在地球以外开采矿产资源和其它资源........
&
Oracle Profile 使用详解
daizj
oracle profile 资源限制
Oracle Profile 使用详解 转
一、目的:
Oracle系统中的profile可以用来对用户所能使用的数据库资源进行限制,使用Create Profile命令创建一个Profile,用它来实现对数据库资源的限制使用,如果把该profile分配给用户,则该用户所能使用的数据库资源都在该profile的限制之内。
二、条件:
创建profile必须要有CREATE PROFIL
How HipChat Stores And Indexes Billions Of Messages Using ElasticSearch & Redis
dengkane
elasticsearch Lucene
This article is from an interview with Zuhaib Siddique, a production engineer at HipChat, makers of group chat and IM for teams.
HipChat started in an unusual space, one you might not
循环小示例,菲波拉契序列,循环解一元二次方程以及switch示例程序
dcj3sjt126com
c 算法
# include <stdio.h>
int main(void)
{
int n;
int i;
int f1, f2, f3;
f1 = 1;
f2 = 1;
printf("请输入您需要求的想的序列:");
scanf("%d", &n);
for (i=3; i<n; i
macbook的lamp环境
dcj3sjt126com
lamp
sudo vim /etc/apache2/httpd.conf
/Library/WebServer/Documents
是默认的网站根目录
重启Mac上的Apache服务
这个命令很早以前就查过了,但是每次使用的时候还是要在网上查:
停止服务:sudo /usr/sbin/apachectl stop
开启服务:s
java ArrayList源码 下
shuizhaosi888
ArrayList源码
版本 jdk-7u71-windows-x64
JavaSE7 ArrayList源码上:http://flyouwith.iteye.com/blog/2166890
/**
* 从这个列表中移除所有c中包含元素
*/
public boolean removeAll(Collection<?> c) {
Spring Security(08)——intercept-url配置
234390216
Spring Security intercept-url 访问权限 访问协议 请求方法
intercept-url配置
目录
1.1 指定拦截的url
1.2 指定访问权限
1.3 指定访问协议
1.4 指定请求方法
1.1 &n
Linux环境下的oracle安装
jayung
oracle
linux系统下的oracle安装
本文档是Linux(redhat6.x、centos6.x、redhat7.x) 64位操作系统安装Oracle 11g(Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production),本文基于各种网络资料精心整理而成,共享给有需要的朋友。如有问题可联系:QQ:52-7
hotspot虚拟机
leichenlei
java HotSpot jvm 虚拟机 文档
JVM参数
http://docs.oracle.com/javase/6/docs/technotes/guides/vm/index.html
JVM工具
http://docs.oracle.com/javase/6/docs/technotes/tools/index.html
JVM垃圾回收
http://www.oracle.com
读《Node.js项目实践:构建可扩展的Web应用》 ——引编程慢慢变成系统化的“砌砖活”
noaighost
Web node.js
读《Node.js项目实践:构建可扩展的Web应用》
——引编程慢慢变成系统化的“砌砖活”
眼里的Node.JS
初初接触node是一年前的事,那时候年少不更事。还在纠结什么语言可以编写出牛逼的程序,想必每个码农都会经历这个月经性的问题:微信用什么语言写的?facebook为什么推荐系统这么智能,用什么语言写的?dota2的外挂这么牛逼,用什么语言写的?……用什么语言写这句话,困扰人也是阻碍
快速开发Android应用
rensanning
android
Android应用开发过程中,经常会遇到很多常见的类似问题,解决这些问题需要花时间,其实很多问题已经有了成熟的解决方案,比如很多第三方的开源lib,参考
Android Libraries 和
Android UI/UX Libraries。
编码越少,Bug越少,效率自然会高。
但可能由于 根本没听说过、听说过但没用过、特殊原因不能用、自己已经有了解决方案等等原因,这些成熟的解决
理解Java中的弱引用
tomcat_oracle
java 工作 面试
不久之前,我
面试了一些求职Java高级开发工程师的应聘者。我常常会面试他们说,“你能给我介绍一些Java中得弱引用吗?”,如果面试者这样说,“嗯,是不是垃圾回收有关的?”,我就会基本满意了,我并不期待回答是一篇诘究本末的论文描述。 然而事与愿违,我很吃惊的发现,在将近20多个有着平均5年开发经验和高学历背景的应聘者中,居然只有两个人知道弱引用的存在,但是在这两个人之中只有一个人真正了
标签输出html标签" target="_blank">关于标签输出html标签
xshdch
jsp
http://back-888888.iteye.com/blog/1181202
关于<c:out value=""/>标签的使用,其中有一个属性是escapeXml默认是true(将html标签当做转移字符,直接显示不在浏览器上面进行解析),当设置escapeXml属性值为false的时候就是不过滤xml,这样就能在浏览器上解析html标签,
&nb