【Java SE 代码回顾】——day07_交互层、业务层、DAO层的商品管理Demo

简介: 【Java SE 代码回顾】——day07_交互层、业务层、DAO层的商品管理Demo

从底层开始写(也可以从交互层写)

-----------------------------------------HashMap静态数据库-----------------------------------------

package cn.tjpu.javase07.exam.diffcult;
import java.util.HashMap;
/**
 * 模拟数据库
 * 建一个静态的HashMap用来存放商品数据
 */
public class ProductDataBase {
     public static HashMap<String,Product> pMap=new HashMap<>();
}

---------------------------------------------------商品类---------------------------------------------  

package cn.tjpu.javase07.exam.diffcult;
/**
  商品信息类:定义商品的属性及方法
     id, name,price,库存数量   
   p01,透明胶带,8.8,1000
*/
public class Product {
  private String Id;
  private String pNname;
  private float price;
  private int pNumber;
  public Product(){}
  public Product(String id, String pNname, float price, int pNumber) {
    this.Id = id;
    this.pNname = pNname;
    this.price = price;
    this.pNumber = pNumber;
  }
//  public void setProduct(String id, String pNname, float price, int pNumber){
//    this.Id = id;
//    this.pNname = pNname;
//    this.price = price;
//    this.pNumber = pNumber;
//  }
  public String getId() {
    return Id;
  }
  public void setId(String id) {
    Id = id;
  }
  public String getpNname() {
    return pNname;
  }
  public void setpNname(String pNname) {
    this.pNname = pNname;
  }
  public float getPrice() {
    return price;
  }
  public void setPrice(float price) {
    this.price = price;
  }
  public int getpNumber() {
    return pNumber;
  }
  public void setpNumber(int pNumber) {
    this.pNumber = pNumber;
  }
  public String toString(){
    return this.Id+","+this.pNname+","+this.price+","+this.pNumber;
  } 
}

---------------------------------------------------数据层接口--------------------------------------------  

package cn.tjpu.javase07.exam.diffcult;
import java.util.ArrayList;
import java.util.Set;
/**
 * 数据层(DAO)的接口:定义数据层要完成的功能
 * 业务层和数据层的接口
 */
public interface ProductDao {
     //用户可以通过输入商品数据来向数据库中添加商品,如: idname,price,库存数量 ——  p01,透明胶带,8.8,1000
    public void addProduct(Product p);
    //用户可以查看数据库中所有的商品,无参,返回商品集合
    public Set<Product> getProducts();
    //用户可以通过输入一个id来查看一个商品
    public Product getProductById(String pid);
    //用户可以通过输入一个name来查看一个商品
    public Product getProductByName(String pname);
    //用户可以通过输入一个价格范围(比如: 100->200)来查看符合条件的商品
    public ArrayList<Product> getProductByPriceRange(float minprice,float maxprice);
    //用户可以通过输入一个id来从数据库中删除一个商品
    public void removeProduct(String pid);
    //修改商品,拿到一个具体的商品对象,修改商品属性
    public void updateProduct(Product p);
}

-------------------------------------------------数据层接口实现类------------------------------------------

package cn.tjpu.javase07.exam.diffcult;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
/**
 * 数据库dao层的实现类,必须实现接口中定义的方法
 */
