Skip to main content

3.3 Spring 整合

什么是 Spring

Spring 是一个广泛应用的轻量级的开源框架,旨在简化企业级应用开发的复杂性。 它通过核心的 BeanFactory 实现了底层类的实例化和生命周期管理。

dbvisitor-spring 特性

  • 广泛的版本支持
    • SpringBoot 2/3
    • Spring 4.0.0 最低
  • 多种配置方式
    • application.properties 配置文件
    • 注解化
    • Spring XML 方式配置

配置方法

首先引入依赖包,当前版本:6.0.1

<dependency>
<groupId>net.hasor</groupId>
<artifactId>dbvisitor-spring-starter</artifactId>
<version>最新版本的版本号</version>
</dependency>
选用 HikariCP 作为数据库链接池
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>4.0.3</version>
</dependency>
# Spring JDBC 数据源配置
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/devtester
spring.datasource.username=root
spring.datasource.password=123456
# 必选
dbvisitor.mapper-packages=com.example.demo.dao
dbvisitor.mapper-locations=classpath:dbvisitor/mapper/*.xml
注入 Mapper
public class ServiceTest {
@Resource // 或 @Autowired
private UserMapper userMapper;
...
}

使用事务

@Configuration
public class DsConfig {
@Bean
public PlatformTransactionManager txManager(DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
通过 @Transactional 注解进行事务控制
import org.springframework.transaction.annotation.Transactional;

public class TxExample {
@Transactional(propagation = Propagation.REQUIRES)
public void exampleMethod() {
...
}
}

样例工程

配置项说明

application.properties 配置项

属性名描述
dbvisitor.mapper-packages可选 要扫描加载的 Mapper 接口定义所在的包名,如果有多个包使用 , 号分割
dbvisitor.mapper-locations可选 要扫描加载的 Mapper 映射文件所在路径,默认值为 classpath*:/dbvisitor/mapper/**/*.xml,如果有多个可以通过一下任意一个字符进行分割 ,; \t\n
dbvisitor.mapper-disabled可选 使用 true/false 表示是否禁用 dbvisitor.mapper-packages 扫描到的 Mapper 接口。
默认值为 false 当与某些框架合用同一个 mapper 文件时如果遇到冲突可考虑设置为 true
dbvisitor.mapper-name-generator可选 用于自定义生成 mapper bean 名字的生成器类名。需要实现 BeanNameGenerator 接口,默认为:空。
dbvisitor.marker-annotation可选 设置一个扫描路径当扫描到的 Mapper 接口身上标有某个特定类型的注解时才会被认作 Mapper 接口类。默认为:net.hasor.dbvisitor.mapper.MapperDef
dbvisitor.marker-interface可选 设置一个扫描路径当扫描到的 Mapper 接口实现了某个特定接口时才会被认作 Mapper 接口类。默认为:net.hasor.dbvisitor.mapper.Mapper
dbvisitor.mapper-factory-bean可选 创建 Mapper 的工厂类,默认为 net.hasor.dbvisitor.spring.support.MapperBean
dbvisitor.ref-session可选 用于自定义 Mapper Bean 所使用的 Session Bean 的名字。
dbvisitor.mapper-lazy-init可选 Mapper Bean 的 lazyInit 属性,默认为 false
dbvisitor.mapper-scope可选 Mapper Bean 所处的 Spring 作用域,默认值为 AbstractBeanDefinition.SCOPE_DEFAULT 确定。
如果设置建议为 singleton。
dbvisitor.auto-mapping可选 是否将类型下的所有字段都自动和数据库中的列进行映射匹配,true 表示自动。false 表示必须通过 @Column 注解声明
dbvisitor.camel-case可选 表名和属性名,根据驼峰规则转换为带有下划线的表名和列名
dbvisitor.use-delimited可选 强制在生成 表名/列名/索引名 时候增加标识符限定,例如:通过设置该属性来解决列名为关键字的问题。默认是 false 不设置。
dbvisitor.case-insensitive可选 是否对表名列名敏感,默认 true 不敏感
dbvisitor.ignore-nonexist-statement可选 在 Mapper 接口方法映射到 XML 过程中是否忽略缺失的映射。默认是 false,遇到缺失会报错。
dbvisitor.dialect可选 默认使用的数据库方言

