java

最新文章

JPA实体映射——一对多关系映射(下)

接上一节一对多关系的映射学习,今天我们学习一种双向关联的最佳实践,废话不说,先上业务实例图。业务实例图Bidirectional @OneToMany下面用代码说明双向关联的一对多关系研究所实体mport javax.persistence.*; import java.io.Serializable; import java.util.HashSet; import java.util.Set;

JPA实体映射——一对多关系映射(中)

紧接上一节的学习,我们还是首先把业务关系图整理出来。业务案例图上一节我们知道,采用单向关联如果不使用@JoinColumn时,在新增一个研究所实体的时候,会生成三张表,并且会执行多条插入语句,在使用@JoinColumn时,会生成两张表,同时在departments上生成一个department_id字段,而JPA在插入数据时,采用的是先插入部门表数据,然后更新外键字段,这种方式,插入的效率不是很

JPA实体映射——一对多关系映射(上)

依照上一节的案例,我们来拆解一对多的关系怎么使用,首先还是把业务关系图弄出来。业务案例图业务分析从图中我们知道,研究所和部门是一对多关系,今天我们来展示,一对多设计的最佳实践。我们知道在JPA的实体设计中,一对多的关系可以设计成单向关联,也可以设计成双向关联。今天我们一步一步来实践各种设计,从而总结出最佳实践。Unidirectional @OneToMany 研究所实体port jav

JPA实体映射——Entity Mapping

学习JPA,实体之间的映射关系是最重要的一环,为了学习和讨论这部分知识,我们将这部分知识分为若干章节进行学习,我们也会用实际的例子进行分析,并且指出存在的问题,然后给出相应的优化方案。 第一步,我们列出具体的案例我们分别使用了三个实体:Institute(研究所),Department(部门),SocialProfile(社交账号)。如上图所示,研究所和部门是一对多的关系,研究所和社交账

Log4j 2 JNDI注入安全漏洞处理(CVE-2021-44228)

漏洞漏洞编号:CVE-2021-44228漏洞等级:高危,该漏洞影响范围极广,危害极大。漏洞描述:Apache log4j2的版本在 2.0 ~ 2.14.1之间时,存在JNDI注入漏洞,攻击者可以控制日志消息或日志消息参数,在启用消息查找替换时执行从LDAP服务器加载的任意代码。影响范围Apache log4j的2.0 - 2.15.0-rc1版本均存在该漏洞。漏洞日志/流量排查排查日志或者解码

JPA实体注解(Entity Annotation)

