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

从底层开始写(也能够从交互层写)

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

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);
		
		
}

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

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);
}

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

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);

	}
}

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

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);

	}

}