Querystream - Build JPA Criteria queries using a Stream-like API

Overview

QueryStream

QueryStream allows you to perform JPA queries using a Stream-like API.

Just like a Java 8 Stream, a QueryStream is built up in a pipeline, using methods like map(), flatMap(), filter(), etc.

Each step in a QueryStream pipeline modifies the construction of an internal JPA Criteria query.

When you're ready to execute the pipeline:

  1. Invoke QueryStream.toCriteriaQuery() to extract the CriteriaQuery; or
  2. Invoke QueryStream.toQuery() to do #1 and also create a TypedQuery; or
  3. Invoke QueryStream.getResultList() or QueryStream.getResultStream() to do #1 and #2 execute the query

Example

Payroll costs are getting out of control. You need a list of all managers whose direct reports have an average salary above $50,000, ordered from highest to lowest.

Here's how you'd build a Criteria query the usual way:

    public List<Employee> getHighPayrollManagers(EntityManager entityManager) {

        // Construct query
        final CriteriaQuery criteriaQuery = cb.createQuery();
        final Root<Employee> manager = criteriaQuery.from(Employee.class);
        final SetJoin<Employee, Employee> directReports = manager.join(Employee_.directReports);
        final Expression<Double> avgSalary = cb.avg(directReports.get(Employee_.salary));
        criteriaQuery.where(cb.greaterThan(avgSalary, 50000.0))
        criteriaQuery.groupBy(manager);
        criteriaQuery.orderBy(avgSalary);

        // Execute query
        final TypedQuery<Employee> typedQuery = entityManager.createQuery(criteriaQuery);
        return typedQuery.getResultList();
    }

    @PersistenceContext
    private EntityManager entityManager;
    private CriteriaBuilder cb;

    @PostConstruct
    private void setupCriteriaBuilder() {
        this.cb = this.entityManager.getCriteriaBuilder();
    }

With QueryStream, your code becomes more succint and visually intuitive:

    public List<Employee> getHighPayrollManagers() {

        // Create a couple of references
        final RootRef<Employee> manager = new RootRef<>();
        final ExprRef<Double> avgSalary = new ExprRef<>();

        // Build and execute query
        return qb.stream(Employee.class)
          .bind(manager)
          .flatMap(Employee_.directReports)
          .mapToDouble(Employee_.salary)
          .average()
          .filter(v -> qb.greaterThan(v, 50000))
          .bind(avgSalary)
          .groupBy(manager)
          .orderBy(avgSalary, false)
          .getResultList();
    }

    @PersistenceContext
    private EntityManager entityManager;
    private QueryStream.Builder qb;

    @PostConstruct
    private void setupBuilders() {
        this.qb = QueryStream.newBuilder(this.entityManager);
    }

See below for more information about references.

Bulk Updates and Deletes

Bulk deletes and updates are also supported.

The QueryStream interface has three subinterfaces for searches, bulk deletes, and bulk updates; these are SearchStream, DeleteStream, and UpdateStream.

Single Values

Some queries are known to return a single value. The SearchValue and its subinterfaces represent streams for which it is known that at most one result will be found. These interfaces have a value() method, which executes the query and returns the single value:

    public double getAverageSalary(Employee manager) {
        return qb.stream(Employee.class)
          .filter(e -> qb.equal(e, manager))
          .flatMap(Employee_.directReports)
          .mapToDouble(Employee_.salary)
          .average()
          .value();
    }

Other similar methods are min(), max(), sum(), and findFirst().

Value queries can be converted to Optionals and have several related convenience methods like orElse(), isPresent(), etc.

References

Ref objects give you a way to refer to items in the stream pipeline at a later step, by bind()'ing the reference at an earlier step.

References also help code clarity, because they provide a way to give meaningful names to important expressions.

See the getHighPayrollManagers() example above for how it works. The main thing to remember is that the bind() must occur prior to the use of the reference in the pipeline.

Subqueries

QueryStream makes using subqueries easier. A stream can be used as a subquery via asSubquery() or exists().

To find all managers for whom there exists a direct report making over $100,000:

    public List<Employee> findManagersWithSixFigureDirectReport() {
        return qb.stream(Employee.class)
          .filter(manager -> qb.stream(Employee.class)
                .filter(report -> qb.and(
                    qb.equal(report.get(Employee_.manager), manager),
                    qb.greaterThan(report.get(Employee_.salary), 100000.0)))
                .exists());
    }

Note the subquery correlation was done "manually" using CriteriaBuilder.equal(); you can clean this up a bit with an explicit correlation using substream():

    public List<Employee> findManagersWithSixFigureDirectReport() {
        return qb.stream(Employee.class)
          .filter(manager -> qb.substream(manager)
            .flatMap(Employee_.directReports)
            .filter(report -> qb.greaterThan(report.get(Employee_.salary), 100000.0))
            .exists());
    }

