与 Google Guice 集成
通过 dbvisitor-guice
工具包可以更加便捷的在 Guice 上使用 dbVisitor ORM 工具。
什么是 Guice
Guice 是 Google 开源的一个轻量化依赖注入工具,Spring 包含依赖注入能力之外含有很多其它能里。若只想在项目中使用依赖注入那么可以考虑使用 Guice。
- Guice 项目地址:https://github.com/google/guice
dbvisitor-guice 特性
- 自动给配置数据源
- 提供注解化事务控制
- 自动注入 Mapper 接口
- 支持多数据源
配置方法
首先引入如下依赖包:
<dependency>
<groupId>net.hasor</groupId>
<artifactId>dbvisitor-guice</artifactId>
<version>5.3.0</version>
</dependency>
使用 dbVisitor 可以不依赖数据库连接池,但有数据库连接池是大多数项目的标配。这里选用 Alibaba 的 Druid
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.23</version>
</dependency>
配置文件,如下使用了 Druid 后的配置文件
# 数据源使用 Druid
dbvisitor.jdbc-ds=com.alibaba.druid.pool.DruidDataSource
dbvisitor.jdbc-ds.url=jdbc:mysql://127.0.0.1:3306/devtester
dbvisitor.jdbc-ds.driverClassName=com.mysql.cj.jdbc.Driver
dbvisitor.jdbc-ds.username=root
dbvisitor.jdbc-ds.password=123456
dbvisitor.jdbc-ds.maxActive=5
dbvisitor.jdbc-ds.maxWait=3000
dbvisitor.jdbc-ds.initialSize=1
dbvisitor.jdbc-ds.testWhileIdle=true
dbvisitor.jdbc-ds.testOnBorrow=true
dbvisitor.jdbc-ds.failFast=true
dbvisitor.mapper-packages=net.hasor.dbvisitor.test.dao
dbvisitor.mapper-locations=classpath:dbvisitor/mapper/*.xml
一个 Service 类
public class ServiceTest {
@Inject
private TestService userService;
...
}
// 加载配置文件
Properties properties = new Properties();
properties.load(ResourcesUtils.getResourceAsStream("druid-guice.properties"));
// 初始化 Guice 并加载 DbVisitorModule 插件
Injector injector = Guice.createInjector(new DbVisitorModule(properties));
// 尽情享受
ServiceTest service = injector.getInstance(ServiceTest.class);
...
这里提供地址可以获取 Demo 工程
数据源配置
属性名 | 描述 |
---|---|
dbvisitor.jdbc-ds | 可选,具体的数据源 DataSource 类型,例如 com.alibaba.druid.pool.DruidDataSource ,如果不指定则会使用工具内置的 DefaultDataSource 类 (它不支持连接池) |
dbvisitor.jdbc-ds.xxx | 可选,通过 xxx 配置数据源的属性 |
dbvisitor.multiple-datasource | 可选,多数据源情况下,的数据源标识符 |
工具内置了一个用于测试的,简单 DataSource
实现。它不支持连接池,这意味着每次都会创建一个新的链接。配置方式如下:
dbvisitor.jdbc-ds.url=jdbc:mysql://127.0.0.1:3306/devtester
dbvisitor.jdbc-ds.driverClassName=com.mysql.cj.jdbc.Driver
dbvisitor.jdbc-ds.username=root
dbvisitor.jdbc-ds.password=123456
配置了三个数据源(one/two/three)分别链接到三个不同数据库,每个数据源都使用了内置的简单 DataSource 实现
# one,two,three 三个数据源
dbvisitor.multiple-datasource=one,two,three
# -- one
dbvisitor.one.jdbc-ds.url=jdbc:mysql://127.0.0.1:3306/db1
dbvisitor.one.jdbc-ds.driverClassName=com.mysql.cj.jdbc.Driver
dbvisitor.one.jdbc-ds.username=root
dbvisitor.one.jdbc-ds.password=123456
# -- two
dbvisitor.two.jdbc-ds.url=jdbc:mysql://127.0.0.1:3306/db2
dbvisitor.two.jdbc-ds.driverClassName=com.mysql.cj.jdbc.Driver
dbvisitor.two.jdbc-ds.username=root
dbvisitor.two.jdbc-ds.password=123456
# -- three
dbvisitor.three.jdbc-ds.url=jdbc:mysql://127.0.0.1:3306/db3
dbvisitor.three.jdbc-ds.driverClassName=com.mysql.cj.jdbc.Driver
dbvisitor.three.jdbc-ds.username=root
dbvisitor.three.jdbc-ds.password=123456
dbVisitor 配置项说明
属性名 | 描述 |
---|---|
dbvisitor.mapper-locations | 可选,要扫描加载的 Mapper 映射文件所在路径,默认值为 dbvisitor/mapper/*.xml |
dbvisitor.mapper-packages | 可选,要扫描加载的 Mapper 接口定义所在的包名,如果有多个包使用 , 号分割 |
dbvisitor.named-type-registry | 可选,如需自定义 TypeHandlerRegistry 则在这里指定 |
dbvisitor.named-rule-Registry | 可选,如需自定义 RuleRegistry 则在这里指定 |
dbvisitor.mapper-disabled | 可选,使用 true/false 表示是否禁用 dbvisitor.mapper-packages 扫描到的 Mapper 接口。默认值为 false 当与某些框架合用同一个 mapper 文件时如果遇到冲突可考虑设置为 true |
dbvisitor.marker-annotation | 可选,当 dbvisitor.mapper-packages 扫描到的 Mapper 接口身上标有 某个特定类型的注解时才会被认作 Mapper 接口类。默认为:net.hasor.dbvisitor.dal.repository.DalMapper |
dbvisitor.marker-interface | 可选,当 dbvisitor.mapper-packages 扫描到的 Mapper 接口实现了某个特定接口时才会被认作 Mapper 接口类。默认为:net.hasor.dbvisitor.dal.mapper.Mapper |
dbvisitor.mapper-scope | 可选,Mapper Bean 所处的 Guice 作用域,默认作用域是 javax.inject.Singleton |
dbvisitor.auto-mapping | 可选,是否将类型下的所有字段都自动和数据库中的列进行映射匹配,true 表示自动。false 表示必须通过 @Column 注解声明 |
dbvisitor.camel-case | 可选,表名和属性名,根据驼峰规则转换为带有下划线的表名和列名 |
dbvisitor.case-insensitive | 可选,强制在生成 表名/列名/索引名 时候增加标识符限定,例如:通过设置该属性来解决列名为关键字的问题。默认是 false 不设置。 |
dbvisitor.use-delimited | 可选,是否对表名列名敏感,默认 true 不敏感 |
dbvisitor.dialect | 可选,默认使用的数据库方言 |
补充说明
- 对于
@DalMapper
注解只可以用于注释另一个注释,因此可以使用@RefMapper
或@SimpleMapper
来代替。细节请参阅 注解化 Mapper dbvisitor.marker-annotation
、dbvisitor.marker-interface
两个属性配置满足其一即可- 一个 Mapper 接口可以继承下面两个接口其一
- net.hasor.dbvisitor.dal.mapper.Mapper (标记性接口)
- net.hasor.dbvisitor.dal.mapper.BaseMapper (有通用方法)