JavaWeb实例:西蒙购物网
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实例:西蒙购物网相关推荐
- SSM框架笔记16:EASYUI_SSM框架西蒙购物网
EASYUI_SSM框架西蒙购物网 功能需求: 1.只有注册用户成功登录之后才可查看商品类别,查看商品,选购商品,生成订单.查看订单. 2.只有管理员才有权限进行购物网后台管理(用户管理+类别管理+商 ...
- SSM框架笔记15:SSM框架西蒙购物网(XML配置方式)
SSM框架西蒙购物网(XML配置方式) 功能需求: 1.只有注册用户成功登录之后才可查看商品类别,查看商品,选购商品,生成订单.查看订单. 2.只有管理员才有权限进行购物网后台管理(用户管理+类别 ...
- 西蒙购物网的测试(访问层测试)
西蒙购物网的测试(访问层测试) ****(一)创建数据库 创建MySQL数据库simonshop,包含四张表:用户表(t_user).类别表(t_category).商品表(t_product)和订单 ...
- Java Web实训项目:西蒙购物网(Simonshop)
一.功能需求 1.只有注册用户成功登录之后才可查看商品类别,查看商品,选购商品,生成订单.查看订单. 2.只有管理员才有权限进入购物网后台管理,进行用户管理.类别管理.商品管理与订单管理. 二.设计思 ...
- Spring框架学习笔记11:基于Java配置方式SSM框架西蒙购物网
文章目录 一.网站功能需求 二.网站设计思路 1.设计模式 2.网站前台 3.网站后台 4.购物流程图 三.网站运行效果 四.网站实现步骤 (一)创建数据库与表 1.创建数据库 - simonshop ...
- Spring框架学习笔记10:基于XML配置方式SSM框架西蒙购物网
文章目录 一.网站功能需求 二.网站设计思路 1.设计模式 2.网站前台 3.网站后台 4.购物流程图 三.网站运行效果 四.网站实现步骤 (一)创建数据库与表 1.创建数据库 - simonshop ...
- Spring Boot项目实战:BBT版西蒙购物网
文章目录 一.设计思路 1.采用MVC设计模式 2.前台购物 (1)首页信息 (2)购物流程
- 企业级信息系统开发讲课笔记3.4 基于Java配置类SSM框架西蒙购物网
文章目录 零.本节学习目标 一.网站功能需求 二.网站设计思路 (一)设计模式 (二)网站前台 (三)网站后台 1.用户管理 2.类别管理 3.商品管理 4.订单管理 (四)购物流程图 三.网站运行效 ...
- 企业级信息系统开发讲课笔记3.3 基于XML配置方式SSM框架西蒙购物网
文章目录 零.本节学习目标 一.网站功能需求 二.网站设计思路 (一)设计模式 (二)网站前台 (三)网站后台 1.用户管理 2.类别管理 3.商品管理 4.订单管理 (四)购物流程图 三.网站运行效 ...
最新文章
- wxWidgets:wxQueryLayoutInfoEvent类用法
- ASP.NET多种不同页面间数据传递的方法
- 前端学习(225):尺寸属性
- 利用xlrd,Python对excel读取文件
- matlab getsplitpic,MATLAB_9-模式识别笔记
- 你的 ResNet 是时候更新了
- 安装了dns且可以正常工作为什么还有没有可以使用的DNS服务器的错误
- shell 当中的比较运算
- mysql硬盘复制无法启动_磁盘的移动导致MySQL数据启动失败
- 百度SEO站群全网音乐搜索下载网站源码
- 关于网页消息提示音问题解决与实现
- Neo4j的开发方式
- C语言规律,C语言中运算符结合型规律
- java中求矩形面积,java求矩形面积
- 01-Springboot优点缺点
- 東京音頭 (东京音头) 歌词翻译
- python 导出excel 可筛选_python中实现excel的高级筛选
- innerHTMLinnerText区别
- Java源文件编译出错:类文件包含错误的类 请删除该文件或确保文件位于正确的类路径子目录中
- 数据库复杂查询,左联右联 聚合 计数 时间查询等,持续更新
热门文章
- 网站服务器上生成csr,Zeus Web服务器生成CSR文件的方法
- 365天英语口语学习_18,挂断电话
- 前端学习笔记之——组织内容
- sql-labs 闯关 21~25
- 【51单片机STC89C52】串口通信(蓝牙)
- uni-app实现上下菜单联动
- 支付平台--账户体系之作用和分类
- Python笔记:复杂的布尔表达式和正反面写法示例
- 鲁迅美术学院考计算机几级,鲁迅美术学院考研难吗?一般要什么水平才可以进入?...
- java 解析rmc_GPS 0183协议GGA、GLL、GSA、GSV、RMC、VTG解释 + 数据解析 | 技术部落