To find all employees with salary greater than the average of their manager's direct reports:

    public List<Employee> findEmployeesWithAboveAverageSalaries() {
        return qb.stream(Employee.class)
          .filter(employee -> qb.greaterThan(
              employee.get(Employee_.salary),
              qb.stream(Employee.class)
                .filter(coworker ->
                  qb.equal(
                    coworker.get(Employee_.manager),
                    employee.get(Employee_.manager)))
                .mapToDouble(Employee_.salary)
                .average()
                .asSubquery()))
          .getResultList();
    }

Hmmm, that's a lot of nesting. You could make the code clearer by building the subquery separately, and using a reference for the correlation:

    public DoubleValue avgCoworkerSalary(RootRef<Employee> employee) {
        return qb.stream(Employee.class)
          .filter(coworker -> qb.equal(coworker.get(Employee_.manager), employee.get().get(Employee_.manager)))
          .mapToDouble(Employee_.salary)
          .average();
    }

    public List<Employee> findEmployeesWithAboveAverageSalaries() {
        final RootRef<Employee> employee = new RootRef<>();
        return qb.stream(Employee.class)
          .bind(employee)
          .filter(e -> qb.greaterThan(e.get(Employee_.salary), this.avgCoworkerSalary(employee).asSubquery()))
          .getResultList();
    }

That's really just regular Java refactoring.

Multiselect and Grouping

To select multiple items, or construct a Java instance, use mapToSelection().

For grouping, use groupBy() and having().

Here's an example that finds all managers paired with the average salary of their direct reports, where that average salary is at least $50,000, sorted by average salary descending:

    public List<Object[]> getHighPayrollManagers2() {

        // Create references
        final RootRef<Employee> manager = new RootRef<>();
        final ExprRef<Double> avgSalary = new ExprRef<>();

        // Build and execute stream
        return qb.stream(Employee.class)
          .bind(manager)
          .flatMap(Employee_.directReports)
          .mapToDouble(Employee_.salary)
          .average()
          .bind(avgSalary)
          .groupBy(manager)
          .mapToSelection(Object[].class, e -> qb.array(manager.get(), avgSalary.get()))
          .orderBy(avgSalary, false);
          .having(avgSalary -> qb.gt(avgSalary, 50000.0))
          .getResultList();
    }

Offset and Limit

Use skip() and limit() to set the row offset and the maximum number of results.

CriteriaQuery vs TypedQuery Operations

Normally with JPA you first configure a CriteriaQuery, then use it to create a TypedQuery.

Both the CriteriaQuery and the TypedQuery have their own configuration.

For example, where() is a CriteriaQuery method, but setLockMode() is a TypedQuery method.

So at the end of the day, we must apply configuration to the appropriate object for that configuration.

QueryStream pipelines allow you to configure both CriteriaQuery and TypedQuery information, but you should be aware of these caveats:

  • Any TypedQuery configuration must come at the end of the pipeline (after any subqueries or joins)
  • If you invoke QueryStream.toCriteriaQuery(), the returned object does not capture any TypedQuery configuration
  • To capture the TypedQuery configuration as well, use QueryStream.toQuery().

The QueryStream methods that configure the TypedQuery are:

  • QueryStream.skip()
  • QueryStream.limit()
  • QueryStream.withFlushMode()
  • QueryStream.withLockMode()
  • QueryStream.withFetchGraph()
  • QueryStream.withLoadGraph()
  • QueryStream.withHint() and QueryStream.withHints()

Unsupported Operations

In some cases, limitations in the JPA Criteria API impose certain restrictions on what you can do.

For example, skip() and limit() must be at the end of your pipeline, because the JPA Criteria API doesn't allow setting row offset or the maximum results on a subquery or prior to a join.

For another example, you can't sort in a subquery.

Installation

QueryStream is available from Maven Central:

    <dependency>
        <groupId>org.dellroad</groupId>
        <artifactId>querystream-jpa</artifactId>
    </dependency>

API Javadocs

Located here.

