spring如何使一个项目完美兼容多种数据库?

我们都知道有tk.mappermybayis-plus这两个插件,当然还有别的,就是可以自适应数据库来改变xml语法来和数据库打交道。但是这些插件处理不了一些数据库中独有的语法与复杂的sql,这样就会有问题,搞程序的我们都知道一个道理,不能完美解决那就是没解决。

如何解决?

1.我们都知道springboot有两个yml文件是可以放在jar包外边的,jar启动时会优先扫描同级目录有没有这两个yml文件,如果有就以外面的为准。

2.我们就通过这两个文件来解决,首先在application.yml中定义一个变量如databasetype:oracle也就是数据库类型,当然如果要用oracle这里的mysql就改为oracle,这里的databasetype与代码中绑定,不可更改,如果要换就改代码(代码中判断时获取了这个函数)。

 3.然后我们在application-druid中配置数据库的基本连接信息,主要是数据库名字、用户名和密码,这里如果是oracle就配置oracle的。

 4.在业务执行的server层判断,首先我们要定义一个变量,并拿到yml中写好的值。当然其他地方判断也可以,只要能给参数附一个数据库类型的标识值就可以。拿到值以后传到接口参数中,我这里是以实体类作为参数,所以我在实体类定义了一个值,用于接收判断这个值。如果是别的类型例如String、object、int这种作为参数那更简单,直接给参数赋值就可以。我这里以修改用户信息这个接口作为例子。

5.在xml中判断,如果类型是不同的数据库那么sql的写法就不同,我这里只是简单的改变了一下值。举几个例子,现在很流行的全球唯一标识:mysql里面叫uuid,oracle里面叫guid,两个id生成的方法都不一样mysql是通过select uuid()生成,而oracle是通过sys_guid()生成,都是数据库独有的特性,所以我们要想解决这种一个项目适用于不同的数据库时就需要这样的判断,例如我们把这个用户的名字改为这个唯一标识的id。

我们判断如果是mysql那么右边 user_name = select uuid()

我们判断如果是oracle那么右边 user_name = sys_guid()

不要小看这小小的差别,这只是我举例子中的一个而已,还有像oracle的nvl、当前日期的生成、以及日期的查询以及各种数据库中对关键字的处理 有的是用`有的用‘’有的用“”,区别还是挺大的,还有for循环的写法等等很多。

至此即可解决我们的问题啦,只要xml中代码写好了,要更换数据库只需要改外边的两个yml文件就可以了。改个连接配置,改个数据库类型标识。是不是很简单啊!

 小伙伴们不要觉得这样做麻烦,比让你重新复制一份项目让你去直接改成不同数据库,可是要简单的多。而且后期有问题还要维护多个版本。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
连接数据库通常需要使用JDBC驱动程序和数据库连接字符串。Spring Boot可以通过配置文件来管理数据库连接,以下是使用Spring Boot连接MySQL数据库的简单示例: 1. 添加MySQL JDBC依赖 在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> ``` 2. 配置数据库连接信息 在application.properties文件中添加以下配置: ```properties spring.datasource.url=jdbc:mysql://localhost:3306/mydb spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.jdbc.Driver ``` 其中,url表示数据库连接字符串,username和password表示连接数据库的用户名和密码,driver-class-name表示JDBC驱动程序的类名。 3. 创建数据源对象 在Java代码中,可以通过DataSource接口来连接数据库。可以使用Spring Boot自带的DataSourceBuilder来创建数据源对象: ```java @Configuration public class DataSourceConfig { @Bean @ConfigurationProperties(prefix = "spring.datasource") public DataSource dataSource() { return DataSourceBuilder.create().build(); } } ``` 4. 使用JdbcTemplate操作数据库 JdbcTemplate是Spring提供的用于操作数据库的工具类。可以在Java代码中使用JdbcTemplate来执行SQL语句。 ```java @Service public class UserServiceImpl implements UserService { @Autowired private JdbcTemplate jdbcTemplate; @Override public void addUser(User user) { String sql = "insert into user(name, age) values(?, ?)"; jdbcTemplate.update(sql, user.getName(), user.getAge()); } @Override public User getUserById(int id) { String sql = "select * from user where id = ?"; return jdbcTemplate.queryForObject(sql, new Object[]{id}, new BeanPropertyRowMapper<>(User.class)); } } ``` 以上就是使用Spring Boot连接MySQL数据库的简单示例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值