开发工具分享
  • 首页
  • 计算科学
  • 文化旅游
  • 项目和网站
    • OSSEZ 计算技术
    • USRealEstate 社区
    • 地区文化
    • CWIKI.US
    • BUG.OSSEZ.COM
    • RSS.OSSEZ.COM
CWIKIUS.CN
一个有独立思考和温度的清新站
Computer Science

IntelliJ IDEA 的 Metamodel 配置

如果不在 IntelliJ IDEA 中配置的话,将会出现编译错误。 这是因为 Metamodel 源代码不是在 src 目录中的,而是在编译的时候生成的。 要解决这个问题其实也非常简单,按照下面 2 个步骤就可以了。 配置 首先需要进入进入 IntelliJ IDEA 的编译配置。     然后选择编译,然后选择声明处理器,然后 Check 上启用声明处理器。     在完成上面的配置后单击 OK 保存退出。 添加源代码 在生成的 Metamodel 代码中,单击右键。 然后单击鼠标右键,选择生成 Metamodel 的目录为 生成的源代码 Root。     如上面图片中显示的内容。 然后单击确定后就可以让你的源代码编译的时候没有错误了。 再次确认 然后选择文件,然后选择项目结构。     然后选择模块。     在模块中,需要确定生成的文件夹在源代码目录中。 只有完成上面的设置才会让 IntelliJ IDEA 能够识别生成的文件。 并且在 IntelliJ IDEA 没有编译错误。   https://www.ossez.com/t/intellij-idea-metamodel/13850

2022年01月13日 0Comments 697Browse 0Like Read more
Computer Science

Hibernate 如何生成 JPA 的 Metamodel

