oracle+mybatis-plus+springboot项目整合

该文详细介绍了如何在SpringBoot项目中整合Oracle数据库和MyBatis-Plus,包括引入依赖、配置数据源、分页插件的设置,以及创建Entity、Mapper、Service和Impl的基本步骤。示例中展示了分页查询、插入和更新操作的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

oracle+mybatis-plus+springboot项目整合

1、导包

简单项目结构:
在这里插入图片描述

    <dependencies>
        <!--用的是2.3.12.RELEASE版本-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.2</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.oracle.database.nls/orai18n -->
        <!--oracle 必备 , 用于处理oracle中文乱码 , 可以删除试试代码运行情况,-->
        <dependency>
            <groupId>com.oracle.database.nls</groupId>
            <artifactId>orai18n</artifactId>
            <version>19.7.0.0</version>
        </dependency>


<!--        <dependency>-->
<!--            <groupId>com.baomidou</groupId>-->
<!--            <artifactId>mybatis-plus-generator</artifactId>-->
<!--            <version>${mybatis-plus-generator.version}</version>-->
<!--            <scope>test</scope>-->
<!--        </dependency>-->

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>com.oracle.database.jdbc</groupId>
            <artifactId>ojdbc8</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

2、配置

spring.datasource.driver-class-name= oracle.jdbc.driver.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@127.0.0.1:1521:服务名
spring.datasource.username=username
spring.datasource.password=password

mybatis-plus.mapper-locations=classpath*:/mapper/**/*Mapper.xml
logging.level.com.ycz.mapper=debug
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.slf4j.Slf4jImpl

3、mybatis-plus的分页配置

package com.ycz.config;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author alex
 * @date 2023/01/13 1:44
 * @Version 1.0
 */
@Configuration
@ConditionalOnClass(value = {PaginationInterceptor.class})
public class MybatisPlusConfig {

    // 最新版
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
//        数据库的配置DbType.ORACLE 根据自己的数据库选择
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.ORACLE));
        return interceptor;
    }

}

4、写entity,mapper,service,impl

package com.ycz.entity;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.util.Date;

@Data
@TableName("PRODUCT")
public class Product {

    @TableField(value = "ID")
    @TableId(type = IdType.ASSIGN_ID)
    private String id;

    @TableField(value = "NAME")
    private String name;

    @TableField(value = "PRICE")
    private BigDecimal price;

    @TableField(value = "CREATE_TIME")
    private Date createTime;
}

package com.ycz.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ycz.entity.Product;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface ProductMapper extends BaseMapper<Product> {



}

package com.ycz.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.ycz.entity.Product;
import com.ycz.params.ProductParams;

public interface ProductService {

    IPage<Product> page(ProductParams params);


}

package com.ycz.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ycz.entity.Product;
import com.ycz.mapper.ProductMapper;
import com.ycz.params.ProductParams;
import com.ycz.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class ProductServiceImpl implements ProductService {

    @Autowired
    private ProductMapper mapper;
    @Override
    public IPage<Product> page(ProductParams params) {
        QueryWrapper<Product> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq(params.getId()!=null , "ID" , params.getId());
        queryWrapper.eq(params.getName()!=null , "NAME" , params.getName());
        return mapper.selectPage(new Page<>(params.getCurrent(),params.getSize()), queryWrapper);
    }
}

5、测试

分页

    @Test
    void page(){
        ProductParams params = new ProductParams();
        params.setCurrent(1);
        params.setSize(2);
        service.page(params).getRecords().forEach(System.out::println);
    }

结果:
在这里插入图片描述

日志是这样的:

2023-01-14 20:57:32.793 DEBUG 13800 --- [           main] c.y.m.ProductMapper.selectPage_mpCount   : ==>  Preparing: SELECT COUNT(*) FROM PRODUCT
2023-01-14 20:57:32.964 DEBUG 13800 --- [           main] c.y.m.ProductMapper.selectPage_mpCount   : ==> Parameters: 
2023-01-14 20:57:33.105 DEBUG 13800 --- [           main] c.y.m.ProductMapper.selectPage_mpCount   : <==      Total: 1
2023-01-14 20:57:33.124 DEBUG 13800 --- [           main] com.ycz.mapper.ProductMapper.selectPage  : ==>  Preparing: SELECT * FROM ( SELECT TMP.*, ROWNUM ROW_ID FROM ( SELECT id,NAME,PRICE,CREATE_TIME FROM PRODUCT ) TMP WHERE ROWNUM <=?) WHERE ROW_ID > ?
2023-01-14 20:57:33.128 DEBUG 13800 --- [           main] com.ycz.mapper.ProductMapper.selectPage  : ==> Parameters: 2(Long), 0(Long)
2023-01-14 20:57:33.154 DEBUG 13800 --- [           main] com.ycz.mapper.ProductMapper.selectPage  : <==      Total: 2

