3.3 Spring Integration
Hint
This article is generated by AI translation.
What is Spring
Spring is a widely used lightweight open-source framework that simplifies enterprise application development.
Its core BeanFactory handles object creation and lifecycle management.
- Spring project: https://spring.io/
Features
- Broad version support
- SpringBoot 2/3
- Spring 4.0.0 minimum
- Multiple configuration styles
- application.properties
- Annotation-based
- Spring XML
Setup
First add the dependency, current version: 6.4.0
- SpringBoot
- Plain Spring
<dependency>
<groupId>net.hasor</groupId>
<artifactId>dbvisitor-spring-starter</artifactId>
<version>latest version</version>
</dependency>
<dependency>
<groupId>net.hasor</groupId>
<artifactId>dbvisitor-spring</artifactId>
<version>latest version</version>
</dependency>
Use HikariCP
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>4.0.3</version>
</dependency>
- application.properties
- Annotation-based
- XML Configuration
# Spring JDBC datasource
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/devtester
spring.datasource.username=root
spring.datasource.password=123456
# Required
dbvisitor.mapper-packages=com.example.demo.dao
dbvisitor.mapper-locations=classpath:dbvisitor/mapper/*.xml
@Configuration
@MapperScan(basePackages = "com.example.demo.dao",
mapperLocations = "classpath:dbvisitor/mapper/*.xml")
public class DemoApplication {
...
}
<!-- Configuration -->
<bean id="configuration" class="net.hasor.dbvisitor.spring.support.ConfigurationBean">
<property name="mapperResources" value="classpath*:dbvisitor/mapper/*Mapper.xml"/>
</bean>
<!-- Session -->
<bean id="session" class="net.hasor.dbvisitor.spring.support.SessionBean">
<property name="configuration" ref="configuration"/>
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- userMapper -->
<bean id="userMapper" class="net.hasor.dbvisitor.spring.support.MapperBean">
<property name="session" ref="session"/>
<property name="mapperInterface" value="com.example.demo.dao.UserMapper"/>
</bean>
If adding XML for each Mapper is tedious, use MapperScannerConfigurer to scan and register them.
<!-- Mapper Scanner -->
<bean class="net.hasor.dbvisitor.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.example.demo.dao"/>
<property name="session" ref="session"/>
</bean>
Inject a Mapper
public class ServiceTest {
@Resource // or @Autowired
private UserMapper userMapper;
...
}
Transactions
- Annotation-based
- XML Configuration
@Configuration
public class DsConfig {
@Bean
public PlatformTransactionManager txManager(DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
<!-- Transaction manager -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- Enable @Transactional -->
<tx:annotation-driven transaction-manager="transactionManager"/>
Control transactions with @Transactional
import org.springframework.transaction.annotation.Transactional;
public class TxExample {
@Transactional(propagation = Propagation.REQUIRES)
public void exampleMethod() {
...
}
}
Example projects
Example
- SpringBoot2 example and SpringBoot3 example using application.properties
- XML-config example
- XML-config with MapperScannerConfigurer example
Configuration reference
application.properties keys
| Key | Description |
|---|---|
| dbvisitor.mapper-packages | 可选 Packages to scan for Mapper interfaces; separate multiple with , |
| dbvisitor.mapper-locations | 可选 Locations of Mapper XML files; default classpath*:/dbvisitor/mapper/**/*.xml; separators: ,; \t\n |
| dbvisitor.mapper-disabled | 可选 true/false to disable Mapper interfaces found via dbvisitor.mapper-packages; default false. Set true if shared mapper files conflict. |
| dbvisitor.mapper-name-generator | 可选 Class name of a custom BeanNameGenerator for mapper bean names; default empty. |
| dbvisitor.marker-annotation | 可选 Annotation that marks an interface as a Mapper; default net.hasor.dbvisitor.mapper.MapperDef |
| dbvisitor.marker-interface | 可选 Interface that marks an interface as a Mapper; default net.hasor.dbvisitor.mapper.Mapper |
| dbvisitor.mapper-factory-bean | 可选 Factory bean class for Mappers; default net.hasor.dbvisitor.spring.support.MapperBean |
| dbvisitor.ref-session | 可选 Session bean name to use for Mapper beans. |
| dbvisitor.mapper-lazy-init | 可选 Mapper bean lazyInit flag; default false |
| dbvisitor.mapper-scope | 可选 Spring scope for Mapper beans; defaults to AbstractBeanDefinition.SCOPE_DEFAULT; consider singleton if setting explicitly. |
| dbvisitor.auto-mapping | 可选 Automatically map all fields to columns; true = auto, false = require @Column |
| dbvisitor.camel-case | 可选 Convert table/column names using camel-case to underscore |
| dbvisitor.use-delimited | 可选 Force identifier quoting for table/column/index names (e.g., when names are keywords); default false |
| dbvisitor.case-insensitive | 可选 Case-insensitive table/column names; default true |
| dbvisitor.ignore-nonexist-statement | 可选 Ignore missing mappings when binding Mapper methods to XML; default false (throws) |
| dbvisitor.dialect | 可选 Default database dialect |
@MapperScan attributes
| Attribute | Description |
|---|---|
| value, basePackages, basePackageClasses | Same as dbvisitor.mapper-packages |
| mapperLocations | Same as dbvisitor.mapper-locations |
| nameGenerator | Same as dbvisitor.mapper-name-generator |
| annotationClass | Same as dbvisitor.marker-annotation |
| markerInterface | Same as dbvisitor.marker-interface |
| sessionRef | Same as dbvisitor.ref-session |
| factoryBean | Same as dbvisitor.mapper-factory-bean |
| lazyInit | Same as dbvisitor.mapper-lazy-init |
| defaultScope | Same as dbvisitor.mapper-scope |
| mapperDisabled | Same as dbvisitor.mapper-disabled |
tip
Annotation configuration has higher priority than properties (application.properties is recommended).
ConfigurationBean properties
| Property | Description |
|---|---|
| mapperResources | Same as dbvisitor.mapper-locations |
| mapperInterfaces | Same as dbvisitor.marker-interface; ConfigurationBean also loads resources referenced on Mappers |
| typeRegistry | Custom registry for type handlers |
| javaTypeHandlerMap | Map custom TypeHandler to Java types |
| jdbcTypeHandlerMap | Map custom TypeHandler to JDBC types |
| ruleRegistry | Custom registry for rules |
| ruleHandlerMap | Register custom rules |
| autoMapping | Same as dbvisitor.auto-mapping |
| camelCase | Same as dbvisitor.camel-case |
| caseInsensitive | Same as dbvisitor.case-insensitive |
| useDelimited | Same as dbvisitor.use-delimited |
| dialectName | Same as dbvisitor.dialect |
| ignoreNonExistStatement | Same as dbvisitor.ignore-nonexist-statement |
SessionBean properties
| Property | Description |
|---|---|
| configuration | Configuration used by the Session created by SessionBean |
| dataSource | DataSource to use |
| dsAdapter | AbstractDsAdapter implementation; defines how to get Connections from the DataSource |
| dsAdapterClass | Class name of dsAdapter (equivalent to dsAdapterName) |
| dsAdapterName | String name of dsAdapter (equivalent to dsAdapterClass) |
MapperBean properties
| Property | Description |
|---|---|
| session | Session used by MapperBean to create Mapper objects |
| mapperInterface | Interface of the Mapper to create |
MapperScannerConfigurer properties
| Property | Description |
|---|---|
| basePackage | Same as dbvisitor.mapper-packages |
| nameGeneratorName | Same as dbvisitor.mapper-name-generator (class name) |
| nameGenerator | Same as dbvisitor.mapper-name-generator (object) |
| annotationClassName | Same as dbvisitor.marker-annotation (class name) |
| annotationClass | Same as dbvisitor.marker-annotation (class) |
| markerInterfaceName | Same as dbvisitor.marker-interface (class name) |
| markerInterface | Same as dbvisitor.marker-interface (class) |
| session | Same as dbvisitor.ref-session (object) |
| sessionRef | Same as dbvisitor.ref-session (bean name) |
| mapperFactoryBeanClassName | Same as dbvisitor.mapper-factory-bean (class name) |
| mapperFactoryBeanClass | Same as dbvisitor.mapper-factory-bean (class) |
| mapperDisabled | Same as dbvisitor.mapper-disabled |
| lazyInit | Same as dbvisitor.mapper-lazy-init |
| defaultScope | Same as dbvisitor.mapper-scope |
| dependsOn | Beans that a Mapper depends on at creation time |