Skip to content

DATAJDBC-206 - Update README with changes from recent issues. #61

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 4 commits into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 33 additions & 9 deletions README.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -131,12 +131,12 @@ You can configure the `RowMapper` to use, using either the `@Query(rowMapperClas
[source,java]
----

@Bean
RowMapperMap rowMappers() {
return new ConfigurableRowMapperMap() //
.register(Person.class, new PersonRowMapper()) //
.register(Address.class, new AddressRowMapper());
}
@Bean
RowMapperMap rowMappers() {
return new ConfigurableRowMapperMap() //
.register(Person.class, new PersonRowMapper()) //
.register(Address.class, new AddressRowMapper());
}

----

Expand All @@ -152,6 +152,19 @@ When determining the `RowMapper` to use for a method the following steps are fol
If applicable, wrapper types like collections or `Optional` are unwrapped.
Thus, a return type of `Optional<Person>` will use the type `Person` in the steps above.

==== Modifying query

You can mark as a modifying query using the `@Modifying` on query method.

[source,java]
----
@Modifying
@Query("UPDATE DUMMYENTITY SET name = :name WHERE id = :id")
boolean updateName(@Param("id") Long id, @Param("name") String name);
----

The return types that can be specified are `void`, `int`(updated record count) and `boolean`(whether record was updated).

=== Id generation

Spring Data JDBC uses the id to identify entities, but also to determine if an entity is new or already existing in the database.
Expand All @@ -171,6 +184,15 @@ If you are not using autoincrement-columns, you can use a `BeforeSave`-listener
If you use the standard implementations of `CrudRepository` as provided by Spring Data JDBC, it will expect a certain table structure.
You can tweak that by providing a https://github.com/spring-projects/spring-data-jdbc/blob/master/src/main/java/org/springframework/data/jdbc/mapping/model/NamingStrategy.java[`NamingStrategy`] in your application context.

.Optional classes of NamingStrategy
|===
| Class | Description

| https://github.com/spring-projects/spring-data-jdbc/blob/master/src/main/java/org/springframework/data/jdbc/mapping/model/DelimiterNamingStrategy.java[`DelimiterNamingStrategy`]
| The delimiter character implementation of NamingStrategy. The default delimiter is `_`(underscore), resulting in snake case.
|===


=== Events

Spring Data JDBC triggers events which will get published to any matching `ApplicationListener` in the application context.
Expand Down Expand Up @@ -221,7 +243,7 @@ For each operation in `CrudRepository` Spring Data JDBC will execute multiple st
If there is a https://github.com/mybatis/mybatis-3/blob/master/src/main/java/org/apache/ibatis/session/SqlSessionFactory.java[`SqlSessionFactory`] in the application context, it will be checked if it offers a statement for each step.
If one is found, that statement will be used (including its configured mapping to an entity).

The name of the statement is constructed by concatenating the fully qualified name of the entity type with `Mapper.` and a string determining the kind of statement.
By default, the name of the statement is constructed by concatenating the fully qualified name of the entity type with `Mapper.` and a string determining the kind of statement.
E.g. if an instance of `org.example.User` is to be inserted, Spring Data JDBC will look for a statement named `org.example.UserMapper.insert`.

Upon execution of the statement an instance of [`MyBatisContext`] will get passed as an argument which makes various arguments available to the statement.
Expand Down Expand Up @@ -293,13 +315,15 @@ Note that the type used for prefixing the statement name is the name of the aggr
`getDomainType` the type of aggregate roots to count.
|===

==== NamespaceStrategy

You can customize the namespace part of a statement name using https://github.com/spring-projects/spring-data-jdbc/blob/master/src/main/java/org/springframework/data/jdbc/mybatis/NamespaceStrategy.java[`NamespaceStrategy`].

== Features planned for the not too distant future

=== Advanced query annotation support

* customizable `RowMapper`
* projections
* modifying queries
* SpEL expressions

=== MyBatis per method support
Expand Down