插入

    @Test
    void insert(){
        Product product = new Product();
        product.setPrice(new BigDecimal("50.0"));
        product.setName("可口可乐");
        product.setCreateTime(new Date());
        mapper.insert(product);
    }

在这里插入图片描述

更新

    @Test
    void update(){
        Product product = new Product();
        product.setId("1614246758689378305");
        product.setPrice(new BigDecimal("50.0"));
        product.setName("百事可乐");
        mapper.updateById(product);
    }

在这里插入图片描述

### SpringBoot + MyBatis-Plus + Vue 技术架构图与整合方案 #### 1. 架构概述 SpringBoot + MyBatis-Plus + Vue 是一种典型的前后端分离技术栈组合。该架构通过后端的 SpringBoot 提供 RESTful API 接口,利用 MyBatis-Plus 实现高效的数据库操作;前端采用 Vue.js 进行页面渲染和交互逻辑处理[^3]。 以下是整体的技术架构层次划分: - **前端层**: 使用 Vue.js 和 ElementUI 完成界面展示和用户交互。 - **服务层**: SpringBoot 提供业务逻辑处理和服务接口封装。 - **持久层**: MyBatis-Plus 对接数据库,完成 CRUD 操作及相关扩展功能。 --- #### 2. 技术架构图描述 下图为 SpringBoot + MyBatis-Plus + Vue 的典型技术架构设计: ``` +-------------------+ | 浏览器 | | | (HTTP/REST请求) +--------+----------++--------v----------+ | Vue.js | (前端) | | (负责视图渲染、事件绑定等) +--------+----------++--------v----------+ | Gateway/API网关 | (可选模块,用于统一管理API路由) +--------+----------++--------v----------+ | SpringBoot | (后端) | Service | (核心业务逻辑) | Controller | (暴露Rest接口给前端调用) +--------+----------++--------v----------+ | MyBatis-Plus | (持久层框架) | 数据库访问组件 | (提供高效的数据增删改查能力) +--------+----------++--------v----------+ | MySQL/Oracle | (存储数据的实际数据库) +-------------------+ ``` --- #### 3. 各部分职责说明 ##### 前端(Vue.js 层) - Vue.js 结合 ElementUI 或其他 UI 库构建动态网页应用。 - 利用 Axios 发起 HTTP 请求到后端获取或提交数据。 - 处理用户的输入并实时反馈结果。 ##### 中间层(SpringBoot 层) - SpringBoot 配置 RestController 来接收来自前端的请求,并返回 JSON 格式的响应数据[^4]。 - 将复杂的业务逻辑抽象为独立的服务类(Service),便于维护和测试。 - 可引入 AOP(面向切面编程)、事务控制等功能提升系统的健壮性和可靠性。 ##### 数据层(MyBatis-Plus 层) - MyBatis-Plus 自动化生成基础 Mapper 文件及对应的 SQL 方法。 - 支持自动填充字段(如 `create_time` 和 `update_time`)[^2]。 - 提高性能优化插件,帮助开发者快速定位慢查询问题。 --- #### 4. 关键集成点解析 ##### (1) Vue.js 与 SpringBoot 数据通信 - Vue.js 使用 Axios 插件发起 GET、POST 等类型的网络请求至 SpringBoot 控制器中的方法。 - 示例代码如下: ```javascript // Vue.js 调用后端接口示例 axios.get('/api/user/list') .then(response => { console.log('成功:', response.data); }) .catch(error => { console.error('失败:', error); }); ``` ##### (2) SpringBoot 配置 MyBatis-Plus -SpringBoot 项目的 `application.yml` 文件中配置数据库连接参数以及 MP 的全局设置。 - 示例配置片段: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl global-config: db-config: id-type: auto logic-delete-value: 1 logic-not-delete-value: 0 ``` ##### (3) Thymeleaf 替代方案 虽然引用提到 Thymeleaf 的相关内容,但在本架构中推荐完全基于 Vue.js 开发前端,因此无需再额外依赖模板引擎。 --- #### 5. 注意事项 - 版本兼容性:确保使用的 MyBatis-Plus 版本与 SpringBoot 版本匹配良好,避免因版本差异引发的功能缺失或异常行为。 - 时间戳自动更新:如果发现 `update_time` 字段未正常触发,请检查是否正确实现了 MetaObjectHandler 并注册到了 Spring 容器中。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值