今天我们开始学习可以用在实体上的注解,一样的道理,我们还是先弄一张图:按照难易程度,或者功能划分,我们分为三类,这样方便理解:基本注解映射关系注解查询注解 这里我们按照功能分类,也会添加一些后续会使用的注解:比如@EbeddedId,@IdClass等。我们先来看看注解@Entitypublic @interface Entity { /** * (Optional) T

JPA实体设计

实体是轻量级的领域对象,因此实体也称为领域模型。既然属于模型,那么模型应该遵守一些设计规范,设计实体的时候应该注意哪些规范呢?实体是属于领域模型,那么实体这个模型在多层软件架构中属于那一层呢? 多层架构程序我们首先用一张图来说明实体在多层软件架构中属于那一层?在一个多层软件架构中,领域模型能够被每一个组件访问。DAO层(Repository)用它来管理数据,展示层(Controller)

JPA实体状态学习-(移除态:Removed)

今天继续学习JPA中实体的最后一种状态:移除态。还是先把图晒出来:按照名称进行猜想,移除态应该就是对象从数据库中删除以后,对象变成了不受持久化上下文管理的移除态。不过呢,这里有一点需要注意的是:什么样的对象才会进入进入移除态呢?变成移除状态的对象是调用persist()方法后,是像persist一样参数对象受到持久化上下文管理呢?还是像merge方法一样返回的对象受到持久化上下文管理呢?这里还有一

JPA实体状态学习-(游离态:Detached)

今天我们学习另一种实体状态,老规矩还是先上图:Detached(游离态 unmanaged)An Object becomes detached when the currently running Persistence Context is closed. Any changes made to detached objects are no longer automatically prop

JPA实体状态学习-(瞬时态:Transient)

为了学习实体的状态,我们还是贴出这张实体状态转换迁移图:Transient(瞬时态)按照上图的描述,java对象在内存中被赋值后,没有调用entityManager.persist()方法之前实体对象所处的状态。举个例子:Teacher teacher = new Teacher("email@dot.com");此时,实例teacher就处于new/transient态(备注:这里的new和tr

JPA实体状态学习-(持久态:Persistent)

今天我们继续学习JPA的实体状态转化,老规矩贴上实体转化的转化图: 上一节我们学习了:entityManager调用persist()方法后,实体的状态从transient到persistent,这个时候对persistent状态的实体改变也会同步持久化到数据库,执行tx.commit()之后实体进入detached状态,此时对实体进行改变后不会同步到数据库。今天我们来看看transie

JPA Hibernate 快速入门

为了学习JPA的实体状态的转化,我们先搭建一个通过JPA Hibernate存储实体到数据库的Demo,后续的学习都在此demo基础上展开。添加Hibernate依赖 <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager&l

JPA实体状态深入理解

我们在学习JPA实体状态的时候,常常会问,JPA的实体有多少状态呢?相信这个问题不难回答:瞬时态(transient)托管态(persistent)游离态(detached)移除态(removed)注意:这里最后一个移除态,有的时候也叫删除态(deleted),至于它和移除态有啥区别,暂时没有想到,如果您对此有更加深刻的理解,请留言回复。为什么会有这四种状态呢?啥,这个也有为啥,网上不是都这么说的

JPA架构(JPA - Architecture)

今天我们来学习一下JPA的架构,首先问一个问题,大家学习理解一个架构有什么好的方法呢?对于我自己来说,我觉得架构图是理解架构最好的方式以上就是JPA的架构图,我们可以知道,JPA的主要部分包括五个类: 第一个类EntityManagerFactory,我们可以称为实体管理器工厂类,很显然,这个类的作用是创建和管理多个实体管理器类,因此,我们可以大胆猜测,实体管理器工厂类和实体管理器是一对

初识JPA

1、什么是JPA?        JPA的全称是Java Persistence API,翻译成中文就是java对象持久化应用程序接口。JPA是Sun公司在Java EE5中提出的java对象持久化应用程序接口。2、JPA的优势是什么?标准化对容器级特性支持简单易用,集成方便可媲美JDBC的查询能力支持面向对象的高级特性3、JPA的缺点是什么?性能不好?学习

Idea导入maven工程后右键没有Maven选项,没有maven命令行运行视图

有的时候我们在idea导入一个maven工程的时候,会发现工程右侧没有maven命令运行视图 如图所示:左边红色框中的项目字体颜色是浅色的,而不是深色的,右边的maven命令视图不存在;如果遇上类似的问题,可以采用以下方法解决右键选中某个项目下的pom文件,然后add as Maven Project即可,如图所示

领域驱动设计代码片段

1、在领域驱动设计中,这个Cell(电池单元)设计为一个包级别的类(没有在类上添加public),而且方法也是包级别的(没有在方法添加public,protected,private)2、Cell类在领域设计中属于值对象,而且它只能被同一个包下的实体或者聚合使用,不是对外公开的3、CellBlock(电池块)也是设计为包级别的类,方法也是包级别,和Cell类设计一致4、CellBlock类在领域设

笔记示例

欢迎使用码经笔记,简单用法如下:1、编辑器工具栏在哪里?请随便选择文本试一下。2、怎么上传图片?请回车换行试一下。3、发布点击右上角的发布按钮发布笔记。---1.建议和问题可以发邮件到pr@majing.io。期待您的参与和宝贵意见。Enjoy it!!!

奇怪的Java语法

看了一段奇怪的Java语法:public int getIndexes()[] { // TODO: return null;}这什么鬼啊,在方法后面还可以加上表示数组的中括号!想起Java定义数组类型有两种方式:int[] intArray;或者int intArray[];所以上面的格式实际返回值是一个int[]数组。为了代码的统一写法以及习惯,建议写成:public int[]

Spring boot maven打包后文件变大原因以及解决方法

在一个Spring boot项目中,添加了一些zip压缩文件。在开发过程中,从项目中下载的文件能够正常打开。但一旦打成jar包后,下载的zip包就打不开了。原因定位查看下载的zip压缩包,我们发现下载的zip文件要比我们原来的要大。所以我们怀疑是spring boot打包导致。通过查找相关资料,原因是我们在maven打包资源是设置了filtering。示例:<resource> &l

从jar包读取资源文件的正确方法

Java的类加载器ClassLoader提供了两个方法,用来对ClassPath里资源读取:getResource和getResourceAsStreamgetResourcepublic URL getResource(String name)访问资源的访问URL。需要注意的是,在IDEA开发工具里和打包成jar包,两个路径的形式是不一样的。IDEA开发工具结果在IDEA开发工具里,返回的是资源

Dubbo启动报错:qos-server can not bind localhost:22222

在同一台服务器上启动两个dubbo服务,第二个dubbo服务报错:main [server.Server] 102 [ERROR] [DUBBO] qos-server can not bind localhost:22222, dubbo version: 2.6.4, current host: 169.254.68.252java.net.BindException: Address al

Spring Cloud集成ZooKeeper注册中心绑定指定ip,解决UnknownHostException

Spring Cloud集成Zookeeper作为注册中心,从网关Spring Cloud GateWay转发给微服务里,在微服务里看到发送请求过来是以主机别名为url,如主机别名是server1.cluster,那么访问的地址是http://server.cluster/xxx。在GateWay有时会导致找不到服务。报类似如下的错误:500 Server Error for HTTP GET "

Java反射获取方法的参数名,Maven/IDEA/Eclipse配置

从JDK8开始,反射类添加了Parameter,通过Parameter类,我们可以从.class编译后的文件中获取方法上参数名。获取参数名的方法:Parameter.getName()示例:public static List<String> getParameterNameJava8(Class clazz, String methodName) { List<String&g

Java使用Map.computeIfAbsent()方法简化初始不存在的key

我们在开发过程中,经常会遇到值为Map的Map。这种情况下我们需要先把key的值取出来,然后判断是否为null。如果值为null,则初始化值并把它存放进Map。示例代码:String childKey="2020-01"; User user = new User(); Map<String,Map<String,User>> parentMap = new HashMap

Maven使用本地jar包

Maven导入本地的jar包,有下面两种方法。方法一:使用mvn安装本地jar包到本地仓库mvn install:install-file \ -Dfile=<path-to-file> \ -DgroupId=<group-id> \ -DartifactId=<artifact-id> \ -Dversion=<version&

Java使用IOUtils转换InputStream为String

Apache commons是一个强大的Java辅助工具包。它提供的IOUtils可以让我们很便捷的实现InputStream转换为String。StringWriter writer = new StringWriter();IOUtils.copy(inputStream, writer, encoding);String theString = writer.toString();首先把in

Java 11报错:java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException

Java 11 删除了Java EE 模块,其中包括了java.xml.bind (JAXB) - REMOVEDjaxb在Java各个版本支持如下:Java 8 - 可用Java 9 - 废弃Java 10 - 废弃Java 11 - 移除解决方法方法一:可以通过Java EE技术的替代版本来解决此问题。只需添加包含所需类的Maven依赖项。<dependency> <gro

笔记示例

欢迎使用码经笔记,简单用法如下:1、编辑器工具栏在哪里?请随便选择文本试一下。2、怎么上传图片?请回车换行试一下。3、发布点击右上角的发布按钮发布笔记。 建议和问题可以发邮件到pr@majing.io。期待您的参与和宝贵意见。Enjoy it!!!

123

123

SpringBoot项目集成maven-shade-plugin

因为项目是基于springboot搭建的,按springboot的教程,打包只需要在pom添加以下即可:<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin

Kotlin与Java相互调用

Kotlin的设计过程中就考虑到了与Java的互操作性。在Kotlin中可以直接调用既有的Java代码, 反过来在Java中也可以很流畅地使用Kotlin代码。 Kotlin 调用 Java一、大多数Java代码,可以直接调用:fun () { val list = ArrayList<string>() list.add("hello world") }二、

JIT的分层编译和逃逸分析

JIT到底在Java的运行中发挥了什么作用呢?根据查阅到的资料,一个作用是做分层编译,一个是做对象的逃逸分析。对于循环体中的代码,循环到一定的程度的时候,就会被再次被编译,编程执行速度更加迅速的代码。对于新建的对象,讲过逃逸分析,如果数据不会逃逸,则将数据放在栈上,不再在heap上新建这个对象。这样的好处是:避免了在堆上新建的锁堆导致的资源损耗不需要GC