要在 Hibernate 中生成 JPA 的 Metamodel。 你只需要在 pom.xml 进行下面的 2 个操作就可以了。 添加依赖 在 POM 中添加下面的依赖。 <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-jpamodelgen</artifactId> <version>5.6.3.Final</version> </dependency> 编译插件 在编译插件中,添加编译参数 <compilerArguments> <processor>org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor</processor> </compilerArguments> 完整的编译参数如下图     注意上图中的插件配置。 进行编译 运行命令:mvn compile 输出如下: PS C:\WorkDir\USRealEstate\Source-Code\mls-common> mvn compile [INFO] Scanning for projects... [INFO] [INFO] --------------------< com.ossez.usreio:mls-common >--------------------- [INFO] Building Mls-Common 0.0.1-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ mls-common --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] Copying 5 resources [INFO] [INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ mls-common --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 35 source files to C:\WorkDir\USRealEstate\Source-Code\mls-common\target\classes [INFO] /C:/WorkDir/USRealEstate/Source-Code/mls-common/src/main/java/com/ossez/usreio/mls/common/dao/factories/ListingMlsPhotoFactory.java: Some input files use or override a deprecated API. [INFO] /C:/WorkDir/USRealEstate/Source-Code/mls-common/src/main/java/com/ossez/usreio/mls/common/dao/factories/ListingMlsPhotoFactory.java: Recompile with -Xlint:deprecation for details. [INFO] /C:/WorkDir/USRealEstate/Source-Code/mls-common/src/main/java/com/ossez/usreio/mls/common/dao/factories/ListingMlsPhotoFactory.java: Some input files use unchecked or unsafe operations. [INFO] /C:/WorkDir/USRealEstate/Source-Code/mls-common/src/main/java/com/ossez/usreio/mls/common/dao/factories/ListingMlsPhotoFactory.java: Recompile with -Xlint:unchecked for details. [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.738 s [INFO] Finished at: 2022-01-12T16:52:51-05:00 [INFO] ------------------------------------------------------------------------ PS C:\WorkDir\USRealEstate\Source-Code\mls-common> 然后 Maven 将会在 target 文件夹中生成 Metamodel 的源代码。     生成的源代码如上图。 https://www.ossez.com/t/hibernate-jpa-metamodel/13849

2022年01月13日 0Comments 623Browse 0Like Read more
Computer Science

JPA 的 Metamodel

JP A定义了一个可以在运行时查询关于ORM映射信息的元模型(meta-model)。 元模型可以与Criteria API一起使用,而不是使用字符串来引用类属性。 什么是 Metamodel 如果你使用 JPA 或者 Hibernate 写 criteriaQuery 的时候。 你可能会遇到下面一句话 criteriaQuery.where(builder.greaterThan(root.get("dateM"), new DateTime().minusDays(100).toDate())); 抛开上面所有的类型定义不说,上面这句话的意思就是创建一个 SQL 查询 dateM 字段更新时间大于当前时间减去 100 天的时间。 如果使用 Metamodel 的话,就可以写成: criteriaQuery.where(builder.greaterThan(root.get(MlsListing_.DATE_M), new DateTime().minusDays(100).toDate())); 上面这句话查询的是 MlsListing_ORM 对象中的更新日期,与上面的那句话是等同的。 MlsListing_.DATE_M 就是我们说的 Metamodel 了,这个是动态生成的。 并且使用的是 ORM 对象加下划线的表达方式。 为什么要 Metamodel 其实我们并不需要使用 Metamodel,你可以直接使用 dateM。 但是,如果有一天你看见 dateM 不顺眼,改了 dateM 这个为别的名字的话,那么你所有程序中有关 dateM 的查询都要改。 因为你使用的是 String 字符串,Java 的编译器是没有办法找到编译错误的。 这个是不是很郁闷。 如果使用 Metamodel,所有的需要修改的地方都会触发编译错误。 这就是为什么我们会使用 Metamodel 的原因 Metamodel 是在编译时候生成的 Metamodel 不是你代码的一部分。 这个是通过编译的时候生成的,你不需要手动进行代码编写。 你需要做的是,针对 maven 在 pom.xml 文件中 添加依赖 <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-jpamodelgen</artifactId> <version>5.6.3.Final</version> </dependency>     上面为添加的依赖。 添加编译参数 <compilerArguments> <processor>org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor</processor> </compilerArguments>     然后你在运行 Maven 编译的时候,将会在动在 target 文件夹中生成对应的文件了。 编译后生成的文件 编译后生成的文件位于 target 文件夹中。     当你完成上面的 pom.xml 配置的话,你是完全没有问题生编译你的项目的。   https://www.ossez.com/t/jpa-metamodel/13848

2022年01月12日 0Comments 805Browse 0Like Read more
Computer Science

Java 中 Jackson 的 readTree

JSON 数据是目前比较通用的数据交换格式。 在一些新的项目中可能会使用 yaml 这种格式,但大部分项目目前都还是在使用 JSON 数据格式来进行数据交换。 可能老的项目还在使用 XML,这个不在我们这篇文章的讨论范围内。 在 JAVA 程序中,如果要对 JSON 数据进行处理,通常就会涉及到 JSON 数据的转换和解析。 使用的包 有多种包可以来进行使用,目前使用最多的是 Jackson,同时 Gson 也在使用中,更新的频率也比较不错。 Json-lib 已经不更新了,可以取代的是 JSON in Java。 从 Maven 仓库中,可以看到 Jackson Databind 是使用最多的库。     解析 当我们拿到一个 JSON 字符串的时候,我们通常需要进行解析。 如果你已经针对这个给出的 JSON 字符串的话,你可以直接进行使用将这个字符串映射成对象。 这个使用使用的方法应该是 readValue。 如果使用 readTree 的话,主要目的是将输入的字符串转换为 JsonNode 对象。 然后再对转换后的 JsonNode 对象进行操作。 考察下面的一个 JSON 文本。     在我们使用代码: ObjectMapper mapper = new ObjectMapper(); JsonNode node = mapper.readTree(new URL(CONTENT_URL)); JsonNode topicsNodes = node.get("topic_list").get("topics"); 将输入的字符串转换为 node 后,我们会看到你的 node 对象中的内容为:     这和你输入的 JSON 数据格式中的内容是对应的。 如果你还需要获得某一个 node 下面的 node 话,你可以使用方法 get。 这个 get 方法将会返回一个 JsonNode 对象。     你可以使用上面的方法不停的 get,get 再 get。   https://www.ossez.com/t/java-jackson-readtree/13846

2022年01月07日 0Comments 800Browse 0Like Read more
Computer Science

Java Jackson 如何将数据 push 到 ObjectNode 对象中

有下面 2 种方法来 push 数据。 newsletterNode.put("created_at", topicsNode.get("created_at")); newsletterNode.put("external_link", EXTERNAL_LINK_URL + topicsNode.get("id")); 如果你需要 put 的对象为 JsonNode 的话,不能使用 put 方法。 这个方法被丢弃掉,这就是为什么需要使用 set 的方法。     如上面所示,如果你是 put 其他值的话,你就可以直接 put。 如果你需要 put 对象的话,那么就需要 set,当然你也可以用 put。 只是 put 这个方法被更新使用 set 了。   https://www.ossez.com/t/java-jackson-push-objectnode/13845

2022年01月07日 0Comments 700Browse 0Like Read more
Computer Science

Java Jackson 中如何将 JSON 对象转换为字符串

通常来说只需要下面的 1 行代码就可以完成下面的转换了。 请考察下面的代码: String newsletterJSON = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(newsletterArrayNode); mapper 是下面对象的实例化 ObjectMapper mapper = new ObjectMapper();     上面的代码将会对输出的 JSON 字符串同时进行格式化。   https://www.ossez.com/t/java-jackson-json/13844

2022年01月07日 0Comments 747Browse 0Like Read more
Computer Science

Java 中如何将 String 转换为 Long

请考察下面的代码: Long.parseLong("0", 10) // returns 0L Long.parseLong("473", 10) // returns 473L Long.parseLong("-0", 10) // returns 0L Long.parseLong("-FF", 16) // returns -255L Long.parseLong("1100110", 2) // returns 102L Long.parseLong("99", 8) // throws a NumberFormatException Long.parseLong("Hazelnut", 10) // throws a NumberFormatException Long.parseLong("Hazelnut", 36) // returns 1356099454469L 上面的代码是转换为 Long 的。 转换为 Float 也是一样的。 实际上,我们可能会用到下面的代码来转换。 NumberUtils.toLong("473"); NumberUtils 这个工具类是在 package org.apache.commons.lang3.math 包中的,同时主要也是为了避免出现 null 对象的转换异常。     根据官方的说法为:如果输入的字符串为 null 或者 0 的话,将会有下面的返回和输出。 NumberUtils.toLong(null) = 0L NumberUtils.toLong("") = 0L NumberUtils.toLong("1") = 1L https://www.ossez.com/t/java-string-long/7205

2022年01月06日 0Comments 763Browse 0Like Read more
Computer Science

Java Jackson 中如何 Pending JSON 对象到数组中

希望的输出格式为: [ { "title" : "欢迎来到 USRealEstate 经纪和服务", "image_url" : "https://cdn.usreio.com/discourse-uploads/original/1X/fdefbad432b0e756611496fc9e13e5bdc16c8eef.jpeg", "created_at" : "2021-05-02T18:17:49.413Z" }, { "title" : "不可或缺的美国房屋检查", "image_url" : "https://cdn.usreio.com/discourse-uploads/optimized/1X/47bcb58402b4df4cce4ec3106fda57f08fcc4321_2_1024x418.png", "created_at" : "2021-10-19T18:12:04.224Z" }, { "title" : "关于 USRealEstate - 不动产", "image_url" : null, "created_at" : "2021-05-02T19:53:48.489Z" }] 这个是一个数组格式的 JSON 数据,如何使用 ArrayNode 来生成数据呢?     解决办法 我们可以使用下面的解决办法: 首先初始化一个 ArrayNode 对象 ArrayNode newsletterArrayNode = mapper.createArrayNode(); 在上面的代码中 mapper 为 ObjectMapper 对象。 使用的是下面的代码进行实例化的 ObjectMapper mapper = new ObjectMapper(); 因为是数组,但是数组中存储的是 JsonNode,因此我们可以使用下面的代码: for (JsonNode topicsNode : topicsNodes) { ObjectNode newsletterNode = mapper.createObjectNode(); newsletterNode.set("title", topicsNode.get("title")); newsletterNode.set("image_url", topicsNode.get("image_url")); newsletterNode.set("created_at", topicsNode.get("created_at")); newsletterArrayNode.add(newsletterNode); } 代码说明 上面代码中首先针对 newsletterArrayNode 中的 ArrayNode ,我们需要先初始化一个 ObjectNode 对象。 然后将内容设置到 ObjectNode 中。 在完成 newsletterNode 的对象初始化后可以使用 add 方法,将内容添加到 ArrayNode 对象中。 因为我最后只需要一个数组,因此直接将 newsletterArrayNode 对象输出就可以了。 也可以转换为字符串来存储。   https://www.ossez.com/t/java-jackson-pending-json/13843

2022年01月06日 0Comments 598Browse 0Like Read more
Computer Science

Java Jackson 中的 mapper

在我们在 Java 程序创建的时候,如果需要处理 Jackson,我们可能会用到下面一句话。 private ObjectMapper mapper = new ObjectMapper(); 这个用于创建 ObjectMapper 中的 mapper。 说明 ObjectMapper 对象的创建的成本是比较高的。 因此在创建的时候,我们尽量是创建一次多次使用。 例如我们在使用 Spring Batch 进行批量处理的时候,我们会在 Tasklet 最开始的时候初始化 mapper 对象。 而不是在每次需要的时候再初始化。     如上面的代码,在任务开始的时候我们就对这个对象进行初始化了。   https://www.ossez.com/t/java-jackson-mapper/13841

2022年01月06日 0Comments 668Browse 0Like Read more
Computer Science

AWS 上传的 S3 文件重新载入的时候简体中文显示乱码

在我们将文件上传到 S3 后再次重新从界面中下载的时候发现上传文件的简体中文为乱码。     问题和解决 这是因为在上传的文件的时候文件的 meta 数据设置为 text。 如果是这样的话,上传的文件中的简体中文会显示为乱码。     在源代码上传中,如果使用的是 String 进行上传的话,将会默认使用 text。     尽管所有的文本中都使用了 UTF-8,但是因为这个 UTF-8 是没有 BOM 格式的,因此没有办法识别为 UTF-8 版本。 因此我们在这里需要设置 metadata 元数据。 byte[] bytes = newsletterJSON.getBytes(StandardCharsets.UTF_8); ByteArrayInputStream contentsAsStream = new ByteArrayInputStream(bytes); ObjectMetadata md = new ObjectMetadata(); md.setContentType(MediaType.JSON_UTF_8.toString()); PutObjectResult putObjectResult = s3Client.putObject("com.ossez.real.estate", "kb/newsletter.json", contentsAsStream, md); 考虑上面的代码。 在上面的代码中,我们设置了 ObjectMetadata 对象中的内容类型。 其他 另外,如果你将 String 保存为文件,然后使用 S3 的客户端从文件中读取后上传的话是没有这个问题的。 这个问题的存在就是将 String 保存在内存中的数据直接上传到 S3 上。   https://www.ossez.com/t/aws-s3/13840

2022年01月06日 0Comments 674Browse 0Like Read more
123
Archives
  • June 2026
  • May 2026
  • April 2026
  • March 2026
  • February 2026
  • January 2026
  • December 2025
  • November 2025
  • October 2025
  • September 2025
  • August 2025
  • July 2025
  • June 2025
  • May 2025
  • April 2025
  • March 2025
  • February 2025
  • January 2025
  • December 2024
  • November 2024
  • October 2024
  • September 2024
  • August 2024
  • July 2024
  • June 2024
  • May 2024
  • April 2024
  • March 2024
  • February 2024
  • January 2024
  • December 2023
  • November 2023
  • October 2023
  • September 2023
  • August 2023
  • July 2023
  • June 2023
  • May 2023
  • April 2023
  • December 2022
  • November 2022
  • October 2022
  • September 2022
  • August 2022
  • May 2022
  • April 2022
  • March 2022
  • February 2022
  • January 2022
  • December 2021
  • November 2021
  • October 2021
  • September 2021
  • August 2021
  • July 2021
  • June 2021
  • May 2021
  • April 2021
  • March 2021
  • February 2021
  • January 2021
  • December 2020
  • November 2020
  • October 2020
  • September 2020
  • August 2020
  • July 2020
  • June 2020
  • May 2020
  • April 2020
  • March 2020
  • February 2020
  • January 2020
  • December 2019
  • November 2019
  • October 2019
  • September 2019
  • August 2019
  • July 2019
  • June 2019
  • May 2019
  • April 2019
  • March 2019
  • February 2019
  • January 2019
  • December 2018
  • November 2018
  • October 2018
  • September 2018
  • August 2018
  • July 2018
  • June 2018
  • May 2018
  • April 2018
  • March 2018
Categories
  • Computer Science (2,367)
    • Confluence (663)
    • Gradle (12)
  • U.S. (511)
  • 文化旅游 (146)

COPYRIGHT © 2020 CWIKIUS. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS

湘ICP备2020018253号-1