Comments
  • Bump h2 from 1.4.196 to 2.0.206

    Bump h2 from 1.4.196 to 2.0.206

    ⚠️ Dependabot is rebasing this PR ⚠️

    Rebasing might not happen immediately, so don't worry if this takes some time.

    Note: if you make any changes to this PR yourself, they will take precedence over the rebase.


    Bumps h2 from 1.4.196 to 2.0.206.

    Release notes

    Sourced from h2's releases.

    Version 2.0.206

    Critical security issue with H2 console is fixed.

    Also important changes included:

    Version 2.0.204

    Multilple regression fixes discovered after 2.0.202 release,

    There are no persistence changes between 2.0.202 and 2.0.204, so jar file swap is enough, if database had been upgraded to 2.0.202 already, otherwise please read the message below:

    Between version 1.4.200 and version 2.0.202 there have been considerable changes, such that a simple update is not possible. The official way to upgrade is to do a BACKUP of your existing database USING YOUR CURRENT VERSION OF H2. Then create a fresh database USING THE NEW VERSION OF H2, then perform a SCRIPT to load your data.

    Version 2.0.202

    Besides many dozens of fixed bugs, performance improvements, more adherence to a standard SQL syntax and type system, there are

    Some new features:

    • Complete re-work of INFORMATION_SCHEMA to be more in-line with the standard
    • Support for new types: ARRAY, ROW, JAVA_OBJECT
    • Numerous bit, string, array and system functions implemented
    • Standard-based access to generated keys
    • JDBC 4.2 compliance
    • Support for JDK 7 is dropped
    • PageStore is discontinued

    MVStore changes:

    • Descending MVMap and TransactionMap cursor
    • Disk space reclamation algorithm improvements

    Between version 1.4.200 and version 2.0.202 there have been considerable changes, such that a simple update is not possible. The official way to upgrade is to do a BACKUP of your existing database USING YOUR CURRENT VERSION OF H2. Then create a fresh database USING THE NEW VERSION OF H2, then perform a SCRIPT to load your data.

    Version 1.4.200

    Some new features:

    • JSON data type; JSON_OBJECT, JSON_ARRAY, JSON_OBJECTAGG, and JSON_ARRAYAGG functions; JSON predicate
    • TIME WITH TIME ZONE data type
    • BITNOT, LSHIFT, and RSHIFT functions

    ... (truncated)

    Commits
    • 3d957a0 Release 2.0.206 preparation
    • 2b6e303 Update changelog
    • b24aa46 Check URL scheme
    • 4a2e677 Get data types directly from linked tables from H2
    • 69aff24 Fix ValueVarcharIgnoreCase.equals()
    • 0ebf142 Fix group-sorted optimization for data types with different equal values
    • 8aca5f4 Correct Date and Time part in tutorial.html
    • 4bfd6f0 Add support of H2 2.0+ to source.html and sourceError.html
    • 927c830 Update copyright years
    • abac6c8 Next development version
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 2
  • Bump h2 from 2.0.206 to 2.1.210

    Bump h2 from 2.0.206 to 2.1.210

    Bumps h2 from 2.0.206 to 2.1.210.

    Release notes

    Sourced from h2's releases.

    Version 2.1.210

    Two security vulnerabilities in H2 Console (CVE-2022-23221 and possible DNS rebinding attack) are fixed.

    Persistent databases created by H2 2.0.x don't need to be upgraded. Persistent databases created by H2 1.4.200 and older versions require export into SQL script with that old version and creation of a new database with the new version and execution of this script in it.

    ... (truncated)

    Commits
    • ca926f8 Merge remote-tracking branch 'h2database/master'
    • be306de Version advancement
    • 030eb72 Improve migration documentation
    • 86d58c4 Merge pull request #3381 from katzyn/legacy
    • b613598 Typo
    • d6e4eb8 Add IDENTITY() and SCOPE_IDENTITY() to LEGACY mode
    • 36e790d make javadoc happier
    • 1c0ca27 Add "of this server" to adminWebExternalNames text
    • 0f83f48 Convert host names to lower case
    • c5f11a5 Merge pull request #3378 from katzyn/lob
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 1
  • Bump h2 from 1.4.196 to 2.0.202

    Bump h2 from 1.4.196 to 2.0.202

    Bumps h2 from 1.4.196 to 2.0.202.

    Release notes

    Sourced from h2's releases.

    Version 2.0.202

    Besides many dozens of fixed bugs, performance improvements, more adherence to a standard SQL syntax and type system, there are

    Some new features:

    • Complete re-work of INFORMATION_SCHEMA to be more in-line with the standard
    • Support for new types: ARRAY, ROW, JAVA_OBJECT
    • Numerous bit, string, array and system functions implemented
    • Standard-based access to generated keys
    • JDBC 4.2 compliance
    • Support for JDK 7 is dropped
    • PageStore is discontinued

    MVStore changes:

    • Descending MVMap and TransactionMap cursor
    • Disk space reclamation algorithm improvements

    Between version 1.4.200 and version 2.0.202 there have been considerable changes, such that a simple update is not possible. The official way to upgrade is to do a BACKUP of your existing database USING YOUR CURRENT VERSION OF H2. Then create a fresh database USING THE NEW VERSION OF H2, then perform a SCRIPT to load your data.

    Version 1.4.200

    Some new features:

    • JSON data type; JSON_OBJECT, JSON_ARRAY, JSON_OBJECTAGG, and JSON_ARRAYAGG functions; JSON predicate
    • TIME WITH TIME ZONE data type
    • BITNOT, LSHIFT, and RSHIFT functions
    • Named columns join (JOIN USING)
    • Type predicate (IS OF)
    • General logarithm function LOG(base, argument)
    • UNKNOWN literal and truth value tests
    • UNIQUE predicate
    • CURRENT_SCHEMA and CURRENT_CATALOG functions
    • Data change delta tables (OLD | NEW | FINAL TABLE)
    • CURRENT VALUE FOR sequence
    • EXECUTE IMMEDIATE command and QUOTE_IDENT function
    • Time zone specification (AT TIME ZONE | LOCAL)
    • ALTER TABLE tableName ALTER COLUMN IF EXISTS columnName
    • READ UNCOMMITTED, REPEATABLE READ, and SNAPSHOT isolation levels with MVStore engine

    Incompatible changes:

    • MVCC setting (ignored since 1.4.198) now results in error
    • MULTI_THREADED setting is removed, MVStore engine is always multi-threaded, PageStore engine is always single-threaded
    • Statement.getGeneratedKeys() uses a FINAL TABLE semantics
    • Proleptic Gregorian calendar is used as required by the Standard
    • Cast from TIME to TIMESTAMP uses CURRENT_DATE for a date part as required by the Standard

    Other changes:

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 1
  • Bump spring-core from 5.3.19 to 5.3.20

    Bump spring-core from 5.3.19 to 5.3.20

    Bumps spring-core from 5.3.19 to 5.3.20.

    Release notes

    Sourced from spring-core's releases.

    v5.3.20

    :star: New Features

    • Refine CachedIntrospectionResults property introspection #28445
    • Improve tests and Javadoc on binding to a property of type javax.servlet.Part #27830
    • WritableResource doesn't have parity with Resource in @Value etc. [SPR-10656] #15284

    :lady_beetle: Bug Fixes

    • Ignore invalid STOMP frame #28443
    • @ModelAttribute name attribute is not supported in WebFlux #28423
    • Fix BindingResult error when ModelAttribute has custom name in WebFlux #28422
    • Request body deserialization failures are not captured by exception handlers in WebFlux #28155

    :notebook_with_decorative_cover: Documentation

    • Remove Log4J initialization from package-info.java in spring-web #28420
    • Remove Log4J configurer from package-info.java in spring-core #28411
    • Fix github issue reference in RequestMappingHandlerMapping #28372
    • Add Javadoc since tags for GraphQL constants #28369
    • Fix method reference in Kotlin documentation #28340

    :hammer: Dependency Upgrades

    • Upgrade to ASM 9.3 #28390
    • Upgrade to Reactor 2020.0.19 #28437

    :heart: Contributors

    We'd like to thank all the contributors who worked on this release!

    Commits
    • e0f56e7 Release v5.3.20
    • 83186b6 Refine CachedIntrospectionResults property introspection
    • dc2947c Ignore invalid connect frame
    • e4ec376 Disabling Undertow server in CoroutinesIntegrationTests
    • c81e11d Polishing
    • de6180b Upgrade to Reactor 2020.0.19
    • 1c10cdd Update copyright dates
    • 941b92c Make inner classes static when feasible
    • e26d883 Stop referring to features as Java 6/7 features where unnecessary
    • a1c7380 Add test for value attribute in @​ModelAttribute in WebFlux
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump spring-core from 5.3.18 to 5.3.19

    Bump spring-core from 5.3.18 to 5.3.19

    Bumps spring-core from 5.3.18 to 5.3.19.

    Release notes

    Sourced from spring-core's releases.

    v5.3.19

    :star: New Features

    • Remove DNS lookups during websocket connection initiation #28280
    • Add application/graphql+json Media type and MIME type constants #28271
    • Fix debug log for no matching acceptableTypes #28116
    • Provide support for post-processing a LocalValidatorFactoryBean's validator Configuration without requiring sub-classing #27956

    :lady_beetle: Bug Fixes

    • Improve documentation and matching algorithm in data binders #28333
    • NotWritablePropertyException when attempting to declaratively configure ClassLoader properties #28269
    • BeanPropertyRowMapper's support for direct column name matches is missing in DataClassRowMapper #28243
    • AbstractListenerReadPublisher does not call ServletOutputStream::isReady() when reading chunked data across network packets #28241
    • ResponseEntity objects are accumulated in ConcurrentReferenceHashMap #28232
    • Lambda proxy generation fix causes BeanNotOfRequiredTypeException #28209
    • CodeGenerationException thrown when using AnnotationMBeanExporter on JDK 17 #28138

    :hammer: Dependency Upgrades

    • Upgrade to Reactor 2020.0.18 #28329

    :heart: Contributors

    We'd like to thank all the contributors who worked on this release!

    Commits
    • cedb587 Release v5.3.19
    • a7cf19c Improve documentation and matching algorithm in data binders
    • 0cf7f7b Polishing
    • 949c3d4 Align plain accessor check
    • 3b4ae7b TomcatHttpHandlerAdapter continues after 0 bytes
    • 8b39698 Upgrade to Reactor 2020.0.18
    • 6fad00e Ensure dynamic proxy with AOP introduction includes lambda interfaces
    • 5f6d8df Introduce isLambdaClass() as a public utility in ClassUtils
    • 35de7e1 Introduce initializer callback for Bean Validation Configuration
    • 10e979e Polishing
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump spring-core from 5.3.14 to 5.3.18

    Bump spring-core from 5.3.14 to 5.3.18

    Bumps spring-core from 5.3.14 to 5.3.18.

    Release notes

    Sourced from spring-core's releases.

    v5.3.18

    :star: New Features

    • Restrict access to property paths on Class references #28261
    • Introduce cancel(boolean mayInterruptIfRunning) in ScheduledTask #28233

    :lady_beetle: Bug Fixes

    • Move off deprecated API in SessionTransactionData #28234

    :notebook_with_decorative_cover: Documentation

    • Introduce warnings in documentation of SerializationUtils #28246
    • Update copyright date in reference manual #28237
    • @Transactional test does not execute all JPA lifecycle callback methods #28228

    :heart: Contributors

    We'd like to thank all the contributors who worked on this release!

    v5.3.17

    :star: New Features

    • Using DataClassRowMapper causes "No property found for column" debug messages in logs #28179
    • Improve diagnostics in SpEL for large array creation #28145
    • Support custom HTTP status in client-side REST testing support #28105
    • AsyncRestTemplate logging too verbose #28049

    :lady_beetle: Bug Fixes

    • java.lang.NoClassDefFoundError: org/springframework/cglib/beans/BeanMapEmitter #28110
    • CronExpression fails to calculate properly next execution when running on the day of winter daylight saving time #28095
    • Private init/destroy method may be invoked twice #28083
    • MappingJacksonValue and Jackson2CodecSupport#registerObjectMappersForType do not work together #28045
    • SpEL fails to recover from error during MIXED mode compilation #28043
    • When returning a ResponseEntity with a Flux while the function is suspended, it fails to encode the body #27809

    :notebook_with_decorative_cover: Documentation

    • Improve documentation for @EnabledIf and @DisabledIf test support #28157
    • Links to Spring Security are broken in the reference guide #28135
    • Document that transaction rollback rules may result in unintentional matches #28125
    • Improve documentation for TestContext events #27757
    • Clarify behavior for generics support in BeanUtils.copyProperties #27259

    :hammer: Dependency Upgrades

    ... (truncated)

    Commits
    • 707a24c Release v5.3.18
    • 002546b Refine PropertyDescriptor filtering
    • 1627f57 Disable flaky integration tests for now
    • 3811cd4 Introduce warnings in documentation of SerializationUtils
    • d927e37 Add "Testing ORM entity lifecycle callbacks" note to Testing chapter
    • 1d302bf Introduce tests for gh-28228
    • 4b150fd Update copyright date in reference manual
    • 3a6016d Merge pull request #28238 from izeye
    • 135506f Update copyright year of EvaluationTests
    • cb36ca3 Upgrade to ASM master
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump spring-core from 5.2.19.RELEASE to 5.3.14

    Bump spring-core from 5.2.19.RELEASE to 5.3.14

    Bumps spring-core from 5.2.19.RELEASE to 5.3.14.

    Release notes

    Sourced from spring-core's releases.

    v5.3.14

    :star: New Features

    • Add default methods to CachingConfigurer #27811
    • Provide a variant of ListableBeanFactory.findAnnotationOnBean(String, Class) that does not initialize factory beans #27796
    • Convert single null argument to Optional.empty() in SpEL varargs expression #27795
    • Declare serialVersionUID on DefaultAopProxyFactory #27784
    • The ReactorClientHttpConnector must apply mapper before tcpConfiguration() #27749
    • Add getter for RequestMappingInfo builder config #27723
    • Give warning when using capturing patterns with the AntPathMatcher #27688
    • Support for customization of 404 response when RouterFunctionWebHandler finds no routes #25358
    • ModelAndView.status does not work with RedirectView #25092
    • ThreadPoolExecutorFactoryBean add ability to prestart threads #1246
    • Support empty attributes in TagWriter #910

    :lady_beetle: Bug Fixes

    • AsyncConfigurer implementations are loaded too early #27808
    • Possible NPE in Spring MVC LogFormatUtils #27782
    • Extending CachingConfigurerSupport results in at least one log message about not being eligible for full post-processing #27751
    • WebFlux ServerResponse does not overwrite already present response headers #27741
    • Passing single null value in varargs SpEL expression results in NullPointerException #27719
    • UriUtils::extractFileExtension does not properly handle empty file names #27639
    • References of CountingBeforeAdvice target its previous location #22246
    • ProxyFactoryBean getObject called before setInterceptorNames, silently creating an invalid proxy [SPR-7582] #12238

    :notebook_with_decorative_cover: Documentation

    • Remove references to AsyncConfigurerSupport as AsyncConfigurer should be used instead #27812
    • Fix javadoc reference to ThrowsAdvice #27804
    • Suggested WebSocket config causes circular bean reference #27746
    • Document the difference in generics resolution between @Autowired and beanFactory.getBeanProvider #27727
    • Clarify that interface-level cache annotations work for target-class proxies as well #27726
    • SchedulerFactoryBean no longer sets the job store's DataSource when the job store class has been customized #27709
    • Fix typo #27699
    • Fix incorrect example of error handling in WebClient Javadoc #27645
    • Missing reference documentation for WebSocketScope #25172
    • Clarify behaviour of AnnotationBeanNameGenerator with acronyms #2030
    • Fix simple data format in appendix #1025
    • Update StoredProcedure.java declareParameter method JavaDoc #1000
    • Document @Bean definitions via default methods #767
    • Improved DataBinder Javadoc for xxx*yyy pattern matching. #699

    :hammer: Dependency Upgrades

    • Upgrade to ASM 9.3 (for early Java 19 support) #27740
    • Upgrade to JUnit 5.8.2 #27744
    • Upgrade to Reactor 2020.0.14 #27793

    :heart: Contributors

    ... (truncated)

    Commits
    • 29185a3 Release v5.3.14
    • 31a4c27 Upgrade to SnakeYAML 1.30, MockK 1.12.1, Jetty Reactive HttpClient 1.1.10
    • d665977 Polishing
    • 0b6a54d Upgrade to R2DBC Arabba-SR11, Kotlin 1.5.32, Jackson 2.12.6
    • 1885ab3 Polishing
    • de10bb6 Stop resolving AsyncConfigurer instances eagerly
    • c764242 Stop resolving CachingConfigurer instances eagerly
    • 4c2e0ee Upgrade to Log4j2 2.16.0
    • 79804d9 Upgrade to Protobuf 3.19.1, Gson 2.8.9, Woodstox 6.2.7, Apache Johnzon 1.2.15...
    • f191cf4 Revised comment on explicit LocalDataSourceJobStore configuration
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump hibernate-validator from 6.1.3.Final to 6.1.5.Final

    Bump hibernate-validator from 6.1.3.Final to 6.1.5.Final

    Bumps hibernate-validator from 6.1.3.Final to 6.1.5.Final.

    Changelog

    Sourced from hibernate-validator's changelog.

    6.1.5.Final (06-05-2020)

    ** Bug * HV-1774 - engine - Invalid parsing of EL expression can lead to invalid EL expressions considered valid * HV-1772 - engine - Building multiple ValidatorFactory instances from a single Configuration violates specification for MessageInterpolator * HV-1771 - translations - Fix DecimalMin message German translation

    ** Improvement * HV-1773 - documentation - Be more explicit about issues with EL injection and how to avoid them

    6.1.4.Final (17-04-2020)

    ** Bug * HV-1760 - validators - @​Negative*/@​Positive* do not support CharSequence as documented

    ** Improvement * HV-1770 - engine - Relax constraint consistency checking for built-in constraints * HV-1769 - engine - Only create the default TraversableResolver if none has been specified * HV-1767 - engine - Reduce the overhead of ConstraintHelper initialization in the predefined scope case

    Commits
    • 8bd23be [Jenkins release job] Preparing release 6.1.5.Final
    • 69e43b6 [Jenkins release job] changelog.txt updated by release build 6.1.5.Final
    • c2e89a9 [Jenkins release job] README.md updated by release build 6.1.5.Final
    • 5415140 HV-1774 Fix an invalid error message for unbalanced '{'/'}'
    • d3b39a7 HV-1774 Add a few tests to demonstrate the behavior of TokenCollector
    • 6ae28a1 HV-1774 Do not interpret '$\A{1+1}' in message templates
    • 438a0fc HV-1774 Test arbitrary code injection through buildConstraintViolationWithTem...
    • c1b392f HV-1773 Be more explicit about issues with EL injection and how to avoid them
    • c067767 HV-1772 Allow overriding MessageInterpolator when config is reused
    • 5966686 HV-1771 Fix DecimalMin message German translation
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump hibernate-validator from 6.0.7.Final to 6.1.0.Final

    Bump hibernate-validator from 6.0.7.Final to 6.1.0.Final

    Bumps hibernate-validator from 6.0.7.Final to 6.1.0.Final.

    Changelog

    Sourced from hibernate-validator's changelog.

    6.1.0.Final (25-10-2019)

    ** Bug * HV-1730 - engine - JavaBeanExecutable fails to initialize for enum type * HV-1715 - engine - Validation can sometimes proceed to the next group in sequence even after one of the constraints generated a violation

    ** Improvement * HV-1729 - performance - Skip allocation of an action for each need to access the context classloader

    ** Task * HV-1743 - build - Upgrade maven-compiler-plugin to 3.8.1 * HV-1742 - build - Upgrade to WildFly 18.0.0.Final * HV-1741 - build - Upgrade ByteBuddy test dependency to 1.10.2 * HV-1740 - engine - Deprecate @​SafeHtml * HV-1739 - engine - CVE-2019-10219 Security issue with @​SafeHtml * HV-1738 - build - Update Jackson test dependency to 2.9.10 * HV-1733 - tests - Fix locale settings of PredefinedScopeValidatorFactoryTest * HV-1732 - build - Change tarLongFileMode to posix for assembly building * HV-1731 - tck-runner - Move TCK signature check to tck-runner module * HV-1728 - build - Upgrade to WildFly 17.0.1.Final * HV-1727 - build - Update Jackson Databind test dependency to 2.9.9.2 * HV-1725 - build - Switch to using Jakarta EE artifacts * HV-1724 - build - Update to OpenJFX 11.0.2 * HV-1680 - engine - Avoid reflection by using instrumentation - build the enhancer

    6.1.0.Alpha6 (19-07-2019)

    ** Bug * HV-1722 - engine - Remove settings-example.xml reference from .travis.yml * HV-1721 - engine - Take into account Hibernate Validator-specific configuration with PredefinedScopeValidatorFactoryImpl * HV-1720 - engine - Support bounded wildcard types in container value unwrapping

    ** New Feature * HV-1723 - validators - Provide a DigitsValidatorForMonetaryAmount to support @​Digits on MonetaryAmounts

    ** Task * HV-1726 - engine - Make PredefinedScopeHibernateValidatorFactory extend HibernateValidatorFactory

    6.1.0.Alpha5 (13-06-2019)

    ** Bug * HV-1713 - engine - Missing violation when a bean is validated with different groups * HV-1709 - validators - Polish Identification numbers are not considering length of the value * HV-1706 - validators - ISBN-13 algorithm does not handle checksum 10

    ** Improvement * HV-1719 - engine - Accept setting per-validator TraversableResolver with PredefinedScopeValidatorFactoryImpl

    ... (truncated)
    Commits
    • 713964a [Jenkins release job] Preparing release 6.1.0.Final
    • 7ff5803 [Jenkins release job] changelog.txt updated by release build 6.1.0.Final
    • 77c9ca3 [Jenkins release job] README.md updated by release build 6.1.0.Final
    • 4194b02 HV-1740 Deprecate @​SafeHtml for planned future removal
    • 124b7dd HV-1739 Fix CVE-2019-10219 Security issue with @​SafeHtml
    • 2687d33 HV-1743 Upgrade maven-compiler-plugin to 3.8.1
    • 8b92994 HV-1742 Upgrade to WildFly 18.0.0.Final
    • ce6c698 HV-1741 Upgrade ByteBuddy test dependency to 1.10.2
    • b115bb6 HV-1725 Fix a few remaining things in the README.md
    • fdfa7ce HV-1725 Explicitly ban javax dependencies
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot ignore this [patch|minor|major] version will close this PR and stop Dependabot creating any more for this minor/major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
Owner
null
Dynamically filters JPA entities with a simple query syntax. Provides JPA/Hibernate predicates and Spring Data specifications.