@MapperScan 注解属性详解

属性名描述
value、basePackages、basePackageClasses参考 dbvisitor.mapper-packages 配置
mapperLocations参考 dbvisitor.mapper-locations 配置
nameGenerator参考 dbvisitor.mapper-name-generator 配置
annotationClass参考 dbvisitor.marker-annotation 配置
markerInterface参考 dbvisitor.marker-interface 配置
sessionRef参考 dbvisitor.ref-session 配置
factoryBean参考 dbvisitor.mapper-factory-bean 配置
lazyInit参考 dbvisitor.mapper-lazy-init 配置
defaultScope参考 dbvisitor.mapper-scope 配置
mapperDisabled参考 dbvisitor.mapper-disabled 配置
tip

注解配置优先级高于配置文件(推荐 application.properties,配置更简单)

ConfigurationBean 属性详解

属性名描述
mapperResources参考 dbvisitor.mapper-locations 配置
mapperInterfaces参考 dbvisitor.marker-interface 配置,ConfigurationBean 会加载 Mapper 上声明的资源引用。
typeRegistry用于自定义 类型处理 注册器
javaTypeHandlerMap用于将自定义 TypeHandler 作为某 Java 类型的处理器
jdbcTypeHandlerMap用于将自定义 TypeHandler 作为某 JDBC 类型的处理器
ruleRegistry用于自定义 规则 注册器
ruleHandlerMap用于注册自定义规则
autoMapping参考 dbvisitor.auto-mapping 配置
camelCase参考 dbvisitor.camel-case
caseInsensitive参考 dbvisitor.case-insensitive
useDelimited参考 dbvisitor.use-delimited
dialectName参考 dbvisitor.dialect
ignoreNonExistStatement参考 dbvisitor.ignore-nonexist-statement

SessionBean 属性详解

属性名描述
configurationSessionBean 创建的 Session 所使用的 Configuration
dataSource所使用的 DataSource
dsAdapterAbstractDsAdapter 类型对象,该类决定了如何从 dataSource 中获取 Connection
dsAdapterClassdsAdapter 类型名,Class 类型。于 dsAdapterName 属性等价
dsAdapterNamedsAdapter 类型名,String 类型。于 dsAdapterClass 属性等价

MapperBean 属性详解

属性名描述
sessionMapperBean 创建 Mapper 对象所使用的 Session
mapperInterfaceMapperBean 创建的具体 Mapper

MapperScannerConfigurer 属性详解

属性名描述
basePackage参考 dbvisitor.mapper-packages 配置
nameGeneratorName参考 dbvisitor.mapper-name-generator 配置,类型名
nameGenerator参考 dbvisitor.mapper-name-generator 配置,对象化
annotationClassName参考 dbvisitor.marker-annotation 配置,类型名
annotationClass参考 dbvisitor.marker-annotation 配置,类型
markerInterfaceName参考 dbvisitor.marker-interface 配置,类型名
markerInterface参考 dbvisitor.marker-interface 配置,类型
session参考 dbvisitor.ref-session 配置,对象
sessionRef参考 dbvisitor.ref-session 配置,引用的 Bean 名
mapperFactoryBeanClassName参考 dbvisitor.mapper-factory-bean 配置,类型名
mapperFactoryBeanClass参考 dbvisitor.mapper-factory-bean 配置,类型
mapperDisabled参考 dbvisitor.mapper-disabled 配置
lazyInit参考 dbvisitor.mapper-lazy-init 配置
defaultScope参考 dbvisitor.mapper-scope 配置
dependsOnMapper 在创建时依赖的前置 Bean