connect.zip
这是我自己写的,对该库增加的Oracle数据库支持,和SQLite数据库支持。
已测试版本:
SpringBoot:3.4.3
database-all:6.5.4
相关依赖如下:
<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
</dependency>
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc11</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.oracle.database.nls</groupId>
<artifactId>orai18n</artifactId>
<scope>provided</scope>
</dependency>
因为我是尝试用Java去写Laravel框架,必不可少的就是多数据库加载功能。这是SpringBoot配置类的部分演示代码如下:
@Slf4j
@Configuration
public class Database {
public static Map<String, Class<?>> supportBuilder = new HashMap<>();
public static Map<String, Class<?>> supportGeneralModel = new HashMap<>();
static {
supportBuilder.put("mysql", GaarasonDataSourceBuilder.class);
supportBuilder.put("sqlite", SqliteGaarasonDataSourceBuilder.class);
supportBuilder.put("oracle", OracleGaarasonDataSourceBuilder.class);
supportGeneralModel.put("mysql", GeneralModel.class);
supportGeneralModel.put("sqlite", SqliteGeneralModel.class);
supportGeneralModel.put("oracle", OracleGeneralModel.class);
}
//@Value("${jaravel.db.connection}")
public static String DB_CONNECTION;
//@Value("${spring.datasource.url}")
public String DB_URL;
//@Value("${spring.datasource.type}")
public String DB_TYPE;
//@Value("${spring.datasource.driver-class-name}")
public String DB_DRIVER;
//@Value("${spring.datasource.username}")
public String DB_USERNAME;
//@Value("${spring.datasource.password}")
public String DB_PASSWORD;
public Database(@Autowired Environment environment) {
DB_CONNECTION = environment.getProperty("jaravel.db.connection");
DB_URL = environment.getProperty("spring.datasource.url");
DB_TYPE = environment.getProperty("spring.datasource.type");
DB_DRIVER = environment.getProperty("spring.datasource.driver-class-name");
DB_USERNAME = environment.getProperty("spring.datasource.username");
DB_PASSWORD = environment.getProperty("spring.datasource.password");
}
@Bean
@Primary
public Model getGeneralModel() throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
Class<?> modelClass = supportGeneralModel.get(DB_CONNECTION);
if (modelClass != null) {
Model model = (Model) modelClass.getDeclaredConstructor().newInstance();
return model;
}
throw new RuntimeException("数据库类型不支持,通用模型无法创建");
}
@Bean
public DataSource dataSource() {
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.setUrl(DB_URL);
druidDataSource.setDbType(DB_TYPE);
druidDataSource.setDriverClassName(DB_DRIVER);
druidDataSource.setUsername(DB_USERNAME);
druidDataSource.setPassword(DB_PASSWORD);
return druidDataSource;
}
@Bean
public GaarasonDataSource gaarasonDataSource(DataSource dataSource, Container container) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
Class<?> builderClass = supportBuilder.get(DB_CONNECTION);
if (builderClass != null) {
GaarasonDataSource gaarasonDataSource = (GaarasonDataSource) builderClass.getDeclaredMethod("build", DataSource.class, Container.class).invoke(null, dataSource, container);
return gaarasonDataSource;
}
throw new RuntimeException("数据库类型不支持,数据源无法创建");
}
}
关键文件解释说明(以Sqlite为例,Oracle同理):
SqliteGaarasonDataSourceBuilder:仿造MySQL的builder,可以批量使用反射创建。
SqliteGeneralModel:仿造原来MySQL版本的GeneralModel,使得不需要创建表即可快速使用。由于原版的Model继承了final类MySQLBuilder,因此只能自己写一个新的。需要注意,GeneralModel生成的Bean方法需要加Primary注解,并且如果是SpringBoot获取的话,获取的应该是gaarason.database.eloquent.Model的实例(虽然可能还有其他的,但我写了这个),使用时会报警告“形参化类 'Model' 的原始使用”,不用管,能正常用。
有什么问题可以反馈一下,轻喷,我大部分都是直接基于MySQL改的,只有到错的时候才再看再写,所以肯定有很多奇怪的问题。
connect.zip
这是我自己写的,对该库增加的Oracle数据库支持,和SQLite数据库支持。
已测试版本:
SpringBoot:3.4.3
database-all:6.5.4
相关依赖如下:
因为我是尝试用Java去写Laravel框架,必不可少的就是多数据库加载功能。这是SpringBoot配置类的部分演示代码如下:
关键文件解释说明(以Sqlite为例,Oracle同理):
SqliteGaarasonDataSourceBuilder:仿造MySQL的builder,可以批量使用反射创建。
SqliteGeneralModel:仿造原来MySQL版本的GeneralModel,使得不需要创建表即可快速使用。由于原版的Model继承了final类MySQLBuilder,因此只能自己写一个新的。需要注意,GeneralModel生成的Bean方法需要加Primary注解,并且如果是SpringBoot获取的话,获取的应该是gaarason.database.eloquent.Model的实例(虽然可能还有其他的,但我写了这个),使用时会报警告“形参化类 'Model' 的原始使用”,不用管,能正常用。
有什么问题可以反馈一下,轻喷,我大部分都是直接基于MySQL改的,只有到错的时候才再看再写,所以肯定有很多奇怪的问题。