We have summarized the changes in 2.1 released on July 15, 2019. This change removes support for Spring Boot 2.0.x, which is already in EOL, and requires Spring Boot 2.1 or higher.
In addition, it should be noted
Please also see if necessary.
NOTE:
By the way, the maintenance of mybatis-spring-boot-starter 2.0.x is basically finished (we will consider whether to provide a patch when a fatal bug etc. is reported, but basically Will propose a version upgrade).
In addition, maintenance for Spring Boot 1.5.x (Spring Framework 4.3.x) is continuing in version 1.3.x, but it is announced that Spring Boot 1.5.x will be EOL by 2019/8. Since it has been done, the maintenance of version 1.3.x will be finished at the same time (= the maintenance will be finished by releasing 1.3.5 at the end).
Since it has been reported that there is a bug in this version, it is necessary to apply a workaround if the conditions for causing the bug are met. The bug will be fixed in mybatis-spring-boot-starter 2.1.1 (mybtis-spring 2.0.3), which is scheduled to be released around mid-October 2019. (Added on July 21, 2019)
TypeHandler
which creates an instance using a constructor that takes`` Class` as an argument by specifying the package (For details, see "[gh-370](https://github.com/mybatis/spring-". boot-starter / issues / 370) "and" mybatis-spring / gh-394 ")In version 2.1, the following library versions have been updated.
Library name | 2.0.1 version | 2.1.0 version | Supplement |
---|---|---|---|
MyBatis | 3.5.1 | 3.5.2 | - |
MyBatis Spring | 2.0.1 | 2.0.2 | As for API compatibility, MyBatis Spring 2.0+If so, it works, but2 to use all functions.0.2+Is necessary |
MyBatis Velocity(Optional) | - | 2.1.0 | API compatibility is 2.1.It works even before 0, but2 to use all functions.1.0+Is necessary |
MyBatis Freemarker(Optional) | - | 1.2.0 | API compatibility is 1.2.It works even before 0, but1 to use all functions.2.0+Is necessary |
MyBatis Thymeleaf(Optional) | - | 1.0.1 | |
Spring Boot | 2.0.9.RELEASE | 2.1.6.RELEASE | 2 on Travis CI.2.0-Tested using SNAPSHOT |
Language Driver
Supported the mechanism to automatically detect LanguageDriver
registered in DI container and apply it to MyBatis.
With this support, the LanguageDriver
class created by the developer can be applied to MyBatis by defining the Bean as follows.
Bean definition example of original Language Driver
@Bean
MyLanguageDriver myLanguageDriver() {
return MyLanguageDriver();
}
Furthermore, if there is only one bean of LanguageDriver
detected from the DI container, the detectedLanguageDriver
will be treated as the default LanguageDriver
class (if multiple beans are detected, the default settings of MyBatis itself will be used. A certain XMLLanguageDriver
is applied as is). If you do not want to change the default LanguageDriver
class by the automatic detection function, or if you want to change the default LanguageDriver
class when using multiple LanguageDriver
s together, the followingmybatis. Be sure to explicitly specify the default
LanguageDriver class using the default-scripting-language-driver
property (a property added in version 2.1).
mybatis.default-scripting-language-driver
Until version 2.0, as a way to specify the LanguageDriver
class to be used by default, the property mybatis.configuration.default-scripting-language
(property for setting the value directly to the configuration class provided by MyBatis itself) However, since it may not work as expected when combined with "Support for automatic configuration of LanguageDriver
"described later, this property has been abolished (prohibited from use) and newly mybatis. Added .default-scripting-language-driver
.
mybatis.default-scripting-language-driver={FQCN of the default LanguageDriver class}
Language Driver
Supports the automatic configuration mechanism for the following three submodules (LanguageDriver
) that are genuine MyBatis.
If you add the jar files of the above three submodules to the classpath, the beans of the LanguageDriver
class provided by the submodule will be automatically registered in the DI container and applied to MyBatis. If the developer explicitly defines the LanguageDriver
class provided by the above submodule as a bean, automatic configuration will not be performed.
WARNING:
If all of the following conditions are met, backward compatibility will be lost and additional measures will be required.
- Only one jar of the above three submodules (mybatis-velocity, mybatis-freemarker, mybatis-thymeleaf) ** is on the classpath **
- The default
LanguageDriver
is not ** theLanguageDriver
provided by the submodule **If the conditions are met, the
LanguageDriver
class provided by the submodule is set to the defaultLanguageDriver
, so it is necessary to explicitly specify the defaultLanguageDriver
as shown below. There is.mybatis.default-scripting-language-driver={FQCN of the default LanguageDriver class}
Add the following artifacts to apply ʻorg.mybatis.scripting.velocity.VelocityLanguageDriver (If you specify mybatis-velocity 2.0 or earlier, ʻorg.mybatis.scripting.velocity.Driver
) to MyBatis.
pom.xml
<!--When using Mybatis Velocity-->
<dependency>
<groupId>org.mybatis.scripting</groupId>
<artifactId>mybatis-velocity</artifactId>
<version>2.1.0</version>
</dependency>
When using mybatis-velocity 2.1.0 or later, you can customize the behavior of MyBatis Velocity and the Velocity template engine used in MyBatis Velocity by using the mechanism of configuration properties.
src/main/resources/application.properties
#
# mybatis.scripting-language-driver.velocity.{key} = {value}format
#
#Properties that customize the behavior of Velocity itself
# mybatis.scripting-language-driver.velocity.velocity-settings.{name} = {value}format
# {name}Please refer to the reference document for the properties that can be set to.
mybatis.scripting-language-driver.velocity.velocity-settings.runtime.custom_directives = com.example.directives.MyDirective
#Additional attributes to pass to the template engine(object)Property to specify
# mybatis.scripting-language-driver.velocity.additional-context-attributes.{name} = {value}
mybatis.scripting-language-driver.velocity.additional-context-attributes.likeEscape = com.example.helpers.LikeEscape
Add the following artifacts to apply ʻorg.mybatis.scripting.freemarker.FreeMarkerLanguageDriver` to MyBatis.
pom.xml
<dependency>
<groupId>org.mybatis.scripting</groupId>
<artifactId>mybatis-freemarker</artifactId>
<version>1.2.0</version>
</dependency>
When using mybatis-velocity 1.2.0 or later, you can customize the behavior of the template engine of MyBatis FreeMarker and FreeMarker used in MyBatis FreeMarker by using the mechanism of the configuration property.
src/main/resources/application.properties
#
# mybatis.scripting-language-driver.freemarker.{key} = {value}format
#
#Properties that customize the behavior of FreeMarker itself
# mybatis.scripting-language-driver.freemarker.freemarker-settings.{name} = {value}format
# {name}Please refer to the reference document for the properties that can be set to.
mybatis.scripting-language-driver.freemarker.freemarker-settings.interpolation_syntax = dollar
#Properties that customize the behavior of MyBatis FreeMarker
# mybatis.scripting-language-driver.freemarker.{name} = {value}
# {name}Please refer to the reference document for the properties that can be set to.
mybatis.scripting-language-driver.freemarker.template-file.base-dir = sql
Add the following artifacts to apply ʻorg.mybatis.scripting.thymeleaf.ThymeleafLanguageDriver` to MyBatis.
pom.xml
<dependency>
<groupId>org.mybatis.scripting</groupId>
<artifactId>mybatis-thymeleaf</artifactId>
<version>1.0.1</version>
</dependency>
You can customize the behavior of the Thymeleaf template engine used in MyBatis Thymeleaf and MyBatis Thymeleaf by using the mechanism of configuration properties.
src/main/resources/application.properties
#
# mybatis.scripting-language-driver.thymeleaf.{key} = {value}format
#
#Properties that customize the behavior of MyBatis Thymeleaf
# mybatis.scripting-language-driver.thymeleaf.{name} = {value}
# {name}Please refer to the reference document for the properties that can be set to.
mybatis.scripting-language-driver.thymeleaf.use2way = false
mybatis.scripting-language-driver.thymeleaf.template-file.cache-enabled = false
mybatis.scripting-language-driver.thymeleaf.dialect.like-additional-escape-target-chars = %, _
Added support for the option to control the initialization timing of Mapper registered in DI container (when DI container is initialized, injected or used). The default behavior is that all Mappers are initialized when the DI container is initialized.
This option causes an error when calling Mappr methods under certain conditions when enabling the bean deferred initialization mechanism supported by Spring Boot 2.2 (the official version has not been released at the time of posting). Therefore, it was added so that the user can control whether or not the delay initialization is applied to Mapper. If you just want to avoid the error, you can unconditionally disable the delayed initialization for Mapper, but I think that the delayed initialization mechanism is effective at the time of development (testing), so MyBatis (mybatis-spring) & mybatis-spring-boot-starter) Enabled to control the deferred initialization of Mapper independently. For more information, see About mybatis.lazy-initialization added in mybatis-spring-boot 2.1.0.
NOTE:
Since the delay initialization mechanism provided in this version is unique to MyBatis (mybatis-spring & mybatis-spring-boot-starter), it can also be used in Spring Boot 2.1 series.
TypeHandler
Supported the mechanism to automatically detect TypeHandler
registered in DI container and apply it to MyBatis.
With this support, the TypeHandler
class created by the developer can be applied to MyBatis by defining the Bean as follows.
Bean definition example of original TypeHandler
@Bean
MyTypeHandler myTypeHandler() {
return MyTypeHandler();
}
MapperScannerConfigurer
to the mapper scan disable conditionIf the developer has explicitly defined Mapper to be registered in the DI container, mybatis-spring-boot-start will disable Mapper's automatic scanning. Until version 2.0, automatic scanning was disabled if any of the following conditions were met:
@MapperScan
in the configuration class<mybatis: scan>
in the XML configurationMapperFactoryBean
In version 2.1, in addition to the above
MapperScannerConfigurer
If you do, Mapper's automatic scanning will be disabled.
In mybatis-spring 2.0.1, which version 2.0.1 depends on, under certain conditions, "Duplicate error when scanning type aliases / kazuki43zoo / items / 38a24e051359e39c012c #% E3% 83% 99% E3% 83% BC% E3% 82% B9% E3% 83% 91% E3% 83% 83% E3% 82% B1% E3% 83% BC% E3% 82% B8% E6% 8C% 87% E5% AE% 9A% E6% 99% 82% E3% 81% AE% E3% 83% AF% E3% 82% A4% E3% 83% AB% E3% 83% 89% E3% 82% AB% E3% 83% BC% E3% 83% 89% E3% 82% 92% E3% 82% B5% E3% 83% 9D% E3% 83% BC% E3% 83% There was "88)", but it has been fixed in mybatis-spring 2.0.2, which version 2.1.0 depends on.
properties
attribute to @MybatisTest
Added an attribute (properties
) to specify properties (key = value format) to @MybatisTest
. This support eliminates the need to use @TestPropertySource
if you have a property that you want to apply only during testing. This support is a feedback of the mechanism added to @JdbcTest
in Spring Boot 2.1 to @MybatisTest
.
@MybatisTest(properties = {
"logging.level.org.springframework.jdbc=debug",
"spring.datasource.schema=classpath:TodoMapperTests/schema.sql"
})
public class TodoMapperTests {
// ...
}
Changed the source file of the reference document generated using Maven Site Plugin from XDOC format to Markdown format. Since I just changed the format of the source file, the contents of the document are basically the same (except for the application part of the changes supported in 2.1.0), but ... "Code highlight of source code" is It's gone (I'm currently investigating whether it's a restriction when using Markdown or if the Plugin is used incorrectly).
With this support, the code highlight has disappeared from the post-build document, but by using Markdown format, the latest document (= snapshot version document) can be referenced via GitHub. (= I changed from XDOC format to Markdown format in order to give priority to this merit).
In version 2.1, we have increased the variation of Sample to enhance the integration test. It was.
Language Driver
relatedSample project name | Description |
---|---|
mybatis-spring-boot-sample-velocity | MyBatis Velocity 2.1+Base simple sample project |
mybatis-spring-boot-sample-velocity-legacy | MyBatis Velocity 2.0-based simple sample project |
mybatis-spring-boot-sample-freemarker | MyBatis FreeMarker 1.2+Base simple sample project |
mybatis-spring-boot-sample-velocity-legacy | MyBatis FreeMarker 1.1.x-based simple sample project |
mybatis-spring-boot-sample-thymeleaf | Simple sample project of MyBatis Thymeleaf |
Sample project name | Description |
---|---|
mybatis-spring-boot-sample-groovy | Simple sample project using Groovy |
mybatis-spring-boot-sample-kotlin | Simple sample project using Kotlin |
Recommended Posts