Spring Boot对接Oracle数据库

news/2024/6/18 4:00:14 标签: 数据库, spring boot, oracle

Spring Boot对接Oracle数据库

最近学习了Oracle数据库,那么如何使用Spring Boot和MyBatis Plus对接Oracle数据库呢?
这就有了这篇随记,具体流程如下

1、创建Maven工程

创建一个空的Maven工程,导入如下依赖:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.7.RELEASE</version>
        <relativePath/>
    </parent>
    <groupId>org.example</groupId>
    <artifactId>oracle-init</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>2.3.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <version>2.3.7.RELEASE</version>
        </dependency>
        <!--    Oracel11g与ojdbc5/ojdbc6版本匹配    -->
        <dependency>
            <groupId>com.oracle.database.jdbc</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.2.0.4</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.10</version>
            <scope>provided</scope>
        </dependency>

<!--        <dependency>-->
<!--            <groupId>com.oracle.database.jdbc</groupId>-->
<!--            <artifactId>ojdbc8</artifactId>-->
<!--            <version>19.8.0.0</version>-->
<!--        </dependency>-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.3.2</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>RELEASE</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
</project>

tips:这里碰到一个坑,我本机适用的Oracle数据库版本是11g XE,所以要使用的驱动为ojdbc5/ojdbc6,不然连接老会失败。

2、application.yml

在配置文件中填写数据库连接的参数

spring:
  datasource:
      username: pp
      password: 123456
      url: jdbc:oracle:thin:@localhost:1521:XE
      driver-class-name: oracle.jdbc.OracleDriver

参数说明:

3、创建实例数据表

为了演示本次对接Oracle数据库,我们需要一张测试数据表

3.1创建Users数据表,SQL如下:

CREATE TABLE users (
  id INT PRIMARY KEY,
  username VARCHAR(50) NOT NULL,
  password VARCHAR(50) NOT NULL,
  email VARCHAR(100) NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

什么?没有测试数据!!!Orz…
这里可以使用Oracle数据库的PL/SQL编程来批量生成测试数据,真香!!

3.2PL/SQL批量生产测试数据

sql如下:

DECLARE
  TYPE user_type IS RECORD (
    id NUMBER,
    username VARCHAR2(50),
    email VARCHAR2(100),
    password VARCHAR2(100),
    created_at DATE
  );

  TYPE user_list IS TABLE OF user_type;

  l_users user_list := user_list();
BEGIN
  FOR i IN 1..100 LOOP
    l_users.extend;
    l_users(i).id := i;
    l_users(i).username := 'user' || i;
    l_users(i).email := 'user' || i || '@example.com';
    l_users(i).password := 'password' || i;
    l_users(i).created_at := SYSDATE; -- 使用当前时间作为创建时间
  END LOOP;

  FORALL i IN 1..l_users.COUNT
    INSERT INTO users (id, username, email, password, created_at)
    VALUES (l_users(i).id, l_users(i).username, l_users(i).email, l_users(i).password, l_users(i).created_at);

  COMMIT;
  DBMS_OUTPUT.PUT_LINE('Data inserted successfully.');
EXCEPTION
  WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE('Error: ' || SQLERRM);
    ROLLBACK;
END;

执行之后查看数据表中的数据:
pPn8w01png
OK!准备工作完成,接下来就可以进行对接了。

4、使用MP对Oracle进行CRUD

4.1创建实体类

User:

/**
 * TODO User实体类
 * @version 1.0
 * @author ss_419
 * @date 2023/8/11 14:49
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
// 指定Oracle数据库中的表名
@TableName("users")
public class User {
    private Long id;
    private String username;
    private String password;
    private String email;
    private Date created_at;
}

4.2、创建Mapper

/**
 * @author ss_419
 */
@Mapper
public interface UserRepository extends BaseMapper<User> {
    // 这里可以自定义一些数据库操作方法
}

4.3、创建Service

/**
 * @author ss_419
 */
@Service
public class UserService
        extends ServiceImpl<UserRepository, User> {
    // 这里可以编写一些业务逻辑方法
    private final UserRepository userRepository;

    @Autowired
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
    public List<User> getAllUsers() {
        List<User> users = userRepository.selectList(null);
        return users;
    }

    public User getUserById(Long id) {
        return userRepository.selectById(id);
    }

    public void saveUser(User user) {
        userRepository.insert(user);
    }

    public void updateUser(User user) {
        userRepository.updateById(user);
    }

    public void deleteUser(Long id) {
        userRepository.deleteById(id);
    }
}

4.4、创建启动器

@SpringBootApplication
// Mapper包扫描
@MapperScan("org.example.mapper")
public class OracleDBApplication {
    public static void main(String[] args) {
        SpringApplication.run(OracleDBApplication.class,args);
    }
}

5、测试

万事俱备,只欠东风,对CRUD进行测试。

@SpringBootTest
public class OraCTest {
    @Autowired
    private UserService service;

    /**
     * 获取所有用户信息
     */
    @Test
    public void testGetAllUsers() {
        List<User> users = service.getAllUsers();
        users.forEach(System.out::println);
    }

    /**
     * 根据id获取用户
     */
    @Test
    public void testGetUserById() {
        User userById = service.getUserById(1L);
        System.out.println("userById = " + userById);
    }

    /**
     * 保存用户
     */
    @Test
    public void testSaveUser() {
        User user = new User();
        user.setId(1000L);
        user.setUsername("测试新增User");
        user.setPassword("00101010");
        user.setEmail("test@example.com");
        user.setCreated_at(new Date());
        service.saveUser(user);
    }

    /**
     * 更新用户
     */
    @Test
    public void testUpdateUser() {
        // 先查询
        User user = service.getUserById(1000L);
        System.out.println("userById = " + user);
        // 后更新
        user.setUsername("update_username");
        service.updateUser(user);
    }

    /**
     * 根据id删除用户
     */
    @Test
    public void testDeleteUser() {
        service.deleteUser(1000L);
    }
}

http://www.niftyadmin.cn/n/4932782.html

相关文章

学习笔记|printf函数的实现|不同操作系统中的换行|数的进制:2进制、10进制、16进制转换|STC32G单片机视频开发教程(冲哥)|第五集:C语言基础

文章目录 1.C语言 printf函数的实现Tips&#xff1a;ASCII码表Tips&#xff1a;找不到头文件怎么办&#xff1f;主函数添加程序:常规用法:Tips&#xff1a;不同操作系统中的换行 ⒉数的进制:2进制、10进制、16进制.常见的对应&#xff1a;应用&#xff1a;整体端口的操作 3.C语…

css内容达到最底部但滚动条没有滚动到底部

也是犯了一个傻狗一样的错误 &#xff0c;滚动条样式是直接复制的蓝湖的代码&#xff0c;有个高度&#xff0c;然后就出现了这样的bug 看了好久一直以为是布局或者overflow的问题&#xff0c;最后发现是因为我给这个滚动条加了个高度&#xff0c;我也是傻狗一样的&#xff0c;…

资源限制类题目解法,看这一篇就够了!

算法拾遗三十七资源限制类题目 资源限制技巧汇总32位无符号整数的范围是0~4,294,967,295&#xff0c;现在有一个正好包含40亿个无符号整数的文件&#xff0c;可以使用最多1GB的内存&#xff0c;怎么找到出现次数最多的数32位无符号整数的范围是0~4294967295&#xff0c;现在又一…

【Unity小技巧】如何使飞行的子弹不会因速度过快造成穿透?

【Unity小技巧】如何使飞行的子弹不会因速度过快造成穿透&#xff1f; 解&#xff1a;我们只需要在子弹飞行的途中储存前后帧的位置&#xff0c;然后计算他们之间的距离&#xff0c;最后通过射线检测是否碰撞到物体即可&#xff0c;接下来让我们整理下代码&#xff08;实际可不…

TX2 NX 修改设备树--GPIO

确认模组内使用的是哪个设备树文件 模组上电输入如下指令,查看返回值:cat /proc/device-tree/nvidia,dtsfilename找到相应的设备树文件设备树存放路径 /public_sources/Linux_for_Tegra/source/public/kernel_src/hardware/nvidia/platform/t18x/lanai/kernel-dts 确认设备树…

docker: ERROR: Couldn‘t connect to Docker daemon at http+docker://localhost

环境&#xff1a; linuxt centos 7.x 如下图&#xff0c; 使用docker-compose时&#xff0c;提示错误 [explorebridge tinyproxy]$ docker-compose up ERROR: Couldnt connect to Docker daemon at httpdocker://localhost - is it running?If its at a non-standard locati…

centos7 安装桌面

先装 xrdp $ sudo yum install -y epel-release $ sudo yum install -y xrdp $ sudo systemctl enable xrdp $ sudo systemctl start xrdp开防火墙端口 $ sudo firewall-cmd --add-port3389/tcp --permanent $ sudo firewall-cmd --reload比较喜欢 GNOME $ sudo yum groupin…

最强自动化测试框架Playwright(8)-浏览器

每个版本的 Playwright 都需要特定版本的浏览器二进制文件才能运行。需要使用 Playwright CLI 来安装这些浏览器。 对于每个版本&#xff0c;Playwright 都会更新其支持的浏览器版本&#xff0c;以便最新的 Playwright 随时支持最新的浏览器。这意味着每次更新 Playwright 时&…