前言
JDBC专栏,我们在前面的文章中学习了mysql-jar包的导入,使用JDBC规范连接数据库,以及JDBC对数据库进行增、删、改、查等常规操作。
接下来,就到检验学习成果的时刻了,我们将运用JDBC一系列常规操作,实现一个水果库存系统,将之前学到的知识融会贯通在一起…
一、水果库存系统介绍
水果库存系统的需求是实现以下几个功能:
查看水果库存列表;
添加水果库存信息;
查看特定水果库存信息;
水果下架;
退出;
只要是更新或者是查看信息的功能,都需要我们去使用JDBC规范连接数据库来实现。
在一开始,我们先不考虑代码是否冗余的问题,第一目标是 实现需求,基本功能实现之后再对代码进行优化…
二、结构设计:
1).Fruit类
在项目工程中,我们需要创建一个Fruit类,用于存放库存系统中每一种水果的信息;
每种水果都包含以下属性:
编号;
水果名称;
水果单价;
库存数量;
备注;
因此,在Fruit类中,我们需要为其设置对应的属性,构造方法,Get()、Set()方法,以及重写toString()方法从而方便在需要查看水果库存信息时输出…
Fruit类的代码:
/** * @author .29. * @create 2022-09-22 22:15 */ public class Fruit { //属性 private Integer fid; //水果编号 private String fname; //水果名称 private Integer price; //水果单价 private Integer fcount;//库存数量 private String remark; //备注 //构造方法 public Fruit() { } public Fruit(int fid, String fname, int price, int fcount, String remark) { this.fid = fid; this.fname = fname; this.price = price; this.fcount = fcount; this.remark = remark; } //对象get、set方法 public Integer getFid() { return fid; } publc void setFid(Integer fid) { this.fid = fid; } public String getFname() { return fname; } public void setFname(String fname) { this.fname = fname; } public Integer getPrice() { return price; } public void setPrice(Integer price) { this.price = price; } public Integer getFcount() { return fcount; } public void setFcount(Integer fcount) { this.fcount = fcount; } public String getRemark() { return remark; } public void setRemark(String remark) { this.remark = remark; } //重写toString方法 @Override public String toString() { return fid +"\t\t\t"+ fname +"\t\t\t"+ price +"\t\t\t"+ fcount +"\t\t\t"+ remark; } }
2).Menu类
准备好Fruit类之后,我们还需要准备一个菜单类Menu,在菜单类中,需要显示菜单的方法,还有需求实现的方法。
有了这些方法,才能实现水果库存系统的功能:
菜单显示:showMainMenu()
查看水果库存信息:showFruitList()
添加水果库存信息:addFruit()
查看指定水果库存信息:showFruitInfo()
水果下架:delFruit()
退出:exit()
在设计阶段,我们先准备好需要的结构,具体的功能代码实现可以放在下一阶段进行。
Menu类初版的代码(未实现功能):
/** * @author .29. * @create 2022-09-22 22:19 * */ //菜单类 public class Menu { //显示主菜单 public int showMainMenu(){ System.out.println("==================水果库存界面================="); System.out.println("1.查看水果库存列表"); System.out.println("2.添加水果库存信息"); System.out.println("3.查看特定水果库存信息"); System.out.println("4.水果下架"); System.out.println("5.退出"); System.out.println("=============================================="); System.out.print("请选择:"); int input = scan.nextInt(); return input; } //查看水果库存列表 public void showFruitList(){ return; } //添加水果库存信息--- 业务方法:添加库存记录 public void addFruit(){ return; } //查看指定水果库存信息 public void showFruitInfo(){ return; } //水果下架 public void delFruit(){ return; } //退出方法 public boolean exit(){ return true; } }
3).Client类
水果库存系统的使用,是需要客户通过选择菜单功能选项,系统再运行客户需要使用的功能。所以我们还需要一个客户类Client,实现先选择再运行:
Client类设计代码:
import com.haojin.fruit.controller.Menu;//导入项目工程中设计的Menu类 /** * @author .29. * @create 2022-09-22 22:21 */ public class Client { public static void main(String[] args) { Menu m = new Menu(); //创建Menu类的对象 boolean flag = true; while(flag){ //显示主菜单 int slt = m.showMainMenu(); switch(slt){ case 1: //查看列表 m.showFruitList(); break; case 2: //添加 m.addFruit(); break; case 3: //查看指定信息 m.showFruitInfo(); break; case 4: //下架 m.delFruit(); break; case 5: //退出 flag = m.exit(); break; default: System.out.println("系统没有此项功能,请重新选择吧..."); break; } } System.out.println("感谢使用"); } }
4).DAO设计理念
DAO(Data Access Object)是一个为数据库或其他持久化机制提供抽象接口的对象,在不暴露底层持久化实现细节的前提下提供各种数据访问操作。
具体来说,就是设计一个接口,接口中定义了此应用程序中将会用到的所有事务方法。在这个应用程序中,当需要和数据源进行交互的时候则使用这个接口,并且创建接口实现类。
①提供抽象接口FruitDAO
在接口中,我们需要准备抽象方法,对应了JDBC对数据库的不同操作:
查询库存列表:getFruitList();
新增库存:addFruit(Fruit fruit);
修改库存:UpdateFruit(Fruit fruit);
查询指定库存:getFruitByFname(String fname);
删除库存:DelFruit(String fname);
import com.haojin.fruit.pojo.Fruit; import java.util.List; /** * @author .29. * @create 2022-09-23 17:38 */ public interface FruitDAO { //查询库存列表 List<Fruit> getFruitList(); //新增库存 boolean addFruit(Fruit fruit); //修改库存 boolean UpdateFruit(Fruit fruit); //删除库存 boolean DelFruit(String fname); //查询指定库存 Fruit getFruitByFname(String fname); }
②接口实现类FruitDAOImpl
实现接口FruitDAO,重写接口中的抽象方法,重写方法中包含了底层持久化实现细节,这里,实现类方法都是单精度方法,方法的颗粒密度不能再被划分了。
上文设计的Menu类中的方法实现中,需要引用这里的实现类方法,使用当中JDBC连接,操作数据库的功能。
FruitDAOImpl实现类代码(不包含实现代码):
import com.haojin.fruit.dao.FruitDAO; import com.haojin.fruit.pojo.Fruit; import java.sql.*; import java.util.ArrayList; import java.util.List; /** * @author .29. * @create 2022-09-23 17:56 */ public class FruitDAOImpl implements FruitDAO { @Override public List<Fruit> getFruitList() { return null; } @Override public boolean addFruit(Fruit fruit) throws SQLException { return false; } @Override public boolean UpdateFruit(Fruit fruit) { return false; } @Override public boolean DelFruit(String fname) { return false; } @Override public Fruit getFruitByFname(String fname) { return null; } }
至此,水果库存系统的 结构 就设计完成啦,接下来就是功能代码的实现。
⚽求关注⚽ 作者🥇 .29. 🥇 的✔博客主页✔
您的点赞,收藏以及关注是对作者最大的鼓励喔 ~~