Spring Filter You need a way to dynamically filter entities without any effort? Just add me to your pom.xml. Your API will gain a full featured search

Turkraft 142 Dec 13, 2022
See how simple it is to build a REST API with a database using Java and Spring Boot

Seu primeiro projeto Java Web no Spring Boot 2022 Veja como é simples construir uma API REST com banco de dados usando Java e Spring Boot Realização D

DevSuperior 74 Dec 26, 2022
Automatic creation of simple CRUD API of Spring boot and JPA project.

fast-crud Automatic creation of simple CRUD API of Spring boot and JPA project.

JinHwanKim 18 Oct 23, 2022
Movie,actor & director RESTful API. Sample app with jpa, flyway and testcontainers

spring-restful-jpa-flyway Movie,actor & director RESTful API. Sample app with jpa, flyway and testcontainers.

null 16 Dec 10, 2022
This project shows how to configure basic auth to secure our rest API and basic transaction on Data JPA

Basic Atuthentication Spring Boot Data JPA, MySQL This project shows how to configure basic auth to secure our rest API and basic transaction on Data

Hafizullah Samim 1 Feb 10, 2022
Spring JPA Many To Many example with Hibernate and Spring Boot CRUD Rest API - ManyToMany annotation

Spring JPA Many To Many example with Hibernate and Spring Boot CRUD Rest API - ManyToMany annotation

