在SpringBoot中使用MyBatis连接四种主流数据库
前言:
最近在做框架项目,为了适应不同使用者的需求,需要针对主流数据进行支持。现在主流的数据库主要有:MySQL、Oracle、SQL server、PostgreSql,每种数据库有自己的特点,为了使用MyBatis连接并操作上述四种数据库,查阅了很多资料。在学习过程中发现资料分散,所以笔者在此做个总集,一次性将四种数据库的连接方法做个教程,话不多说,开干:
零、公共配置:
首先MyBatis的基础配置:entity、mapper、service以及测试用的controller,由于这一部分基本是通用的,所以先提出来讲:
1.创建项目:
无论使用哪种数据库,MyBatis框架和JDBC是必选的,然后再根据具体使用哪种数据库选择对应的驱动。
2.搭建基本结构:
接下来就是MyBatis常规套路,实体、映射、服务接口与实现以及测试API接口,放张项目基本机构图:
User实体:
import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor public class User { private int id; private String name; private int age; private boolean sex; }
IUserMapper:
import com.sql.learn.entity.User; import org.apache.ibatis.annotations.Mapper; import java.util.List; @Mapper public interface IUserMapper { List<User> getAll(); }
UserMapper.xml:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.sql.learn.mapper.IUserMapper"> <select id="getAll" resultType="User"> select * from userTable </select>
<!--select * from "userTable" (oracle表名命名规范,如果是小写这里需要将表名加引号,不然会自动转为大写)-->
<!--select * from "userTable" (postgresql没有办法,必须加引号查询)-->
</mapper>
IUserService:
import com.sql.learn.entity.User; import java.util.List; public interface IUserService { List<User> getAll(); }
UserServiceImpl:
import com.sql.learn.entity.User; import com.sql.learn.mapper.IUserMapper; import com.sql.learn.service.IUserService; import org.springframework.stereotype.Service; import java.util.List; @Service("userService") public class UserServiceImpl implements IUserService { private final IUserMapper userMapper; public UserServiceImpl(IUserMapper userMapper) { this.userMapper = userMapper; } @Override public List<User> getAll() { return userMapper.getAll(); } }
TestController:
import com.sql.learn.entity.User; import com.sql.learn.service.IUserService; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController public class TestController { final IUserService userService; public TestController(IUserService userService) { this.userService = userService; } @RequestMapping("/test/getall") public List<User> GetAll() { List<User> ret = userService.getAll(); return ret; } }
这里为了方便演示,我使用了多配置文件的写法,在主配置文件里面指定具体使用的数据库配置就行了,application.yml:
spring: profiles: active: xxx mybatis: mapper-locations: classpath:mapper/*.xml type-aliases-package: com.sql.learn.entity
好,公共部分就搭建完成了,现在就是具体每种数据库的操作了,有问题的可参见大神文章 --- SpringBoot整合mybatis快速入门。
一、MySQL:
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。--- 百度百科
MySQL无疑是最受欢迎的数据库了,所以这里先介绍:
一开始创建项目时可以进行勾选,如果错过了也不要紧,手动在pom文件里面添加依赖即可:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>版本自选</version> </dependency>
然后编写application-mysql.yml配置文件,根据自己的情况修改对应字段,url具体配置见文章 -- springboot数据库连接字符串(url)参数分析:
spring: datasource: #用户名: username: root #密码: password: xxx #连接字符串,需要修改的一般只有数据库名,我这里是test url: jdbc:mysql://127.0.0.1:3306/test?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai #连接MySQL6以上: driver-class-name: com.mysql.cj.jdbc.Driver #连接MySQL5: #driver-class-name: com.mysql.jdbc.Driver
然后再使用MySQLworkbench创建test数据库及userTable表,然后添加几条简单的数据:
将主配置文件中的active设置为mysql,然后就可以运行进行测试了,测试结果:
二、Oracle:
Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小微机环境。它是一种高效率的、可靠性好的、适应高吞吐量的数据库方案。--- 百度百科。
有了上面的经验,接下来就是大同小异了,不同数据库之间可能有些许差异,但大体操作是一致的:
同样也是新建项目时选择对应驱动,或者手动添加依赖,唯一需要注意的是如果提示字符集错误还要添加 orai18n 依赖:
<dependency> <groupId>com.oracle.database.jdbc</groupId> <artifactId>ojdbc8</artifactId> <version>版本自定</version> </dependency> <dependency> <groupId>cn.easyproject</groupId> <artifactId>orai18n</artifactId> <version>版本自定</version> <scope>provided</scope> </dependency>
然后编写application-oracle.yml文件,根据自己的情况修改对应字段:
spring:
datasource:
username: root
password: xxx
#url配置注意区别SID和服务名两种方式,这里用的是服务名方式
url: jdbc:oracle:thin:@//127.0.0.1:1521/ORCL
driver-class-name: oracle.jdbc.OracleDriver
然后再使用Navicat创建test数据库及USERTABLE表,然后添加几条简单的数据:
将主配置文件中的active设置为oracle,然后就可以运行进行测试了,测试结果:
三、SQL server:
美国Microsoft公司推出的一种关系型数据库系统。SQL Server是一个可扩展的、高性能的、为分布式客户机/服务器计算所设计的数据库管理系统,实现了与WindowsNT的有机结合,提供了基于事务的企业级信息管理系统方案。--- 百度百科。
同样也是新建项目时选择对应驱动,或者手动添加依赖:
<dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>mssql-jdbc</artifactId> <version>版本自选</version> </dependency>
然后编写application-sqlserver.yml文件,根据自己的情况修改对应字段:
spring:
datasource:
username: sa
password: xxx
url: jdbc:sqlserver://127.0.0.1:1433;databasename=Test
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
然后再使用ssms创建test数据库及userTable表,然后添加几条简单的数据:
将主配置文件中的active设置为sqlserver,然后就可以运行进行测试了,测试结果:
四、PostgreSql:
PostgreSQL是一种特性非常齐全的自由软件的对象-关系型数据库管理系统(ORDBMS),是以加州大学计算机系开发的POSTGRES,4.2版本为基础的对象关系型数据库管理系统。POSTGRES的许多领先概念只是在比较迟的时候才出现在商业网站数据库中。--- 百度百科。
同样也是新建项目时选择对应驱动,或者手动添加依赖:
<dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>版本自定</version> </dependency>
然后编写application-postgresql.yml文件,根据自己的情况修改对应字段:
spring:
datasource:
username: xxx
password: yyy
url: jdbc:postgresql://127.0.0.1:5432/test
driver-class-name: org.postgresql.Driver
将主配置文件中的active设置为postgresql,然后就可以运行进行测试了,注意postgresql的查询语句必须给表加上引号,测试结果: