# 基于MongoDB实现商品管理系统(4)

基于MongoDB实现商品管理系统(4)

一、基于mongodb实现商品管理系统之向数据库中添加商品编写

1、在工程 productManager (模块)中,升级 工具类 MongoDBUtils.java 添加方法

/**
 *  productManager.src.main.java.djh.it.sh.utils.MongoDBUtils.java
 *
 *  2024-8-6 升级 工具类 MongoDBUtils.java 添加方法
 */

package djh.it.sh.utils;

import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.Mongo;

public class MongoDBUtils {
	// 1.使用connection用来保存Mongo的数据库连接对象
	static Mongo connection = null;
	// 2.使用db接收具体的数据库连接
	static DB db = null;
	// 3.定义coll接收数据表的连接
	static DBCollection coll = null;

	public static DB getDB(String dbName) throws Exception {
		// 创建一个Mongo的数据库连接对象
		connection = new Mongo("127.0.0.1:27017");
		// 通过获取数据库的连接对象connection根据传递的数据库名dbName来连接具体的数据库
		db = connection.getDB(dbName);
		// 将具体的数据库连接返回给调用者
		return db;
	}
	public static DBCollection getCollection(String dbName, String collName) throws Exception {
		// 创建一个Mongo的数据库连接对象
		connection = new Mongo("127.0.0.1:27017");
		// 通过获取数据库的连接对象connection根据传递的数据库名dbName来连接具体的数据库
		db = connection.getDB(dbName);
		coll = db.getCollection(collName);
		// 将具体的数据库连接返回给调用者
		return coll;
	}
} 

2、在工程 productManager (模块)中,在控制台输入界面 类 ProductManager.java 中,添加方法。

// 增加商品
public static void addProduct() {…}

/**
 *   productManager\src\main\java\djh\it\sh\web\ProductManager.java
 *
 *   2024-8-6 创建 控制台输入界面 类 ProductManager.java
 */
package djh.it.sh.web;

import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import djh.it.sh.domain.Product;
import djh.it.sh.service.ProductService;

import java.util.Scanner;

public class ProductManager {
	public static void main(String[] args) {
		// 创建键盘录入对象
		Scanner sc = new Scanner(System.in);
		while (true) {
			System.out.println("--------欢迎来到商品管理系统--------");
			System.out.println("输入以下命令进行操作:");
			System.out.println("C:添加商品D:根据编号删除商品 DA:删除所有商品 I:根据商品编号查询商品信息 FA:查询所有商品信息 Q:退出");
			// 获取用户输入的内容
			String s = sc.nextLine();
			switch (s.toUpperCase()) {
			case "C":
				System.out.println("增加商品");
				addProduct();
				break;
			case "D":
				System.out.println("根据编号删除商品");
				break;
			case "DA":
				System.out.println("删除所有商品");
				break;
			case "I":
				System.out.println("根据编号查询商品信息");
				findProductById();
				break;
			case "FA":
				System.out.println("查询所有商品信息");
				findAllProducts();
				break;
			case "Q":
				// System.out.println("欢迎再次访问!");
				// System.exit(0);
				// break;
			default:
				System.out.println("谢谢,欢迎再次访问!");
				System.exit(0);
			}
		}
	}