null 17 Dec 28, 2022
A code sharing platform built using spring boot, hibernate and JPA as ORM with PostgreSQL which also follows a RESTful architecture.

Snap-Snippet A code sharing platform built using spring boot, hibernate and JPA as ORM with PostgreSQL which also follows a RESTful architecture. Tech

Adnan Hossain 7 Nov 29, 2022
Log4j CVE-2021-44228 examples: Remote Code Execution (through LDAP, RMI, ...), Forced DNS queries, ...

Log4j CVE-2021-44228 and CVE-2021-45046 Requisites Use a vulnerable JDK, for instance JDK 1.8.0_181 Usage Malicious server The malicious server deploy

Manuel Álvarez Álvarez 5 Feb 7, 2022
In this course, we will learn how to build a complete full-stack web application using Spring boot as backend and React (React Hooks) as frontend

In this course, we will learn how to build a complete full-stack web application using Spring boot as backend and React (React Hooks) as frontend. We will use MySQL database to store and retrieve the data.

Ramesh Fadatare 43 Dec 22, 2022
This is a Food Delivery Mobile Application. Build Using React Native

Ax Food Delivery Service This is a Food Delivery Mobile Application build using ?????????? ???????????? ?? Installation Clone this repository git clon

Mindula Dilthushan Manamperi 13 Jul 14, 2022
PortalController - A rudimentary TeamViewer-like remote control app for Android, using ws.

