分类目录归档:Java

Use Liquibase to Safely Evolve Your Database Schema


1.概述

在本文中,我们将使用CSV文件外部化应用程序的设置数据,而不是对其进行硬编码。

此设置过程主要涉及在新系统上设置新数据。

2. CSV库

让我们首先介绍一个简单的库来处理CSV - Jackson CSV扩展:

<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-csv</artifactId>       
    <version>2.5.3<...

阅读全文...

使用Flyway进行数据库迁移


1.简介

本文介绍了Flyway的 关键概念以及我们如何使用此框架可靠,轻松地不断重新构建应用程序的数据库模式。最后,我们将介绍使用Maven Flyway插件管理内存H2数据库的示例。

Flyway使用迁移将数据库从一个版本更新为下一个版本。我们可以在SQL中使用数据库特定语法编写迁移,也可以在Java中编写迁移以进行高级数据库转换。

迁移可以是版本化的,也可以是可重复的。前者有一个独特的版本,只适用一次。后者没有版本。相反,每次校验和更改时(重新)应用它们。

在单个迁移运行中,在执行挂起的版本化迁移后,始终会始终应用可重复的迁移。可重复迁移按其描述顺序应用。对于单个迁移,所有语句都在...

阅读全文...

使用Spring数据的Spring Boot应用程序中的DynamoDB


1.概述

在本文中,我们将通过实际的实际示例项目探索将DynamoDB集成到Spring Boot Application中的基础知识。

我们将演示如何使用Spring Data配置应用程序以使用本地DynamoDB实例。我们还将创建示例数据模型和存储库类,以及使用集成测试执行实际的数据库操作。

2. DynamoDB

DynamoDB是AWS上完全托管的托管NoSQL数据库,类似于其他NoSQL数据库,如Cassandra或MongoDB。DynamoDB提供快速,一致和可预测的性能,并且具有大规模可扩展性。

您可以在AWS文档中了解有关DynamoDB的更多信息。

让我们安装一个Dy...

阅读全文...

Liquibase回滚简介


1.概述

在我们之前的文章中,我们将Liquibase显示为管理数据库模式和数据的工具。

在本文中,我们将更多地介绍回滚功能 - 以及我们如何撤消Liquibase操作。

当然,这是任何生产级系统的关键特征。

2. Liquibase迁移的类别

有两类Liquibase操作,导致不同代的回滚语句:

自动,其中迁移可以确定性地生成回滚所需的步骤 手动,我们需要发出回滚命令,因为迁移指令不能用于确定性地识别语句 例如,回滚“create table”语句将“ 删除”创建的表。这可以毫无疑问地确定,因此可以自动生成回滚语句。

另一方面,无法确定“drop table”命令的回滚语句。无法确定表...

阅读全文...

0Liquibase安全地发展您的数据库架构


1.概述

在本快速教程中,我们将利用Liquibase来改进 Java Web应用程序的数据库模式。

我们将首先关注一般的Java应用程序,我们还将重点关注一些可用于Spring和Hibernate的有趣选项。

简单地说,使用Liquibase的核心是在更新日志文件 -即跟踪需要运行更新数据库的所有更改的XML文件。

让我们从我们需要添加到pom.xml中的Maven依赖开始:

<dependency>
    <groupId>org.liquibase</groupId>
     <artifactId>liquibase-core&...

阅读全文...

在Spring应用程序中通过CSV外部化设置数据


1.概述

在本文中,我们将使用CSV文件外部化应用程序的设置数据,而不是对其进行硬编码。

此设置过程主要涉及在新系统上设置新数据。

2. CSV库

让我们首先介绍一个简单的库来处理CSV - Jackson CSV扩展:

<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-csv</artifactId>       
    <version>2.5.3<...

阅读全文...

JPA Pagination


1.概述

本文说明了如何在Java Persistence API中实现分页。

它解释了如何使用基本JQL进行分页,以及使用更加类型安全的基于Criteria的API,讨论每个实现的优点和已知问题。

2.使用JQL和setFirstResult(),setMaxResults() API进行分页

实现分页的最简单方法是使用Java查询语言 - 创建查询并通过setMaxResults 和s e tFirstResult进行配置:

Query query = entityManager.createQuery("From Foo");
int pageNumber = ...

阅读全文...

Hibernate Pagination


1.概述

本文是Hibernate中分页的快速介绍。我们将看看标准的HQL以及ScrollableResults API,最后是Hibernate Criteria的分页。

2.使用HQL和setFirstResult,setMaxResults API进行分页

在Hibernate中进行分页的最简单和最常用的方法是使用HQL:

Session session = sessionFactory.openSession();
Query query = sess.createQuery("From Foo");
query.setFirstResult(0);
quer...

阅读全文...

使用Hibernate排序


1.概述

本文演示了如何使用Hibernate查询语言(HQL)和Criteria API对Hibernate 进行排序。

2.使用HQL排序

使用Hibernate的HQL排序就像将Order By子句添加到HQL查询字符串一样简单:

String hql = "FROM Foo f ORDER BY f.name";
Query query = sess.createQuery(hql);

执行此代码后,Hibernate将生成以下SQL查询:

Hibernate: select foo0_.ID as ID1_0_, foo0_.NAME as NAME2_0...

阅读全文...

Hibernate映射异常 - 未知实体


1.问题

本文将讨论org.hibernate.MappingException:未知的实体问题和解决方案,既适用于Hibernate,也适用于Spring和Hibernate环境。

2.缺少或无效的@Entity注释

映射异常的最常见原因是缺少@Entity注释的实体类:

public class Foo implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    public Foo() {
        super(...

阅读全文...