public class ProductDaoImpl implements ProductDao {
  // 添加一个商品到数据库
  @Override
  public void addProduct(Product p) {
    // 静态Hashmap可直接用类调用,将传入的商品放入map中
    ProductDataBase.pMap.put(p.getId(), p);
  }
  // 查看所有商品,先把数据库中的所有值取出来放到collection中,然后遍历,并放到一个新建的HashSet中
  @Override
  public Set<Product> getProducts() {
    // 把hashmap中所有商品的值拿出来
    Collection<Product> values = ProductDataBase.pMap.values();
    // 新建一个hashset
    HashSet<Product> pset = new HashSet<>();
    // 遍历collection,即遍历商品对象,map中的值
    for (Product p : values) {
      // 把商品对象放入set中
      pset.add(p);
    }
    return pset;
  }
  // 根据id查看产品,数据存在HashMap中,键值id,可以直接通过id查看vaule(商品)
  @Override
  public Product getProductById(String pid) {
    Product product = ProductDataBase.pMap.get(pid);
    return product;
  }
  // 根据name查看产品,首先取出map中的值放入collection,遍历,若其中的名字与给定名字相同则返回这个商品查看
  @Override
  public Product getProductByName(String pname) {
    Collection<Product> values = ProductDataBase.pMap.values();
    for (Product p : values) {
      if (p.getpNname().equals(pname)) {
        return p;
      }
    }
    return null;
  }
  // 通过输入一个价格范围(比如: 100->200)来查看符合条件的商品,先取值,然后遍历,把符合条件的商品放入新建的list中
  @Override
  public ArrayList<Product> getProductByPriceRange(float minprice,
      float maxprice) {
    Collection<Product> values = ProductDataBase.pMap.values();
    ArrayList<Product> plist = new ArrayList<>();
    for (Product p : values) {
      if (p.getPrice() >= minprice && p.getPrice() < maxprice) {
        plist.add(p);
      }
    }
    return plist;
  }
  // 根据id移除数据库的商品,hashmap可直接通过移除键值来移除值
  @Override
  public void removeProduct(String pid) {
    ProductDataBase.pMap.remove(pid);
  }
  // 根据指定的商品更新商品属性,hashmap可直接覆盖值
  @Override
  public void updateProduct(Product p) {
    ProductDataBase.pMap.put(p.getId(), p);
  }
}

---------------------------------------------------业务层接口--------------------------------------------

package cn.tjpu.javase07.exam.diffcult;
import java.util.ArrayList;
/**
面向接口编程   
定义业务逻辑层(service)接口   
交互层和业务层的接口
*/
public interface ProductService {
  /**用户可以通过输入商品信息来向数据库中添加商品
   * 如: id,name,price,库存数量  
   *     p01,透明胶带,8.8,1000
   */
  public void addProduct(Product p);
  //查看数据库中所有的商品
  public ArrayList<Product>  getProducts();
  //通过输入一个id来查看一个商品
  public Product getProductById(String pid);
  //通过输入一个name来查看一个商品
  public Product getProductByName(String pname);
  //通过输入一个价格范围(比如: 100->200)来查看符合条件的商品,不止一个
  public ArrayList<Product> getProductByPriceRange(float minprice,float maxprice);
  //通过输入一个id来从数据库中删除一个商品
  public void removeProduct(String pid);
  //通过指定一个id来修改一个商品的名称
  public void updateName(String Id,String Name);
  //通过指定一个id来修改一个商品的价格
  public void updatePrice(String Id,float price);
  //通过指定一个id来修改一个商品的库存数量
  public void updateNumber(String Id,int number);
}

------------------------------------------业务层接口实现类-----------------------------------------  

package cn.tjpu.javase07.exam.diffcult;
import java.util.ArrayList;
import java.util.Set;
/**
 * service层的实现类,接口层定义的方法都要实现
 */