PortalController A TeamViewer-like app for Android-to-Android remote control, using node.js and websockets (ws). Some insight The reason I call it rud

Mike Anderson 10 Dec 15, 2022
The goal of the project is to create a web application using Java EE and database (PostgreSQL) without connecting a modern technology stack like spring boot and hibernate

About The Project SignIn page SignUp page Profile page The goal of the project is to create a web application using Java EE and database (PostgreSQL)

Islam Khabibullin 2 Mar 23, 2022
A lightweight, mixin like injection lib using ASM

ClassTransform A lightweight, mixin like injection lib using ASM. The usage is like Mixins. You can almost copy-paste mixins code and it works. Why? I

Lenni0451 15 Dec 22, 2022
springboot 框架与其它组件结合如 jpa、mybatis、websocket、security、shiro、cache等

致歉 由于自己懒以及身体对issuse 解决的不及时。请大家以后提issuse 的时候写清楚 模块名 比如“springboot-SpringSecurity4” 和问题,我会抽时间抓紧解决。 springboot-SpringSecurity0 包含两部分代码: 第一是 博客 springboot

abel 5.9k Jan 5, 2023
:herb: 基于springboot的快速学习示例,整合自己遇到的开源框架,如:rabbitmq(延迟队列)、Kafka、jpa、redies、oauth2、swagger、jsp、docker、spring-batch、异常处理、日志输出、多模块开发、多环境打包、缓存cache、爬虫、jwt、GraphQL、dubbo、zookeeper和Async等等:pushpin:

