1.实现步骤
(一)创建数据库
创建MySQL数据库simonshop,包含四张表:用户表(t_user)、类别表(t_category)、商品表(t_product)和订单表(t_order)。

(二)创建Web项目simonshop

(三)创建实体类

在src里创建net.ls.shop.bean包,创建四个实体类:User、Category、Product与Order

(四)创建数据库工具类ConnectionManager

1、在web\WEB-INF目录下创建lib子目录,添加MySQL驱动程序的jar包

2、在src下创建net.ls.shop.dbutil包,在里面创建ConnectionManager类

package net.ls.shop.dbutil;/*** 功能:数据库连接管理类* 作者:罗帅* 日期:2019年12月4日*/import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;import javax.swing.JOptionPane;public class ConnectionManager {/*** 数据库驱动程序*/private static final String DRIVER = "com.mysql.jdbc.Driver";/*** 数据库统一资源标识符*/private static final String URL = "jdbc:mysql://localhost:3306/simonshop_final";/*** 数据库用户名*/private static final String USERNAME = "root";/*** 数据库密码*/private static final String PASSWORD = "1";/*** 私有化构造方法,拒绝实例化*/private ConnectionManager() {}/*** 获取数据库连接静态方法** @return 数据库连接对象*/public static Connection getConnection() {// 定义数据库连接Connection conn = null;try {// 安装数据库驱动程序Class.forName(DRIVER);// 获得数据库连接conn = DriverManager.getConnection(URL+ "?useUnicode=true&characterEncoding=UTF8", USERNAME, PASSWORD);} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}// 返回数据库连接return conn;}/*** 关闭数据库连接静态方法** @param conn*/public static void closeConnection(Connection conn) {// 判断数据库连接是否为空if (conn != null) {// 判断数据库连接是否关闭try {if (!conn.isClosed()) {// 关闭数据库连接conn.close();}} catch (SQLException e) {e.printStackTrace();}}}/*** 测试数据库连接是否成功** @param args*/public static void main(String[] args) {// 获得数据库连接Connection conn = getConnection();// 判断是否连接成功if (conn != null) {JOptionPane.showMessageDialog(null, "恭喜,数据库连接成功!");} else {JOptionPane.showMessageDialog(null, "遗憾,数据库连接失败!");}// 关闭数据库连接closeConnection(conn);}
}

运行程序,查看结果:

(五)数据访问接口(XXXDao)

在src里创建net.ls.shop.dao包,在里面创建UserDao、CategoryDao、ProductDao与OrderDao。

(六)数据访问接口实现类XXXDaoImpl

在src下创建net.ls.shop.dao.impl包,在里面创建UserDaoImpl、CategoryDaoImpl、ProductDaoImpl与OrderDaoImpl。

在项目根目录创建一个test文件夹,然后在项目结构窗口里将其标记为"Tests",这样文件夹颜色变成绿色

在test文件夹里创建net.ls.shop.dao.impl包,在里面创建测试类TestUserDaoImpl,TestProductDaoImpl,TestCategoryDaoImpl,TestOrderDaoImpl

TestUserDaoImpl


package net.ls.shop.dao.impl;import net.ls.shop.bean.User;
import net.ls.shop.dao.UserDao;
import org.junit.Test;import java.sql.Timestamp;
import java.util.Date;
import java.util.List;public class TestUserDaoImpl {//用户登录测试@Testpublic void testLogin() {String username, password;username = "admin";password = "12345";// 创建用户数据访问对象UserDao userDao = new UserDaoImpl();User user = userDao.login(username, password);// 判断用户是否登录成功if (user != null) {System.out.println("恭喜,登录成功!");} else {System.out.println("遗憾,登录失败!");}}//更新用户信息测试@Testpublic void TestUpdate(){//创建用户数据访问对象UserDao userDao = new UserDaoImpl();//找到涂文艳用户,id是4User user = userDao.findById(4);//修改密码与电话user.setPassword("903213");user.setTelephone("18121978354");//更新涂文艳用户int count = userDao.update(user);//判断更新用户是否成功if (count>0){System.out.println("恭喜,用户更新成功!");}else{System.out.println("遗憾,用户更新失败!");}//再次查询涂文艳用户user = userDao.findById(4);//查看涂文艳信息System.out.println(user);}//插入用户信息测试@Testpublic void testInsert(){// 创建用户数据访问对象UserDao userDao = new UserDaoImpl();// 创建用户User user = new User();user.setUsername("沐风执鸢");user.setPassword("124123");user.setTelephone("18789453211");//Timestamp time = new Timestamp(new Date().getTime());String time = "2016-05-12 20:12:12";Timestamp t = Timestamp.valueOf(time);user.setRegisterTime(t);user.setPopedom(1);// 判断用户名是否存在List list = userDao.findByUsername(user.getUsername());if (list.size() > 0){System.out.println("遗憾,用户名已存在,插入用户失败!");}else {// 插入用户int count = userDao.insert(user);// 查询是否插入成功if (count > 0){System.out.println("恭喜,插入用户成功!");}else {System.out.println("遗憾,插入用户失败!");}}}@Test//测试按标识符删除用户//删除用户记录涂文艳public void TestDeleteById(){UserDao dao = new UserDaoImpl();int count = dao.deleteById(4);if (count > 0) {System.out.println("恭喜,用户记录删除成功!");} else {System.out.println("遗憾,用户记录删除失败!");}}@Test//测试按标识符查询用户//查询用户记录温志军public void TestFindById(){UserDao dao = new UserDaoImpl();User user = dao.findById(3);System.out.println(user);}@Test//测试按用户名查询用户//查询用户记录温志军public void FindByUsername() {UserDao userDao = new UserDaoImpl();List<User> users = userDao.findByUsername("温志军");//判断是否有用户if (users.size() > 0) {for (User user : users) {System.out.println(user);}} else {System.out.println("没有此用户!");}}@Test//测试查询所有用户public void findAll(){UserDao userDao = new UserDaoImpl();List<User> users = userDao.findAll();//判断是否有用户if (users.size() > 0){for (User user: users){System.out.println(user);}}else {System.out.println("没有用户!");}}
}

TestProductDaoImpl

package net.ls.shop.dao.impl;import net.ls.shop.bean.Product;
import net.ls.shop.dao.CategoryDao;
import net.ls.shop.dao.ProductDao;
import org.junit.Test;import java.util.Date;
import java.sql.Timestamp;
import java.util.List;public class TestProductDaoImpl {@Test//按类别查询商品public void testFindByCategoryId() {// 创建商品数据访问对象ProductDao productDao = new ProductDaoImpl();// 定义商品类别编号int categoryId = 4;// 创建商品类别数据访问对象CategoryDao categoryDao = new CategoryDaoImpl();// 判断类别是否存在if (categoryDao.findById(categoryId) != null) {// 获取类别名称String categoryName = categoryDao.findById(categoryId).getName();// 获取该类别商品List<Product> products = productDao.findByCategoryId(categoryId);// 判断商品是否存在if (!products.isEmpty()) {// 遍历商品列表for (Product product: products) {System.out.println(product);}} else {System.out.println("[" + categoryName + "]类别没有商品!");}} else {System.out.println("类别编号[" + categoryId + "]不存在!");}}@Test// 插入商品public void TestByInsert() {//创建商品数据访问对象ProductDao productDao = new ProductDaoImpl();//创建商品Product product = new Product();product.setName("海尔空调");product.setPrice(16666);Timestamp time = new Timestamp(new Date().getTime());product.setAddTime(time);product.setCategoryId(1);//插入类别int count = productDao.insert(product);// 查询是否插入成功if (count > 0) {System.out.println("恭喜,商品类别插入成功!");} else {System.out.println("遗憾,商品类别插入成功!");}}@Test// 按标识符删除商品public void TestDeleteById() {//创建商品数据访问对象ProductDao productDao = new ProductDaoImpl();int count = productDao.deleteById(16);if (count > 0) {System.out.println("恭喜,商品信息删除成功!");} else {System.out.println("遗憾,商品信息删除失败!");}}@Test// 更新商品public void TestUpdate() {//创建商品数据访问对象ProductDao productDao = new ProductDaoImpl();//找到id=5的商品Product product = productDao.findById(5);//修改商品信息product.setName("九阳电饭煲");product.setPrice(888);Timestamp time = new Timestamp(new Date().getTime());product.setAddTime(time);product.setCategoryId(1);//更新商品信息int count = productDao.update(product);if (count > 0) {System.out.println("恭喜,商品信息更新成功!");} else {System.out.println("遗憾,商品信息更新失败!");}}@Test// 按标识符查询商品public void TestFindById(){//创建商品数据访问对象ProductDao productDao = new ProductDaoImpl();Product product = productDao.findById(1);System.out.println(product);}@Test// 查询全部商品public void TestFindAll() {//创建商品数据访问对象ProductDao productDao = new ProductDaoImpl();// 获取全部商品List<Product> products = productDao.findAll();//判断是否有商品if (products.size() > 0){for (Product product : products){System.out.println(product);}}else {System.out.println("没有商品信息");}}}


TestCategoryDaoImpl

package net.ls.shop.dao.impl;import net.ls.shop.bean.Category;
import net.ls.shop.dao.CategoryDao;
import org.junit.Test;import java.util.List;public class TestCategoryDaoImpl {@Testpublic void testFindAll() {// 创建类别数据访问对象CategoryDao categoryDao = new CategoryDaoImpl();// 获取全部商品类别List<Category> categories = categoryDao.findAll();// 判断是否有类别if (!categories.isEmpty()) {for (Category category: categories) {System.out.println(category);}} else {System.out.println("没有商品类别!");}}@Test//插入类别public void TestByInsert() {//创建类别数据访问对象CategoryDao categoryDao = new CategoryDaoImpl();//创建类别Category category = new Category();category.setName("厨房用品");//插入类别int count = categoryDao.insert(category);// 查询是否插入成功if (count > 0) {System.out.println("恭喜,商品类别插入成功!");} else {System.out.println("遗憾,商品类别插入成功!");}}@Test// 按标识符删除类别public void TestDeleteById() {//创建类别数据访问对象CategoryDao categoryDao = new CategoryDaoImpl();int count = categoryDao.deleteById(5);if (count > 0) {System.out.println("恭喜,商品类别删除成功!");} else {System.out.println("遗憾,商品类别删除失败!");}}@Test// 更新类别public void TestUpdate() {//创建类别数据访问对象CategoryDao categoryDao = new CategoryDaoImpl();//找到id=5的商品类别Category category = categoryDao.findById(3);//修改商品类别category.setName("日常用品");//更新商品类别int count = categoryDao.update(category);if (count > 0) {System.out.println("恭喜,商品类别更新成功!");} else {System.out.println("遗憾,商品类别更新失败!");}}@Test// 按标识符查询类别public void TestFindById(){//创建类别数据访问对象CategoryDao categoryDao = new CategoryDaoImpl();Category category = categoryDao.findById(1);System.out.println(category);}}


TestOrderDaoImpl

package net.ls.shop.dao.impl;import net.ls.shop.bean.Order;
import net.ls.shop.dao.OrderDao;
import org.junit.Test;import java.sql.Timestamp;
import java.util.Date;
import java.util.List;public class TestOrderDaoImpl {@Testpublic void testFindAll() {// 创建订单数据访问对象OrderDao orderDao = new OrderDaoImpl();// 获取全部订单List<Order> orders = orderDao.findAll();// 判断是否有订单if (orders.size() > 0) {// 遍历订单列表for (Order order: orders) {System.out.println(order);}} else {System.out.println("没有订单!");}}@Test// 插入订单public void TestByInsert() {//创建订单对象访问数据OrderDao orderDao = new OrderDaoImpl();//创建订单Order order = new Order();order.setUsername("罗泽");order.setTelephone("18121978354");order.setTotalPrice(18886);order.setDeliveryAddress("泸职院信息工程学院");Timestamp time = new Timestamp(new Date().getTime());order.setOrderTime(time);//插入订单信息int count = orderDao.insert(order);// 查询是否插入成功if (count > 0) {System.out.println("恭喜,订单信息插入成功!");} else {System.out.println("遗憾,订单信息插入成功!");}}@Test// 按标识符删除订单public void TestDeleteById() {//创建订单对象访问数据OrderDao orderDao = new OrderDaoImpl();int count = orderDao.deleteById(3);if (count > 0) {System.out.println("恭喜,订单信息删除成功!");} else {System.out.println("遗憾,订单信息删除失败!");}}@Test// 更新订单public void TestUpdate() {//创建订单对象访问数据OrderDao orderDao = new OrderDaoImpl();//找到id=2的订单Order order = orderDao.findById(2);//修改订单信息order.setUsername("李白");order.setTelephone("18121978064");order.setTotalPrice(123234);order.setDeliveryAddress("王者荣耀刺客学院");Timestamp time = new Timestamp(new Date().getTime());order.setOrderTime(time);//更新商品信息int count = orderDao.update(order);if (count > 0) {System.out.println("恭喜,订单信息更新成功!");} else {System.out.println("遗憾,订单信息更新失败!");}}@Test// 按标识符查询订单public void TestFindById(){//创建订单对象访问数据OrderDao orderDao = new OrderDaoImpl();Order order = orderDao.findById(1);System.out.println(order);}@Test//查询最后一个订单public void TestFindByLast(){//创建订单对象访问数据OrderDao orderDao = new OrderDaoImpl();Order order = orderDao.findLast();System.out.println(order);}}

(七)数据访问服务类XXXService

在src里创建net.hw.shop.service包,在里面创建四个服务类:UserService、CategoryService、ProductService与OrderService

1、用户服务类UserService

package net.ls.shop.service;/*** 功能:用户服务类* 作者:罗帅* 日期:2019年12月4日*/import java.util.List;import net.ls.shop.bean.User;
import net.ls.shop.dao.UserDao;
import net.ls.shop.dao.impl.UserDaoImpl;public class UserService {/*** 声明用户访问对象*/private UserDao userDao = new UserDaoImpl();public int addUser(User user) {return userDao.insert(user);}public int deleteUserById(int id) {return userDao.deleteById(id);}public int updateUser(User user) {return userDao.update(user);}public User findUserById(int id) {return userDao.findById(id);}public List<User> findUsersByUsername(String username) {return userDao.findByUsername(username);}public List<User> findAllUsers() {return userDao.findAll();}public User login(String username, String password) {return userDao.login(username, password);}
}

2、类别服务类CategoryService

package net.ls.shop.service;/*** 功能:类别服务类* 作者:罗帅* 日期:2019年12月4日*/import java.util.List;import net.ls.shop.bean.Category;
import net.ls.shop.dao.CategoryDao;
import net.ls.shop.dao.impl.CategoryDaoImpl;public class CategoryService {/*** 声明类别数据访问对象*/private CategoryDao categoryDao = new CategoryDaoImpl();public int addCategory(Category category) {return categoryDao.insert(category);}public int deleteCategoryById(int id) {return categoryDao.deleteById(id);}public int updateCategory(Category category) {return categoryDao.update(category);}public Category findCategoryById(int id) {return categoryDao.findById(id);}public List<Category> findAllCategories() {return categoryDao.findAll();}
}

3.商品服务类ProductService

package net.ls.shop.service;/*** 功能:商品服务类* 作者:罗帅* 日期:2019年12月4日*/import java.util.List;import net.ls.shop.bean.Product;
import net.ls.shop.dao.ProductDao;
import net.ls.shop.dao.impl.ProductDaoImpl;public class ProductService {/*** 声明商品数据访问对象*/private ProductDao productDao = new ProductDaoImpl();public int addProduct(Product product) {return productDao.insert(product);}public int deleteProductById(int id) {return productDao.deleteById(id);}public int updateProduct(Product product) {return productDao.update(product);}public Product findProductById(int id) {return productDao.findById(id);}public List<Product> findProductsByCategoryId(int categoryId) {return productDao.findByCategoryId(categoryId);}public List<Product> findAllProducts() {return productDao.findAll();}
}

4、订单服务类OrderService

package net.ls.shop.service;/*** 功能:订单服务类* 作者:罗帅* 日期:2019年12月4日*/import java.util.List;import net.ls.shop.bean.Order;
import net.ls.shop.dao.OrderDao;
import net.ls.shop.dao.impl.OrderDaoImpl;public class OrderService {/*** 声明订单数据访问对象*/OrderDao orderDao = new OrderDaoImpl();public int addOrder(Order order) {return orderDao.insert(order);}public int deleteOrderById(int id) {return orderDao.deleteById(id);}public int updateOrder(Order order) {return orderDao.update(order);}public Order findOrderById(int id) {return orderDao.findById(id);}public Order findLastOrder() {return orderDao.findLast();}public List<Order> findAllOrders() {return orderDao.findAll();}
}

在test文件夹里创建net.ls.shop.service包,在里面创建测试类
TestUserService, TestCategoryService,
TestProductService,TestOrderService

TestUserService

package net.ls.shop.service;import net.ls.shop.bean.User;
import org.junit.Test;import java.sql.Timestamp;
import java.util.Date;
import java.util.List;public class TestUserService {@Test//添加用户测试public void TestAddUser() {//创建用户数据访问对象UserService userService = new UserService();//创建用户User user = new User();user.setUsername("韩信");user.setPassword("134134");user.setTelephone("15525558989");Timestamp time = new Timestamp(new Date().getTime());user.setRegisterTime(time);//添加信息int count = userService.addUser(user);// 查询是否添加成功if (count > 0) {System.out.println("恭喜,用户信息添加成功!");} else {System.out.println("遗憾,用户信息添加成功!");}}@Test//测试按标识符删除用户public void TestDeleteUserById() {//创建用户数据访问对象UserService userService = new UserService();int count = userService.deleteUserById(5);if (count > 0) {System.out.println("恭喜,用户信息删除成功!");} else {System.out.println("遗憾,用户信息删除失败!");}}@Test//测试更新用户public void TestUpdateUser() {//创建用户数据访问对象UserService userService = new UserService();User user = userService.findUserById(4);//修改用户信息user.setUsername("钟无艳");user.setPassword("666666");user.setTelephone("12322334455");Timestamp time = new Timestamp(new Date().getTime());user.setRegisterTime(time);//更新信息int count = userService.updateUser(user);// 查询是否更新成功if (count > 0) {System.out.println("恭喜,用户信息更新成功!");} else {System.out.println("遗憾,用户信息更新成功!");}}@Test//测试按标识符查询用户public void TestFindUserById() {//创建用户数据访问对象UserService userService = new UserService();User user = userService.findUserById(1);System.out.println(user);}@Test//测试按用户名查找用户public void TestFindUsersByUsername() {//创建用户数据访问对象UserService userService = new UserService();List<User> users = userService.findUsersByUsername("郑晓红");//判断是否有用户if (users.size() > 0) {for (User user : users) {System.out.println(user);}} else {System.out.println("没有此用户!");}}@Test//测试查询所有用户public void TestFindAllUsers() {//创建用户数据访问对象UserService userService = new UserService();List<User> users = userService.findAllUsers();//判断是否有用户if (users.size() > 0) {for (User user : users) {System.out.println(user);}} else {System.out.println("没有用户!");}}@Test//测试用户登录public void TestLogin() {//创建用户数据访问对象UserService userService = new UserService();String username, password;username = "admin";password = "12345";User user = userService.login(username, password);if (user != null) {System.out.println("恭喜,用户名与密码正确,登录成功!");} else {System.out.println("遗憾,用户名与密码错误,登录失败!");}}
}


TestProductService

package net.ls.shop.service;import net.ls.shop.bean.Product;
import org.junit.Test;import java.sql.Timestamp;
import java.util.Date;
import java.util.List;public class TestProductService {@Test// 添加商品public void TestAddProduct() {//创建商品数据访问对象ProductService productService = new ProductService();//创建商品Product product = new Product();product.setName("格力空调");product.setPrice(6666);Timestamp time = new Timestamp(new Date().getTime());product.setAddTime(time);product.setCategoryId(1);//插入类别int count = productService.addProduct(product);// 查询是否插入成功if (count > 0) {System.out.println("恭喜,商品类别添加成功!");} else {System.out.println("遗憾,商品类别添加成功!");}}@Test// 按标识符删除商品public void TestDeleteProductById() {//创建商品数据访问对象ProductService productService = new ProductService();int count = productService.deleteProductById(5);if (count > 0) {System.out.println("恭喜,商品信息删除成功!");} else {System.out.println("遗憾,商品信息删除失败!");}}@Test// 更新商品public void TestUpdateProduct() {//创建商品数据访问对象ProductService productService = new ProductService();//找到id=5的商品Product product = productService.findProductById(5);//修改商品信息product.setName("九阳电饭煲");product.setPrice(888);Timestamp time = new Timestamp(new Date().getTime());product.setAddTime(time);product.setCategoryId(1);//更新商品信息int count = productService.updateProduct(product);if (count > 0) {System.out.println("恭喜,商品信息更新成功!");} else {System.out.println("遗憾,商品信息更新失败!");}}@Test// 按标识符查询商品public void TestFindProductById(){//创建商品数据访问对象ProductService productService = new ProductService();Product product = productService.findProductById(6);System.out.println(product);}@Test// 按类别查询商品public void TestFindProductsByCategoryId(){//创建商品数据访问对象ProductService productService = new ProductService();//定义商品类别编号int categoryId = 2;//创建类别数据访问对象CategoryService categoryService = new CategoryService();//判断类别是否存在if (categoryService.findCategoryById(categoryId) != null) {String categoryName = categoryService.findCategoryById(categoryId).getName();//获取该类别商品List<Product> products = productService.findProductsByCategoryId(categoryId);//判断商品是否存在if (!products.isEmpty()) {//遍历商品列表for (Product product : products) {System.out.println(product);}} else {System.out.println("[" + categoryName + "]类别没有商品!");}} else {System.out.println("类别编号[" + categoryId + "]不存在!");}}@Test// 查询全部商品public void TestFindAllProducts() {//创建商品数据访问对象ProductService productService = new ProductService();// 获取全部商品List<Product> products = productService.findAllProducts();//判断是否有商品if (products.size() > 0){for (Product product : products){System.out.println(product);}}else {System.out.println("没有商品信息");}}
}

TestCategoryService

package net.ls.shop.service;import org.junit.Test;
import net.ls.shop.bean.Category;import java.util.List;public class TestCategoryService {@Test//添加商品信息public void TestAddCategory(){//创建类别数据访问对象CategoryService categoryService = new CategoryService();//创建类别Category category = new Category();category.setName("厨房用品");//插入类别int count = categoryService.addCategory(category);// 查询是否插入成功if (count > 0) {System.out.println("恭喜,商品类别插入成功!");} else {System.out.println("遗憾,商品类别插入成功!");}}@Test// 按标识符删除类别public void TestDeleteCategoryById() {//创建类别数据访问对象CategoryService categoryService = new CategoryService();int count = categoryService.deleteCategoryById(5);if (count > 0) {System.out.println("恭喜,商品类别删除成功!");} else {System.out.println("遗憾,商品类别删除失败!");}}@Test// 更新类别public void TestUpdateCategory() {//创建类别数据访问对象CategoryService categoryService = new CategoryService();//找到id=5的商品类别Category category = categoryService.findCategoryById(5);//修改商品类别category.setName("日常用品");//更新商品类别int count = categoryService.updateCategory(category);if (count > 0) {System.out.println("恭喜,商品类别更新成功!");} else {System.out.println("遗憾,商品类别更新失败!");}}@Test// 按标识符查询类别public void TestFindCategoryById(){//创建类别数据访问对象CategoryService categoryService = new CategoryService();Category category = categoryService.findCategoryById(1);System.out.println(category);}@Test//查询所有类别public void TestFindAllCategories() {//创建类别数据访问对象CategoryService categoryService = new CategoryService();//获取全部商品类别List<Category> categories = categoryService.findAllCategories();//判断是否有类别if (categories.size() > 0) {for (Category category : categories) {System.out.println(category);}} else {System.out.println("没有商品类型");}}
}

TestOrderService


package net.ls.shop.service;
import net.ls.shop.bean.Order;
import org.junit.Test;import java.sql.Timestamp;
import java.util.Date;
import java.util.List;public class TestOrderService {@Test// 添加订单public void TestAddOrder() {//创建订单对象访问数据OrderService orderService = new OrderService();//创建订单Order order = new Order();order.setUsername("沐风2");order.setTelephone("12345456767");order.setTotalPrice(666666);order.setDeliveryAddress("泸职院信息工程学院");Timestamp time = new Timestamp(new Date().getTime());order.setOrderTime(time);//插入订单信息int count = orderService.addOrder(order);// 查询是否插入成功if (count > 0) {System.out.println("恭喜,订单信息插入成功!");} else {System.out.println("遗憾,订单信息插入成功!");}}@Test// 按标识符删除订单public void TestDeleteOrderById() {//创建订单对象访问数据OrderService orderService = new OrderService();int count = orderService.deleteOrderById(4);if (count > 0) {System.out.println("恭喜,订单信息删除成功!");} else {System.out.println("遗憾,订单信息删除失败!");}}@Test// 更新订单public void TestUpdateOrder() {//创建订单对象访问数据OrderService orderService = new OrderService();//找到id=2的订单Order order = orderService.findOrderById(2);//修改订单信息order.setUsername("兰陵王");order.setTelephone("13223323232");order.setTotalPrice(666666);order.setDeliveryAddress("王者荣耀刺客学院");Timestamp time = new Timestamp(new Date().getTime());order.setOrderTime(time);//更新商品信息int count = orderService.updateOrder(order);if (count > 0) {System.out.println("恭喜,订单信息更新成功!");} else {System.out.println("遗憾,订单信息更新失败!");}}@Test// 按标识符查询订单public void TestFindOrderById(){//创建订单对象访问数据OrderService orderService = new OrderService();Order order = orderService.findOrderById(1);System.out.println(order);}@Test//测试查询最后一个订单public void TestFindLastOrder(){//创建订单对象访问数据OrderService orderService = new OrderService();Order order = orderService.findLastOrder();System.out.println(order);}@Test// 测试查询全部订单public void testFindAllOrders() {//创建订单对象访问数据OrderService orderService = new OrderService();List<Order> orders = orderService.findAllOrders();if (orders.size() > 0) {for (Order order : orders) {System.out.println(order);}} else {System.out.println("没有订单!");}}}


(八)控制层(XXXServlet)
在src里创建net.ls.shop.servlet包,在里面创建各种控制处理类。
1、登录处理类LoginServlet

package net.ls.shop.servlet;
/*** 功能:登录处理类* 作者:罗帅* 日期:2019年12月11日*/import java.io.IOException;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import net.ls.shop.bean.User;
import net.ls.shop.service.UserService;@WebServlet("/login")
public class LoginServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 设置请求对象的字符编码request.setCharacterEncoding("utf-8");// 获取会话对象HttpSession session = request.getSession();// 获取用户名String username = request.getParameter("username");// 获取密码String password = request.getParameter("password");// 定义用户服务对象UserService userService = new UserService();// 执行登录方法,返回用户实体User user = userService.login(username, password);// 判断用户登录是否成功if (user != null) {// 设置session属性session.setMaxInactiveInterval(5 * 60);session.setAttribute("username", username);session.removeAttribute("loginMsg");// 根据用户权限跳转到不同页面if (user.getPopedom() == 0) {System.out.println("用户登录成功,进入后台管理!");response.sendRedirect(request.getContextPath() + "/backend/management.jsp");} else if (user.getPopedom() == 1) {System.out.println("用户登录成功,进入前台显示类别!");response.sendRedirect(request.getContextPath() + "/showCategory");}} else {System.out.println("用户名或密码错误,用户登录失败!");// 设置session属性loginMsgsession.setAttribute("loginMsg", "用户名或密码错误!");response.sendRedirect(request.getContextPath() + "/login.jsp");}}protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}
}

在地址栏里localhost:8080/simonshop/之后输入login?username=admin&password=12345之后敲回车:


再测试一下:



再测试一下


2、注销处理类LogoutServlet

package net.ls.shop.servlet;
/*** 功能:注销处理类* 作者:罗帅* 日期:2019年12月11日*/import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;@WebServlet("/logout")
public class LogoutServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 让session失效request.getSession().invalidate();// 重定向到登录页面response.sendRedirect(request.getContextPath() + "/login.jsp");System.out.println("用户注销成功!");}protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}
}

下面我们来进行测试。启动服务器,先要登录成功,然后再测试注销功能。



此时,测试用户注销功能:


此时,我们去服务器端控制台查看信息:

3、注册处理类RegisterServlet

package net.ls.shop.servlet;
/*** 功能:处理用户注册* 作者:罗帅* 日期:2019年12月9日*/import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLEncoder;
import java.sql.Timestamp;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import net.ls.shop.bean.User;
import net.ls.shop.service.UserService;@WebServlet("/register")
public class RegisterServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 设置请求对象的字符编码request.setCharacterEncoding("utf-8");// 获取session对象HttpSession session = request.getSession();// 获取用户名String username = request.getParameter("username");// 获取密码String password = request.getParameter("password");// 获取电话号码String telephone = request.getParameter("telephone");// 设置注册时间(时间戳对象)Timestamp registerTime = new Timestamp(System.currentTimeMillis());// 设置用户为普通用户int popedom = 1;// 创建用户对象User user = new User();// 设置用户对象信息user.setUsername(username);user.setPassword(password);user.setTelephone(telephone);user.setRegisterTime(registerTime);user.setPopedom(popedom);// 创建UserService对象UserService userService = new UserService();// 调用UserService对象的添加用户方法int count = userService.addUser(user);// 判断是否注册成功if (count > 0) {// 设置session属性session.setAttribute("registerMsg", "恭喜,注册成功!");// 重定向到登录页面response.sendRedirect(request.getContextPath() + "/login.jsp");// 在控制台输出测试信息System.out.println("恭喜,注册成功,跳转到登录页面!");} else {// 设置session属性session.setAttribute("registerMsg", "遗憾,注册失败!");// 重定向到注册页面response.sendRedirect(request.getContextPath() + "/frontend/register.jsp");// 在控制台输出测试信息System.out.println("遗憾,注册失败,跳转到注册页面!");}}protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}
}

下面我们来进行测试。启动服务器,访问http://localhost:8080/simonshop/register?username=萌萌哒&password=55555&telephone=15896961234,敲回车,查看结果:


我们去服务器端控制台查看信息:

此时,我们去NaviCat查看用户表,看看是否插入了新的用户记录?

我们重启服务器再测试,让telephone的值超过11位,看看结果如何。

我们去服务器端控制台查看信息:

确实在控制台输出了“遗憾,注册失败,跳转到注册页面!”信息,但是还抛出了一个异常:com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column ‘telephone’ at row 1,显示方式不是我们喜欢的,当然问题出在模型层,大家去修改UserDaoImpl里的insert方法。
很简单,只需要将catch字句里的e.printStackTrace();改成System.err.println(“SQL异常:” + e.getMessage());

重启服务器,再次测试:

看看服务器端控制台的提示信息:

4、显示类别处理类ShowCategoryServlet

package net.ls.shop.servlet;
/*** 功能:显示类别控制程序* 作者:罗帅* 日期:2019年12月11日*/import java.io.IOException;
import java.util.List;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import net.ls.shop.bean.Category;
import net.ls.shop.service.CategoryService;@WebServlet("/showCategory")
public class ShowCategoryServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 创建类别服务对象CategoryService categoryService = new CategoryService();// 获取全部商品类别List<Category> categories = categoryService.findAllCategories();// 获取session对象HttpSession session = request.getSession();// 把商品类别列表以属性的方式保存到session里session.setAttribute("categories", categories);// 重定向到显示商品类别页面(showCategory.jsp)response.sendRedirect(request.getContextPath() + "/frontend/showCategory.jsp");// 在服务器控制台输出测试信息for (Category category: categories) {System.out.println(category);}}protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}
}

下面我们来进行测试。
重启服务器,访问http://localhost:8080/simonshop/showCategory:


此时,我们到服务器端控制台查看输出的信息:

5、显示商品处理类ShowProductServlet

package net.ls.shop.servlet;/*** 功能:显示商品列表的控制程序*     通过业务层访问后台数据,*     然后将数据返回给前台页面* 作者:罗帅* 日期:2019年12月11日*/import java.io.IOException;
import java.util.List;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import net.ls.shop.bean.Product;
import net.ls.shop.service.CategoryService;
import net.ls.shop.service.ProductService;@WebServlet("/showProduct")
public class ShowProductServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 获取类别标识符int categoryId = Integer.parseInt(request.getParameter("categoryId"));// 创建商品类别服务对象CategoryService categoryService = new CategoryService();// 由类别标识符获取类别名String categoryName = categoryService.findCategoryById(categoryId).getName();// 创建商品服务对象ProductService productService = new ProductService();// 获取指定商品类别的商品列表List<Product> products = productService.findProductsByCategoryId(categoryId);// 获取session对象HttpSession session = request.getSession();// 把商品列表对象以属性的方式保存到session里session.setAttribute("products", products);// 重定向到显示商品信息页面response.sendRedirect(request.getContextPath() + "/frontend/showProduct.jsp?categoryName=" + categoryName);// 在服务器端控制台输出测试信息for (int i = 0; i < products.size(); i++) {System.out.println(products.get(i));}}protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}
}

JavaWeb实例:西蒙购物网相关推荐

  1. SSM框架笔记16:EASYUI_SSM框架西蒙购物网

    EASYUI_SSM框架西蒙购物网 功能需求: 1.只有注册用户成功登录之后才可查看商品类别,查看商品,选购商品,生成订单.查看订单. 2.只有管理员才有权限进行购物网后台管理(用户管理+类别管理+商 ...

  2. SSM框架笔记15:SSM框架西蒙购物网(XML配置方式)

      SSM框架西蒙购物网(XML配置方式) 功能需求: 1.只有注册用户成功登录之后才可查看商品类别,查看商品,选购商品,生成订单.查看订单. 2.只有管理员才有权限进行购物网后台管理(用户管理+类别 ...

  3. 西蒙购物网的测试(访问层测试)

    西蒙购物网的测试(访问层测试) ****(一)创建数据库 创建MySQL数据库simonshop,包含四张表:用户表(t_user).类别表(t_category).商品表(t_product)和订单 ...

  4. Java Web实训项目:西蒙购物网(Simonshop)

    一.功能需求 1.只有注册用户成功登录之后才可查看商品类别,查看商品,选购商品,生成订单.查看订单. 2.只有管理员才有权限进入购物网后台管理,进行用户管理.类别管理.商品管理与订单管理. 二.设计思 ...

  5. Spring框架学习笔记11:基于Java配置方式SSM框架西蒙购物网

    文章目录 一.网站功能需求 二.网站设计思路 1.设计模式 2.网站前台 3.网站后台 4.购物流程图 三.网站运行效果 四.网站实现步骤 (一)创建数据库与表 1.创建数据库 - simonshop ...

  6. Spring框架学习笔记10:基于XML配置方式SSM框架西蒙购物网

    文章目录 一.网站功能需求 二.网站设计思路 1.设计模式 2.网站前台 3.网站后台 4.购物流程图 三.网站运行效果 四.网站实现步骤 (一)创建数据库与表 1.创建数据库 - simonshop ...

  7. Spring Boot项目实战:BBT版西蒙购物网

    文章目录 一.设计思路 1.采用MVC设计模式 2.前台购物 (1)首页信息 (2)购物流程

  8. 企业级信息系统开发讲课笔记3.4 基于Java配置类SSM框架西蒙购物网

    文章目录 零.本节学习目标 一.网站功能需求 二.网站设计思路 (一)设计模式 (二)网站前台 (三)网站后台 1.用户管理 2.类别管理 3.商品管理 4.订单管理 (四)购物流程图 三.网站运行效 ...

  9. 企业级信息系统开发讲课笔记3.3 基于XML配置方式SSM框架西蒙购物网

    文章目录 零.本节学习目标 一.网站功能需求 二.网站设计思路 (一)设计模式 (二)网站前台 (三)网站后台 1.用户管理 2.类别管理 3.商品管理 4.订单管理 (四)购物流程图 三.网站运行效 ...

最新文章

  1. wxWidgets:wxQueryLayoutInfoEvent类用法
  2. ASP.NET多种不同页面间数据传递的方法
  3. 前端学习(225):尺寸属性
  4. 利用xlrd,Python对excel读取文件
  5. matlab getsplitpic,MATLAB_9-模式识别笔记
  6. 你的 ResNet 是时候更新了
  7. 安装了dns且可以正常工作为什么还有没有可以使用的DNS服务器的错误
  8. shell 当中的比较运算
  9. mysql硬盘复制无法启动_磁盘的移动导致MySQL数据启动失败
  10. 百度SEO站群全网音乐搜索下载网站源码
  11. 关于网页消息提示音问题解决与实现
  12. Neo4j的开发方式
  13. C语言规律,C语言中运算符结合型规律
  14. java中求矩形面积,java求矩形面积
  15. 01-Springboot优点缺点
  16. 東京音頭 (东京音头) 歌词翻译
  17. python 导出excel 可筛选_python中实现excel的高级筛选
  18. innerHTMLinnerText区别
  19. Java源文件编译出错:类文件包含错误的类 请删除该文件或确保文件位于正确的类路径子目录中
  20. 数据库复杂查询,左联右联 聚合 计数 时间查询等,持续更新

热门文章

  1. 网站服务器上生成csr,Zeus Web服务器生成CSR文件的方法
  2. 365天英语口语学习_18,挂断电话
  3. 前端学习笔记之——组织内容
  4. sql-labs 闯关 21~25
  5. 【51单片机STC89C52】串口通信(蓝牙)
  6. uni-app实现上下菜单联动
  7. 支付平台--账户体系之作用和分类
  8. Python笔记:复杂的布尔表达式和正反面写法示例
  9. 鲁迅美术学院考计算机几级,鲁迅美术学院考研难吗?一般要什么水平才可以进入?...
  10. java 解析rmc_GPS 0183协议GGA、GLL、GSA、GSV、RMC、VTG解释 + 数据解析 | 技术部落