首页 文章 精选 留言 我的

精选列表

搜索[Match条件],共10005篇文章
优秀的个人博客,低调大师

jpa/hibernate @onetomany 使用left join 添加多条件,可以使用过滤器filters (with-clause...

package com.ipinyou.mip.dataAsset.campaignManagement.entity; import com.ipinyou.mip.utils.NumberUtils; import com.ipinyou.mip.utils.StringHelper; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; import org.apache.commons.lang3.builder.HashCodeExclude; import org.hibernate.annotations.Filter; import javax.persistence.*; import java.text.DecimalFormat; import java.util.HashSet; import java.util.Set; import static javax.persistence.FetchType.EAGER; import static javax.persistence.FetchType.LAZY; @Data @Entity @Table(name = "campaign_dashboard_dimension") @ToString @EqualsAndHashCode public class CampaignDashboardDimensionDo { @Id private Long id; @Transient private Double impRate = 1.0; @Column(name = "3_reach") private Double reach3; @Column(name = "1_reach") private Double reach1; private Long campaignId; @OneToMany(fetch = LAZY, cascade = CascadeType.ALL) @JoinColumn(name = "campaign_dashboard_dimension_id") @org.hibernate.annotations.OrderBy(clause = "imp desc") @Filter(name = "dimension",condition = "dimension_type=:dimension ") private Set<CampaignDashboardDimensionDetailDo> campaignDashboardDimensionDetailDo = new HashSet<>(); } one package com.ipinyou.mip.dataAsset.campaignManagement.entity; import com.ipinyou.mip.utils.NumberUtils; import com.ipinyou.mip.utils.StringHelper; import lombok.Data; import lombok.ToString; import org.hibernate.annotations.FilterDef; import org.hibernate.annotations.OrderBy; import org.hibernate.annotations.ParamDef; import org.hibernate.annotations.Where; import javax.persistence.*; import java.text.DecimalFormat; import static javax.persistence.FetchType.EAGER; @Data @Entity @Table(name = "campaign_dashboard_dimension_detail") @ToString @FilterDef(name="dimension", parameters=@ParamDef(name="dimension",type="java.lang.String")) public class CampaignDashboardDimensionDetailDo { @Id private Long id; private Long version; private java.sql.Timestamp lastModified; private String removed; private Long imp; private Double reachRate; private String dimensionName; private String dimensionType; private Long uv; private Long click; private Double ta = 0.0; @Transient private Double impRate; @Transient private Double diffTa; @Transient private Double diffReach3 = 0.0; @Transient private Double targetTa = 0.0; @Transient private Double targetReach3 = 0.0; } many public List<CampaignDashboardDimensionDo> getCategoryData(List<String> displayType, String dimension, String source, Long campaignId) { List<CampaignDashboardDimensionDo> resultList=new ArrayList<>(); if (displayType==null||displayType.isEmpty()){ return resultList; } for (String type:displayType ){ StringBuilder sb = new StringBuilder(); sb.append("select cdd from CampaignDashboardDimensionDo as cdd left join fetch cdd.campaignDashboardDimensionDetailDo as cddd where cdd.campaignId=:campaignId and cdd.source=:source" + " and cdd.logDate=(select max(logDate) from CampaignDashboardDimensionDo where campaignId=:campaignId and source=:source and displayType=:type) and cdd.displayType=:type"); Filter filter = entityManager.unwrap(Session.class).enableFilter("dimension"); filter.setParameter("dimension",dimension); TypedQuery<CampaignDashboardDimensionDo> query = entityManager.createQuery(sb.toString(), CampaignDashboardDimensionDo.class); query.setParameter("type",type); query.setParameter("source", source); query.setParameter("campaignId", campaignId); List<CampaignDashboardDimensionDo> list = query.getResultList(); Set<CampaignDashboardDimensionDo> set=new HashSet<>(list); resultList.addAll(set); } return resultList; } 查询代码

优秀的个人博客,低调大师

算法可以只为一台机器而生,为什么可移植性不是算法成立的必要条件

今天我们前面一直在分析 Windows 网络命令,从 ipconfig、tracert 到路由表,其中已经碰到了一个很典型的软件工程现象。同一个网络诊断目标,在 Windows 上可能使用 ipconfig 和 tracert,到了 Linux 上更常见的是 ip addr、ip route 和 traceroute。具体程序、命令接口乃至底层系统调用都变了,可是背后的网络分析思路并没有因此失效。

优秀的个人博客,低调大师

微服务架构学习与思考(02):微服务实施的前提条件?有哪些问题需要思考?

一、前言 地址:https://www.cnblogs.com/jiujuan/p/13284412.html 前一篇文章简单分析了微服务的好处,以及会带来的问题。 遇到问题并不可怕,可怕的是我们不去面对它,不去想办法解决它,逃避问题是不可能有任何进步。所以积极想办法应对问题并解决问题,才能不断的进步。 前面讲了,微服务一般都是由单体演进而来,很少有业务从0就开始进行微服务开发。如果能从0就开始用微服务开发,确实是一件很好的事情,前提是你确实考虑清楚了用微服务开发适合当前的业务以及业务的发展需求。 那么问题来了,企业什么时候引入微服务呢? 二、企业什么时候引入微服务? 引入原因: 单体应用无法满足业务增长的需求,业务的交付、业务的可靠性、稳定性要求,随着时间推移问题会越来越多。-- 也就是前面遇到的一些问题 不过也有人,不是从本公司业务发展,开发成本,开发效率来考虑问题,而是什么开发大会上看到很多公司微服务的演讲,或者听说很多公司在用微服务,从这些方面来考虑,也就是随大流,这种思考方式显然不是正确思考方式。不要为了微服务而微服务。采用微服务收益一定要大于单体应用,要能解决遇到的问题。 从单体架构升级到微服务架构,肯定希望提高研发效率,缩短工期,加快产品交付速度。 那他们在具体生产效率上有什么区别? 根据马丁·福勒(Martin Fowler)的这篇文章,揭示了生产率和复杂度的关系。 在复杂度较小时,单体应用的生产率更高,微服务架构反而降低了生产率。但是,当复杂度到了一定规模,无论采用单体应用还是微服务架构,都会降低系统的生产率。区别是:单体应用生产率开始急剧下降,而微服务架构则能缓解生产率下降的程度。如下图: x 轴是系统复杂度,y 轴是开发的生产力 绿色表示单体应用 蓝色表示微服务架构 单体应用和微服务有一个相交的点,这个点是单体应用生产率急剧下降,微服务平缓下降的交叉点,他们的生产效率开始出现不同。 这个点就是把单体应用切换到微服务的时间点。 但问题是,这个时间点,文章并没有具体说明什么时候会出现,怎么衡量这个时间点。 所以只能各个公司具体问题具体分析,技术领导者要考虑判断这个时间点。这也是考虑技术领导力的时候。不过有些要素可以参考: 业务角度 业务需求开发是否经常延迟 产品交付是否能跟上业务发展 研发质量 代码是否因为修改而经常出现bug 代码臃肿庞大 技术人员 有技术,有意愿 团队人数 等等一些考虑因素,在加上前一篇单体应用出现的一些问题。 在考虑清楚之后,决定引入微服务,那么,又会遇到什么问题? 三、组织架构如何变化? 康威定律 康威定律(康威法则 , Conway's Law) 是马尔文·康威1967年提出的: 设计系统的架构受制于产生这些设计的组织的沟通结构。 康威定律告诉我们,如果我们实施了微服务,那么组织架构的变动也要跟着实施微服务架构而做出相应的调整。这样才有可能适应微服务的发展。 单体架构和微服务架构 先看看传统单体架构和微服务架构,如下图: 图片来自:https://martinfowler.com/articles/microservices.html 左半部分的单体架构图: 单体应用将所有功能放到一个进程中 扩展:通过将整个应用复制到多态服务器实现扩展 右半部分的微服务架构图: 微服务架构将功能分离,放到多个不同的进程中 扩展:通过将不同的服务分布于不同的服务器上,并按需要复制方式进行扩展 组织架构 单体应用的组织架构: 图片来自:https://martinfowler.com/articles/microservices.html 它是一个整体式的应用团队,每个团队按照职能来进行划分(图片左半部分),比如:UI团队,中间件团队,DBA团队。 不同职能的人属于不同的团队。做项目的时候就从不同职能部门选出一些人来负责项目。这样的组织架构有一个问题就是:跨职能部门沟通协调问题。这种团队组织形式不能适应微服务架构的特点。 微服务应用组织架构 图片来自:https://martinfowler.com/articles/microservices.html 微服务架构特点:每个微服务是独立的,团队可以独立开发,独立测试,独立部署,服务是自治的。相应的团队组成人员也有产品,技术,测试,团队成员在自己内部就可以完整的进行微服务各种功能开发。 这就要打破原先传统的那种按职能划分的组织团队形式,而要把不同职能的人组织在一个团队内,组成一个跨职能的产品组织架构。这样才能把一个微服务功能架构、设计、开发、测试、部署、上线运行,在一个组织内部完成,从而形成完整的业务、开发、交付闭环。 团队组织的变化 一图胜千言: 图片来自:https://insights.thoughtworks.cn/management-of-microservices-team/ 原先那种职能型的团队,变成了跨职能的小团队,这种团队和微服务架构对齐。 每个团队组织成员多少合适呢? 亚马逊的“两个披萨团队”,6-10人的规模。这个只是一种参考,毕竟每个公司规模、业务、行业、成员等不一样,找到适合自己的团队构成,就是最好的团队组织。 说明: 以上图片侵删,请联系主页邮箱! 四、怎么构建第一个微服务项目 第一种:有新项目,可以从0开始设计微服务架构。 第二种:改造旧有的老项目 这种也可以划分2类: 从项目小范围开始试水,进行改造。 完全重构项目 - 一般不推荐这种方式。因为不仅老项目需要维护,而且来了新需求咋办?是老项目停止需求开发,还是新旧一起加,一起加又浪费人力,不加技术跟不上业务发展。这些风险都是需要思考衡量。 第三种:从边缘不重要的小项目开始。 这种项目需求开发一般不紧迫,项目又小,相对独立,与现有系统耦合较小,可以完全重构。从这种小项目开始实施微服务,一步一步来构建,降低风险。 经验丰富后,在逐步将其他项目进行改造。 这种是折中的办法,不是那种“休克疗法”。 五、参考 https://martinfowler.com/articles/microservices.html Microservices https://martinfowler.com/bliki/MicroservicePremium.html https://insights.thoughtworks.cn/management-of-microservices-team/ 微服务化小团队集群的组织和管理 我的公众号:九卷沉思录

优秀的个人博客,低调大师

我是一名行政人员,经常要处理大量Excel表格,有什么插件能自动合并单元格、按条件筛选?

各部门交上来的花名册,是行政的日常噩梦:一堆空行,“部门”那列光“综合办公室”就连着二十多行反复写,还有人写“综合办”、有人后面带个空格,身份证号倒是齐的,但年龄性别得自己一个个数。这种表纯手工收拾,我以前得磨一个多钟头。后来在 Excel 里装了不坑盒子,说几个我处理这种表天天用的功能,连怎么点一起讲。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册