public class ServiceImpl implements ProductService {
  // new 一个Dao层实现类的对象,用来调用Dao层的方法
  ProductDao product = new ProductDaoImpl();
  @Override
  // 输入商品信息向数据库中添加商品
  public void addProduct(Product p) {
    product.addProduct(p);
  }
  @Override
  // 把数据库中的原本存放在Set中的商品放入一个list返回即可查看所有商品
  public ArrayList<Product> getProducts() {
    ArrayList<Product> plist = new ArrayList<>();
    Set<Product> pts = product.getProducts();// 该方法返回的是一个集合
    for (Product p : pts) {
      // 把集合中的商品数据放入list
      plist.add(p);
    }
    return plist;
  }
  // 通过输入一个id来查看数据库中的一个商品
  @Override
  public Product getProductById(String pid) {
    return product.getProductById(pid);
  }
  // 通过输入一个name来查看数据库中的一个商品
  @Override
  public Product getProductByName(String pname) {
    return product.getProductByName(pname);
  }
  // 通过给定的价格范围从数据库中取符合条件的商品并用list返回查看
  public ArrayList<Product> getProductByPriceRange(float minprice,
      float maxprice) {
    return product.getProductByPriceRange(minprice, maxprice);
  }
  @Override
  // 移除数据库中指定id商品
  public void removeProduct(String pid) {
    product.removeProduct(pid);
  }
  @Override
  // 通过指定id修改商品的名字
  public void updateName(String Id, String Name) {
    // 调用通过id查看商品名的方法,拿到这个商品对象
    Product pid = product.getProductById(Id);
    pid.setpNname(Name);// 调用重新设置名字的方法
    // 调用dao层的方法,将更新好的商品数据放入数据库hashmap中
    product.updateProduct(pid);
  }
  @Override
  // 通过指定id修改商品的价格
  public void updatePrice(String Id, float price) {
    Product pid = product.getProductById(Id);
    pid.setPrice(price);
    product.updateProduct(pid);
  }
  @Override
  // 通过指定id修改商品的库存数量
  public void updateNumber(String Id, int number) {
    Product pid = product.getProductById(Id);
    pid.setpNumber(number);
    ;
    product.updateProduct(pid);
  }
}

---------------------------------------------------测试代码---------------------------------------------  

package cn.tjpu.javase07.exam.diffcult;
/**
 * 业务逻辑层(service)的测试
 */
