diff --git a/README.adoc b/README.adoc index cbddaccba5..3148e0d74a 100644 --- a/README.adoc +++ b/README.adoc @@ -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()); +} ---- @@ -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` 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. @@ -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. @@ -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. @@ -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