在SpringBoot中使用MyBatis连接四种主流数据库

前言:

  最近在做框架项目,为了适应不同使用者的需求,需要针对主流数据进行支持。现在主流的数据库主要有:MySQLOracleSQL serverPostgreSql,每种数据库有自己的特点,为了使用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的查询语句必须给表加上引号,测试结果:

大功告成!

posted @ 2021-11-26 18:25  松树住松鼠  阅读(2159)  评论(0编辑  收藏  举报