import java.util.ArrayList;
import org.junit.Test;
public class ServiceImplTest {
  // 测试商品添加和查看的功能
  @Test
  public void testaddProduct() {
    // 实例化业务层实现类,以调用其方法
    ServiceImpl service = new ServiceImpl();
    // 造一个商品数据
    Product p = new Product("01", "watch", 345.9f, 2);
    // 调添加功能将造的商品放入数据库
    service.addProduct(p);
    // 调用查看商品的方法,拿到数据库中的所有商品放入一个临时列表,打印
    ArrayList<Product> plist = service.getProducts();
    for (Product t : plist) {
      System.out.println(t);
    }
  }
  // 测试通过id查看商品
  @Test
  public void testgetProductById() {
    ServiceImpl service = new ServiceImpl();
    Product p = new Product("01", "watch", 345.9f, 2);
    service.addProduct(p);
    // 调用方法拿到商品
    Product pt = service.getProductById("01");
    System.out.println(pt);
  }
  // 测试通过name查看商品
  @Test
  public void getProductByNameTest() {
    ServiceImpl service = new ServiceImpl();
    Product p = new Product("01", "watch", 345.9f, 2);
    service.addProduct(p);
    Product pt = service.getProductByName("watch");
    System.out.println(pt);
  }
  // 测指定价格范围拿到符合条件的商品,放入临时list打印
  @Test
  public void testgetProductByPriceRange() {
    ServiceImpl service = new ServiceImpl();
    // 造商品
    Product p1 = new Product("01", "watch1", 145.9f, 2);
    Product p2 = new Product("02", "watch2", 245.9f, 3);
    Product p3 = new Product("03", "watch3", 345.9f, 4);
    Product p4 = new Product("04", "watch4", 445.9f, 6);
    // 放入数据库
    service.addProduct(p1);
    service.addProduct(p2);
    service.addProduct(p3);
    service.addProduct(p4);
    ArrayList<Product> plist = service.getProductByPriceRange(200, 400);
    System.out.println(plist);
  }
  // 测试从数据库移除指定商品
  @Test
  public void testremoveProduct() {
    ServiceImpl service = new ServiceImpl();
    Product p1 = new Product("01", "watch1", 145.9f, 2);
    Product p2 = new Product("02", "watch2", 245.9f, 3);
    Product p3 = new Product("03", "watch3", 345.9f, 4);
    Product p4 = new Product("04", "watch4", 445.9f, 6);
    service.addProduct(p1);
    service.addProduct(p2);
    service.addProduct(p3);
    service.addProduct(p4);
    // 移除
    service.removeProduct("02");
    // 查看
    ArrayList<Product> ptd = service.getProducts();
    System.out.println(ptd);
  }
  // 根据id更新名字测试
  @Test
  public void testupdateName() {
    ServiceImpl service = new ServiceImpl();
    Product p1 = new Product("01", "watch1", 145.9f, 2);
    service.addProduct(p1);
    service.updateName("01", "wat");
    System.out.println(p1);
  }
  // 根据id更新价格测试
  @Test
  public void testupdatePrice() {
    ServiceImpl service = new ServiceImpl();
    Product p1 = new Product("01", "watch1", 145.9f, 2);
    service.addProduct(p1);
    service.updatePrice("01", 148.0f);
    System.out.println(p1);
  }
  // 根据id更新库存测试
  @Test
  public void testupdateNumber() {
    ServiceImpl service = new ServiceImpl();
    Product p1 = new Product("01", "watch1", 145.9f, 2);
    service.addProduct(p1);
    service.updateNumber("01", 6);
    System.out.println(p1);
  }
}
相关文章
|
18小时前
|
Java 程序员 图形学
程序员教你用代码制作飞翔的小鸟--Java小游戏,正好拿去和给女神一起玩
《飞扬的小鸟》Java实现摘要:使用IntelliJ IDEA和JDK 16开发,包含小鸟类`Bird`,处理小鸟的位置、速度和碰撞检测。代码示例展示小鸟图像的加载、绘制与旋转。同时有`Music`类用于循环播放背景音乐。游戏运行时检查小鸟是否撞到地面、柱子或星星,并实现翅膀煽动效果。简单易懂,可直接复制使用。
|
18小时前
|
前端开发 Java Spring
Java Web ——MVC基础框架讲解及代码演示(下)
Java Web ——MVC基础框架讲解及代码演示
8 1
|
18小时前
|
设计模式 前端开发 网络协议
Java Web ——MVC基础框架讲解及代码演示(上)
Java Web ——MVC基础框架讲解及代码演示
6 0
|
18小时前
|
Java 数据挖掘 BI
Java医院绩效考核系统源码B/S+avue+MySQL助力医院实现精细化管理
医院绩效考核系统目标是实现对科室、病区财务指标、客户指标、流程指标、成长指标的全面考核、分析,并与奖金分配、学科建设水平评价挂钩。
30 0
|
18小时前
|
Java
Java的取余如何编写代码
【5月更文挑战第9天】Java的取余如何编写代码
16 5
|
18小时前
|
Java 开发框架 XML
JDK、JRE、Java SE、Java EE和Java ME有什么区别?
JDK、JRE、Java SE、Java EE和Java ME有什么区别?
|
18小时前
|
监控 前端开发 Java
Java基于B/S医院绩效考核管理平台系统源码 医院智慧绩效管理系统源码
医院绩效考核系统是一个关键的管理工具,旨在评估和优化医院内部各部门、科室和员工的绩效。一个有效的绩效考核系统不仅能帮助医院实现其战略目标,还能提升医疗服务质量,增强患者满意度,并促进员工的专业成长
18 0
|
18小时前
|
Java
代码实例演示Java字符串与输入流互转
代码实例演示Java字符串与输入流互转
|
18小时前
|
存储 安全 Java
掌握8条泛型规则,打造优雅通用的Java代码
掌握8条泛型规则,打造优雅通用的Java代码
掌握8条泛型规则,打造优雅通用的Java代码
|
18小时前
|
数据库连接
java+ssm+vue代码视频学习讲解
java+ssm+vue代码视频学习讲解
9 0