欢迎大家留言和PR~ Tip: 技术更新换代太快,本仓库仅做参考,自己的项目具体使用哪个版本还需谨慎思考~(不推荐使用最新的版本,推荐使用(最新-1|2)的版本,会比较稳定) spring-boot-quick 前言   自己很早就想搞一个总的仓库就是将自己平时遇到的和学习到的东西整合在一起,方便后

wangxc 2.1k Jan 2, 2023
以教学为目的的电商系统。包含ToB复杂业务、互联网高并发业务、缓存应用;DDD、微服务指导。模型驱动、数据驱动。了解大型服务进化路线,编码技巧、学习Linux,性能调优。Docker/k8s助力、监控、日志收集、中间件学习。前端技术、后端实践等。主要技术:SpringBoot+JPA+Mybatis-plus+Antd+Vue3。

简介 bcMall 是一个以教学为目的的电商系统。bcMall将为你展现一个典型的系统演进过程,所使用的主流技术完全开放。 它包含ToB复杂业务、互联网高并发业务、缓存应用;DDD、微服务指导。模型驱动、数据驱动。了解大型服务进化路线,编码技巧、学习Linux,性能调优。Docker/k8s助力、监

xjjdog 411 Jan 3, 2023
This is a simple realization of custom messages pre/post processing in spring-boot HTTP/Stream requests & responses

spring-boot-custom-message-converting-instances This is a simple realization of custom messages converting in spring-boot HTTP requests and responses.

Innopolis University Java Team 1 Jul 22, 2022
An examples of creating test records in the database with Spring Boot + Spring Data + JPA usage.

Spring Boot + JPA — Clear Tests An examples of creating test records in the database with Spring Boot + Spring Data + JPA usage. Check out the article

Semyon Kirekov 8 Nov 24, 2022
SpringData JPA - Alura

SpringDataJPA SpringData JPA - Alura Projeto de estudo do SpringData JPA, usando as interfaces @Repository, classes @Service, aplicando injeção de dep

Vinicius Alkimin 2 Feb 4, 2022