大二在学习了Oracle后,在学期末进行了课程设计(基于Oracle数据库),完成了一个简单的超市管理系统。限于本人水平,只用作记录和学习,如有不足,还请批评指出。
功能框架如下:
操作系统:Windows10
开发工具:IDEA2021
项目搭建:
第一次搭建可能时间比较长。
下面进行相关依赖的导入
点击pom.xml文件进行依赖添加,在标签中添加如下几项,(如果已经有了就不用加了)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<scope>runtime</scope>
<version>21.1.0.0</version>
</dependency>
<dependency>
<groupId>com.oracle.database.nls</groupId>
<artifactId>orai18n</artifactId>
<version>21.1.0.0</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.3.2</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.6.2</version>
</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>
项目的配置设置
在下图位置创建application.yml文件进行配置,
spring:
datasource:
url: jdbc:oracle:thin:@127.0.0.1:1521:orcl
username: //自己数据库的用户名
password: //自己数据库密码
driver-class-name: oracle.jdbc.driver.OracleDriver
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mapper-locations: classpath:com/supermarket/mapper/xml/*.xml
server:
port: 8989//服务端口号
注意下方mapper-locations:写自己的相关路径
可以点击右上角DataBase,再点击加号,选择自己的数据库后进行连接,查看是否连接成功 ,进一步确定url的正确
配置结束开始实现
大家可以查阅了解一下springboot中各个层的定义和作用。这里以超市中的商品为例。
1.创建一个实体层(entity),在实体层内加入商品类。
package com.supermarket.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
@Data//将实体交由lombok帮助简化
@EqualsAndHashCode(callSuper = false)
public class Commodity implements Serializable {
private static final long serialVersionUID=1L;
@TableId(value = “CID”,type= IdType.ID_WORKER_STR)//标识主键
private int cid;
private String cname;
private double price;
private int inventory;
private String sdate;
private int bdate;
private int pid;
}
商品类的属性要与数据库形成一一对应
2.然后将其他层先创建好,控制层(controller),业务层(service),持久层(mapper),然后分别在如下层中加入商品的控制类等;
注意有一些是接口以及接口和类的位置
3.这里以实现输出商品列表业务为例子进行编写,层次之间从顶到底为controller层=>service层=>mapper层,可以以这个顺序写,也可以从mapper层向controller层写,看个人习惯。接下来以从顶到底写为例。
控制层(commodityController)
package com.supermarket.controller;
import com.supermarket.entity.Commodity;
import com.supermarket.service.CommodityService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController//标注此为控制层
@RequestMapping("/Commodity")//建立一级路径
public class CommodityController {
@Autowired
private CommodityService commodityService;
@GetMapping("/list")//商品列表
public List<Commodity> list(){
return this.commodityService.list();
}
}
除了GetMapping,还有其他类型,这与请求的方式有关,可先了解一下这些请求
这里是控制层通过业务层提供接口来实现商品列表,接下来我们编写业务层的接口
业务层接口(commodityService)
package com.supermarket.service;
import com.supermarket.entity.Commodity;
import java.util.List;
public interface CommodityService {
List list();
}
在这里我们只提供接口的方法,而接口中方法的实现则在业务层中的实现类
业务层实现类(commodityServiceImpl)
package com.supermarket.service.impl;
import com.supermarket.entity.Commodity;
import com.supermarket.mapper.CommodityMapper;
import com.supermarket.service.CommodityService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service//标明此为业务层
public class CommodityServiceImpl implements CommodityService {
//继承接口进行实现
@Autowired
private CommodityMapper commodityMapper;
@Override
public List<Commodity> list(){
return this.commodityMapper.list();
}
}
这里要想得到商品的列表,需要从数据库中获取,所以我们需要与数据库相关的持久层为我们提供接口来实现,也就是说如果有一个业务不需要数据库操作,能在这里直接实现那么就不需要持久层的接口
mapper层接口(commodityMapper)
package com.supermarket.mapper;
import com.supermarket.entity.Commodity;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository//标注此为持久层
public interface CommodityMapper {
@Select(“SELECT * FROM COMMODITY ORDER BY CID”)
List list();
}
这里数据库操作具体实现本应该在commodityMapper.xml文件中实现,但我们可以通过@Select注解简化操作;commodityMapper.xml中代码如下
注意mapper namespace中的路径不要写错
这里一个业务就实现完成了,下面是几点注意事项
1.在主程序中加入@MapperScan(“com.supermarket.mapper”),注意写自己的路径,因为主程序可能扫描不到持久层
2.这里有所添加的依赖,如果在添加依赖的时候发现老是报错,可以在这里查看是否有这个依赖以及版本号是否正确,再通过Maven刷新
3.MySQL数据库,可以通过mybatis-plus自动生成增删改查代码,可在网上查询做法
运行并测试
1.点击运行,如出现下图,则运行成功,如有错误,可根据错误提示解决
2.测试,我们前端如果还没有搭建可以通过postman来进行测试,在postman中向我们设置好的路径发送请求得到数据,测试成功
结语
本人也只是能简单的应用,希望我们之后都能理解底层,共同进步。
后端源码:
链接:https://pan.baidu.com/s/1DBrMRzCxJ0P0hb7ZGUujVQ
提取码:1a2b