/BookManagerByOracle

使用Oracle数据库的基于SpringBoot的图书管理系统。

Primary LanguageJavaScriptGNU General Public License v3.0GPL-3.0

图书管理系统Oracle版(Book Management System, Created by SpringBoot framework)

我的博客 演示地址 联系方式

项目介绍

该项目和huanfenz/BookManager: 基于springboot的图书管理系统 (github.com)基本一致。

但是数据库从MySQL调整成了Oracle,所以很多东西不赘述了。该文档主要分析一下Oracle版本与MySQL版本的改动。

环境介绍

名称 描述
Java版本 JDK 1.8.0
IDE工具 IntelliJ IDEA 2021.2.1(Ultimate Edition)
构建工具 Maven 3.3.9
Web服务器 SpringBoot内嵌的Tomcat
数据库 Oracle11g

改动

  1. 因为Oracle中不能用user作为表名,所以我在所有表名前面加上了前缀t_

orc1

  1. 尤其要注意,无论表名还是字段名,都不区分大小写。如果是导入的,工具可能会强行区分,然后给每个字段名都加上了双引号,非常不方便。所以最好就全部大写,然后用下划线分割。
  2. 部分数据类型的长度标准不同(具体自行查阅),所以字符串类型的长度我都增加为2倍。
  3. Oracle没有Limit关键字,所以做分页就得另辟蹊径。我这里的做法是给每个结果集加上了一个rownum字段,该字段会自动加上序号,然后再用where筛选一下,如下。
select * from(
    select rownum rn, t_book_type.*
    from t_book_type
)
where rn - 1 between #{begin} and (#{begin} + #{size} - 1)
  1. Oracle没有主键自增的功能,需要用序列+触发器自己做一下,全部代码如下。
-- 图书信息bookid处理自增问题
create sequence seq_t_book_info
minvalue 1
maxvalue 99999999
start with 100
increment by 1
cache 50;

create or replace trigger "t_book_info_trig"
    before insert on t_book_info
    referencing old as old new as new for each row
declare
begin
    select seq_t_book_info.nextval into :new.bookid from dual;
end dept_trig;

-- 图书类型booktypeid处理自增问题
create sequence seq_t_book_type
minvalue 1
maxvalue 99999999
start with 100
increment by 1
cache 50;

create or replace trigger "t_book_type_trig"
    before insert on t_book_type
    referencing old as old new as new for each row
declare
begin
    select seq_t_book_type.nextval into :new.booktypeid from dual;
end dept_trig;

-- 借书记录borrowid处理自增问题
create sequence seq_t_borrow
minvalue 1
maxvalue 99999999
start with 100
increment by 1
cache 50;

create or replace trigger "t_borrow_trig"
    before insert on t_borrow
    referencing old as old new as new for each row
declare
begin
    select seq_t_borrow.nextval into :new.borrowid from dual;
end dept_trig;

-- 用户表userid处理自增问题
create sequence seq_t_user
minvalue 1
maxvalue 99999999
start with 100
increment by 1
cache 50;

create or replace trigger "t_user_trig"
    before insert on t_user
    referencing old as old new as new for each row
declare
begin
    select seq_t_user.nextval into :new.userid from dual;
end dept_trig;

差不多就改动这些了。

演示地址

Oracle版和MySQL版功能完全一致,所以演示中还是使用MySQL数据库。

项目演示地址:http://47.97.104.230:8092/BookManager/

管理员账号admin,密码admin

读者账号wangpeng,密码123456

注意:请试用时尽量不要影响到原有的记录。

联系方式

我的博客地址:个人博客。欢迎大家来踩。

我的联系方式,欢迎联系我:

  • 邮箱:huanfenz@qq.com