	//查询所有商品信息
	public static void findAllProducts() {
		try {
			// 创建业务层类的对象
			ProductService productService = new ProductService();
			DBCursor cur = productService.findAllProducts();
			// 判断数据库中是否有数据
			if (cur.size() == 0) {
				// 没有数据
				System.out.println("没有任何商品信息");
			} else {
				// 有数据
				System.out.println("商品id\t商品名称\t商品价格");
				//对于光标使用while循环控制获取数据的次数 cur.hasNext()表示判断在光标对象中是否含有数据
				while (cur.hasNext()) {
					//DBObject相当于 "{"BMW":"181887"}"对象
					//cur.next() 获取每一行数据放到product中
					DBObject product = cur.next();
					//product.get("") 表示取出每一行数据
					System.out.println(product.get("pid") + "\t" + product.get("pname") + "\t" + product.get("price"));
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	// 根据编号查询商品信息
	public static void findProductById() {
		try {
			// 创建键盘录入对象
			Scanner sc = new Scanner(System.in);
			System.out.println("请输入要查询的商品编号:");
			// 获取键盘录入的商品编号
			String pidStr = sc.nextLine();
			// 将pidStr解析为int类型 如果输入的不是数字,就会抛异常
			int pid = Integer.parseInt(pidStr);
			// 调用业务层根据编号查询商品信息
			ProductService productService = new ProductService();
			DBCursor cur = productService.findProductById(pid);
			//判断光标cur中是否含有数据
			if (cur.size()!=0) {
				//说明有数据,有该商品
				// 根据id查询到了商品信息
				System.out.println("商品id\t商品名称\t商品价格");
				//遍历右边
				while (cur.hasNext()) {
					//说明有数据,取出商品
					DBObject product = cur.next();
					//输出数据
					System.out.println(product.get("pid") + "\t" + product.get("pname") + "\t" + product.get("price"));
				}
			} else {
				System.out.println("此商品编号没有对应的商品信息");
			}
		} catch (Exception e) {
			System.out.println("根据编号查询商品信息出现异常" + e);
		}
	}

	// 增加商品
	public static void addProduct() {
		try {
			// 创建键盘录入对象
			Scanner sc = new Scanner(System.in);
			//提示
			System.out.println("请输入增加商品的编号:");
			//获取键盘输入
			String pidStr = sc.nextLine();
			// 将字符串的价格转换为int类型
			int pid = Integer.parseInt(pidStr);
			//提示
			System.out.println("请输入增加商品的名称:");
			//获取键盘输入
			String pname = sc.nextLine();
			//提示
			System.out.println("请输入增加商品的价格:");
			//获取键盘输入
			String priceStr = sc.nextLine();
			// 将字符串的价格转换为int类型
			int price = Integer.parseInt(priceStr);
			/*
			 * 我们这里需要将商品名称和商品价格封装到Product类的对象中, 这样只需要将商品类Product的对象作为参数传递即可
			 */
			Product p = new Product();
			// 封装到p对象中
			p.setPname(pname);
			p.setPrice(price);
			p.setPid(pid);
			// 创建业务层对象
			ProductService productService = new ProductService();
			// 调用业务层方法将商品传递到业务层
			productService.addProduct(p);
			System.out.println("添加商品成功");
		} catch (Exception e) {
			System.out.println("添加商品出现异常");
		}
	}

}

说明:

我们这里需要将商品名称和商品价格封装到Product类的对象中,这样只需要将商品类Product的对象作为参数传递即可。这样就不会导致如果商品信息有多个时,添加商品时,需要传递参数比较多的情况发生。

3、在工程 productManager (模块)中,service层 类 ProductService.java 并添加 的方法

/**
 *  productManager\src\main\java\djh\it\sh\service\ProductService.java
 *
 *  2024-8-6 创建 service层 类 ProductService.java
 */
package djh.it.sh.service;

import com.mongodb.DBCursor;
import djh.it.sh.dao.ProductDao;
import djh.it.sh.domain.Product;

public class ProductService {

    //创建 dao 层对象
    ProductDao productDao = new ProductDao();

    //查询所有商品信息
    public DBCursor findAllProducts() throws Exception {
        DBCursor cur = productDao.findAllProducts();
        return cur;
    }

    // 根据编号查询商品信息
    public DBCursor findProductById(int pid) throws Exception {
        DBCursor cur = productDao.findProductById(pid);
        return cur;
    }

    // 添加商品
    public void addProduct(Product p) throws Exception {
        productDao.addProduct(p);
    }
}

说明:

由于这里我们需要将Product的对象p传递到dao层,所以还得创建dao层对象,那么这里就产生代码重复性了,我们可以将创建dao层的对象代码 拿到类的成员位置进行创建。

4、在工程 productManager (模块)中,dao 层 类 ProductDao.java 添加 方法

/**
 *  productManager\src\main\java\djh\it\sh\dao\ProductDao.java
 *
 *  2024-8-6 创建 dao 层 类 ProductDao.java
 */
package djh.it.sh.dao;

import com.mongodb.*;
import djh.it.sh.domain.Product;
import djh.it.sh.utils.MongoDBUtils;

public class ProductDao {
    //查询所有商品
    public DBCursor findAllProducts() throws Exception {
        //通过工具类获取到具体的数据库连接
        DB db = MongoDBUtils.getDB("mymongodb");
        //根据数据库连接获取具体某张表即集合的对象
        DBCollection coll = db.getCollection("products");
        //根据集合对象调用方法查找集合中的所有数据,放到返回值cur,可以理解为光标
        DBCursor cur =coll.find();
        //将获取的光标返回给调用者
        return cur;
    }

    // 根据编号查询商品信息
    public DBCursor findProductById(int pid) throws Exception {
        //通过工具类获取到具体的数据库连接
        DB db = MongoDBUtils.getDB("mymongodb");
        //根据数据库连接获取具体某张表即集合的对象
        DBCollection coll = db.getCollection("products");
        //DBObject是BasicDBObject类的父接口
        //BasicDBObject 底层其实实现原理就是HashMap key-value形式
        DBObject dbs = new BasicDBObject();//存在形式:{"pid":pid}
        dbs.put("pid",pid);//将要查询的pid的值放到dbs中
        //根据dbs中的pid的值到数据库中查询数据,使用光标接收
        //DBCursor 类似于java中的Iterator迭代器接口,属于一个类
        DBCursor cur = coll.find(dbs);
        //返回光标
        return cur;
    }

    // 添加商品
    public void addProduct(Product p) throws Exception {
        //		//通过工具类获取到具体的数据库连接
//		DB db = MongoDBUtils.getDB("mymongodb");
//		//根据数据库连接获取具体某张表即集合的对象
//		DBCollection coll = db.getCollection("products");
        //根据数据库连接获取具体某张表即集合的对象  "mymongodb" 表示数据库名 "products" 表示数据库中的表名
        DBCollection coll = MongoDBUtils.getCollection("mymongodb", "products");
        DBObject dbs = new BasicDBObject();
        //向dbs中存放key-value数据 {"pname","BMW"}
        dbs.put("pid", p.getPid());
        dbs.put("pname", p.getPname());
        dbs.put("price", p.getPrice());
        //插入操作:使用集合连接将数据插入
        coll.insert(dbs);
    }

}

5、运行 控制台输入界面 类 ProductManager.java 进行测试

输出结果如下:


--------欢迎来到商品管理系统--------
输入以下命令进行操作:
C:添加商品D:根据编号删除商品 DA:删除所有商品 I:根据商品编号查询商品信息 FA:查询所有商品信息 Q:退出

fa

查询所有商品信息
商品id	商品名称	商品价格
1.0	lenovo	5000.0
2.0	Haier	3000.0
3.0	Thor	5000.0
4.0	Nike	800.0
5.0	Dior	2000.0
6.0	HERMES	2400.0
7.0	MK	4000.0
8.0	CHANEL	800.0
9.0	BMW	20000.0
10	BaoMa	580000
11	aodi	380000

--------欢迎来到商品管理系统--------
输入以下命令进行操作:
C:添加商品D:根据编号删除商品 DA:删除所有商品 I:根据商品编号查询商品信息 FA:查询所有商品信息 Q:退出
c
增加商品
请输入增加商品的编号:
12
请输入增加商品的名称:
aodi
请输入增加商品的价格:
330000
添加商品成功
--------欢迎来到商品管理系统--------
输入以下命令进行操作:
C:添加商品D:根据编号删除商品 DA:删除所有商品 I:根据商品编号查询商品信息 FA:查询所有商品信息 Q:退出

fa
查询所有商品信息
1.0	lenovo	5000.0
2.0	Haier	3000.0
3.0	Thor	5000.0
4.0	Nike	800.0
5.0	Dior	2000.0
6.0	HERMES	2400.0
7.0	MK	4000.0
8.0	CHANEL	800.0
9.0	BMW	20000.0
10	BaoMa	580000
11	aodi	380000
12	aodi	330000

6、添加商品的业务流程如下图

  2-( img/66.jpg ) .png

  2-( img/67.jpg ) .png

二、基于mongodb实现商品管理系统之根据商品编号删除商品编写

1、根据商品id删除商品的具体流程如下图所示:

  2-12.png (img/69.jpg)

  2-13.png (img/70.jpg)

说明:要想删除商品,必须先根据用户输入的商品编号去数据库中查询该商品信息,如果该商品编号不存在,则提示商品不存在,然后再重新选择操作。

如果商品编号存在,则查询出商品信息,然后提示确定删除吗,因为有可能会误删,所以以防万一,我们这里需要作出提示。最后,如果删除成功,则提示删除成功。

2、在工程 productManager (模块)中,在控制台输入界面 类 ProductManager.java 中,添加方法。

// 根据编号删除商品
public static void deleteProductByPid() {…}

/**
 *   productManager\src\main\java\djh\it\sh\web\ProductManager.java
 *
 *   2024-8-6 创建 控制台输入界面 类 ProductManager.java
 */
package djh.it.sh.web;

import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import djh.it.sh.domain.Product;
import djh.it.sh.service.ProductService;

import java.util.Scanner;

public class ProductManager {
	public static void main(String[] args) {
		// 创建键盘录入对象
		Scanner sc = new Scanner(System.in);
		while (true) {
			System.out.println("--------欢迎来到商品管理系统--------");
			System.out.println("输入以下命令进行操作:");
			System.out.println("C:添加商品D:根据编号删除商品 DA:删除所有商品 I:根据商品编号查询商品信息 FA:查询所有商品信息 Q:退出");
			// 获取用户输入的内容
			String s = sc.nextLine();
			switch (s.toUpperCase()) {
			case "C":
//				System.out.println("增加商品");
				addProduct();
				break;
			case "D":
//				System.out.println("根据编号删除商品");
				deleteProductByPid();
				break;
			case "DA":
//				System.out.println("删除所有商品");
				break;
			case "I":
//				System.out.println("根据编号查询商品信息");
				findProductById();
				break;
			case "FA":
//				System.out.println("查询所有商品信息");
				findAllProducts();
				break;
			case "Q":
				// System.out.println("欢迎再次访问!");
				// System.exit(0);
				// break;
			default:
				System.out.println("谢谢,欢迎再次访问!");
				System.exit(0);
			}
		}
	}

	//查询所有商品信息
	public static void findAllProducts() {
		try {
			// 创建业务层类的对象
			ProductService productService = new ProductService();
			DBCursor cur = productService.findAllProducts();
			// 判断数据库中是否有数据
			if (cur.size() == 0) {
				// 没有数据
				System.out.println("没有任何商品信息");
			} else {
				// 有数据
				System.out.println("商品id\t商品名称\t商品价格");
				//对于光标使用while循环控制获取数据的次数 cur.hasNext()表示判断在光标对象中是否含有数据
				while (cur.hasNext()) {
					//DBObject相当于 "{"BMW":"181887"}"对象
					//cur.next() 获取每一行数据放到product中
					DBObject product = cur.next();
					//product.get("") 表示取出每一行数据
					System.out.println(product.get("pid") + "\t" + product.get("pname") + "\t" + product.get("price"));
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	// 根据编号查询商品信息
	public static void findProductById() {
		try {
			// 创建键盘录入对象
			Scanner sc = new Scanner(System.in);
			System.out.println("请输入要查询的商品编号:");
			// 获取键盘录入的商品编号
			String pidStr = sc.nextLine();
			// 将pidStr解析为int类型 如果输入的不是数字,就会抛异常
			int pid = Integer.parseInt(pidStr);
			// 调用业务层根据编号查询商品信息
			ProductService productService = new ProductService();
			DBCursor cur = productService.findProductById(pid);
			//判断光标cur中是否含有数据
			if (cur.size()!=0) {
				//说明有数据,有该商品
				// 根据id查询到了商品信息
				System.out.println("商品id\t商品名称\t商品价格");
				//遍历右边
				while (cur.hasNext()) {
					//说明有数据,取出商品
					DBObject product = cur.next();
					//输出数据
					System.out.println(product.get("pid") + "\t" + product.get("pname") + "\t" + product.get("price"));
				}
			} else {
				System.out.println("此商品编号没有对应的商品信息");
			}
		} catch (Exception e) {
			System.out.println("根据编号查询商品信息出现异常" + e);
		}
	}

	// 增加商品
	public static void addProduct() {
		try {
			// 创建键盘录入对象
			Scanner sc = new Scanner(System.in);
			//提示
			System.out.println("请输入增加商品的编号:");
			//获取键盘输入
			String pidStr = sc.nextLine();
			// 将字符串的价格转换为int类型
			int pid = Integer.parseInt(pidStr);
			//提示
			System.out.println("请输入增加商品的名称:");
			//获取键盘输入
			String pname = sc.nextLine();
			//提示
			System.out.println("请输入增加商品的价格:");
			//获取键盘输入
			String priceStr = sc.nextLine();
			// 将字符串的价格转换为int类型
			int price = Integer.parseInt(priceStr);
			/*
			 * 我们这里需要将商品名称和商品价格封装到Product类的对象中, 这样只需要将商品类Product的对象作为参数传递即可
			 */
			Product p = new Product();
			// 封装到p对象中
			p.setPname(pname);
			p.setPrice(price);
			p.setPid(pid);
			// 创建业务层对象
			ProductService productService = new ProductService();
			// 调用业务层方法将商品传递到业务层
			productService.addProduct(p);
			System.out.println("添加商品成功");
		} catch (Exception e) {
			System.out.println("添加商品出现异常");
		}
	}

	// 根据编号删除商品
	public static void deleteProductByPid() {
		try {
			// 创建键盘录入对象
			Scanner sc = new Scanner(System.in);
			//提示
			System.out.println("请输入删除商品的编号:");
			//获取键盘录入信息
			String pidStr = sc.nextLine();
			int pid = Integer.parseInt(pidStr);
			// 根据商品编号查询商品信息
			// 调用业务层根据编号查询商品信息
			ProductService productService = new ProductService();
			DBCursor cur = productService.findProductById(pid);
			//判断是否查找到该商品,如果没有该商品,则提示没有找到要删除的商品 结束方法
			if(cur.size() == 0)
			{
				System.out.println("对不起,没有找到要删除的商品");
				return;
			}
			//如果程序能够运行到这里,说明根据编号已经找到该商品信息
			//显示数据信息
			System.out.println("商品id\t商品名称\t商品价格");
			while (cur.hasNext()) {
				DBObject product = cur.next();
				System.out.println(product.get("pid") + "\t" + product.get("pname") + "\t" + product.get("price"));
			}
			//防止误删
			System.out.println("确定要删除吗?按y!");
			//获取录入的字母
			String yes = sc.nextLine();
			//判断是否确定删除
			if("y".equals(yes))
			{
				//确定删除 调用业务层根据商品编号进行删除
				productService.deleteProductByPid(pid);
				//提示删除成功
				System.out.println("删除商品成功");
			}else
			{
				//误删
				System.out.println("取消删除商品信息!");
			}
		}catch (Exception e) {
			System.out.println("根据编号删除商品出现异常" + e);
		}
	}

}

3、在工程 productManager (模块)中,service层 类 ProductService.java 并添加 的方法

/**
 *  productManager\src\main\java\djh\it\sh\service\ProductService.java
 *
 *  2024-8-6 创建 service层 类 ProductService.java
 */
package djh.it.sh.service;

import com.mongodb.DBCursor;
import djh.it.sh.dao.ProductDao;
import djh.it.sh.domain.Product;

public class ProductService {

    //创建 dao 层对象
    ProductDao productDao = new ProductDao();

    //查询所有商品信息
    public DBCursor findAllProducts() throws Exception {
        DBCursor cur = productDao.findAllProducts();
        return cur;
    }

    // 根据编号查询商品信息
    public DBCursor findProductById(int pid) throws Exception {
        DBCursor cur = productDao.findProductById(pid);
        return cur;
    }

    // 添加商品
    public void addProduct(Product p) throws Exception {
        productDao.addProduct(p);
    }

    // 根据编号删除商品
    public void deleteProductByPid(int pid) throws Exception {
        productDao.deleteProductByPid(pid);
    }
}

4、在工程 productManager (模块)中,dao 层 类 ProductDao.java 添加 方法

/**
 *  productManager\src\main\java\djh\it\sh\dao\ProductDao.java
 *
 *  2024-8-6 创建 dao 层 类 ProductDao.java
 */
package djh.it.sh.dao;

import com.mongodb.*;
import djh.it.sh.domain.Product;
import djh.it.sh.utils.MongoDBUtils;

public class ProductDao {
    //查询所有商品
    public DBCursor findAllProducts() throws Exception {
        //通过工具类获取到具体的数据库连接
        DB db = MongoDBUtils.getDB("mymongodb");
        //根据数据库连接获取具体某张表即集合的对象
        DBCollection coll = db.getCollection("products");
        //根据集合对象调用方法查找集合中的所有数据,放到返回值cur,可以理解为光标
        DBCursor cur =coll.find();
        //将获取的光标返回给调用者
        return cur;
    }

    // 根据编号查询商品信息
    public DBCursor findProductById(int pid) throws Exception {
        //通过工具类获取到具体的数据库连接
        DB db = MongoDBUtils.getDB("mymongodb");
        //根据数据库连接获取具体某张表即集合的对象
        DBCollection coll = db.getCollection("products");
        //DBObject是BasicDBObject类的父接口
        //BasicDBObject 底层其实实现原理就是HashMap key-value形式
        DBObject dbs = new BasicDBObject();//存在形式:{"pid":pid}
        dbs.put("pid",pid);//将要查询的pid的值放到dbs中
        //根据dbs中的pid的值到数据库中查询数据,使用光标接收
        //DBCursor 类似于java中的Iterator迭代器接口,属于一个类
        DBCursor cur = coll.find(dbs);
        //返回光标
        return cur;
    }

    // 添加商品
    public void addProduct(Product p) throws Exception {
        //		//通过工具类获取到具体的数据库连接
//		DB db = MongoDBUtils.getDB("mymongodb");
//		//根据数据库连接获取具体某张表即集合的对象
//		DBCollection coll = db.getCollection("products");
        //根据数据库连接获取具体某张表即集合的对象  "mymongodb" 表示数据库名 "products" 表示数据库中的表名
        DBCollection coll = MongoDBUtils.getCollection("mymongodb", "products");
        DBObject dbs = new BasicDBObject();
        //向dbs中存放key-value数据 {"pname","BMW"}
        dbs.put("pid", p.getPid());
        dbs.put("pname", p.getPname());
        dbs.put("price", p.getPrice());
        //插入操作:使用集合连接将数据插入
        coll.insert(dbs);
    }

    // 根据编号删除商品
    public void deleteProductByPid(int pid) throws Exception {
        //根据数据库连接获取具体某张表即集合的对象  "mymongodb" 表示数据库名 "products" 表示数据库中的表名
        DBCollection coll = MongoDBUtils.getCollection("mymongodb", "products");
        //创建对象
//        DBObject dbs = new BasicDBObject();
//        dbs.put("pid", pid);
        DBObject dbs = new BasicDBObject("pid", pid);
        coll.remove(dbs);
    }
}

5、运行 控制台输入界面 类 ProductManager.java 进行测试

上一节关联链接请点击
# 基于MongoDB实现商品管理系统(3)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

段子手-168

你的鼓励将是我你的创作最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值