Java Web 网络商城案例演示二十一 利用工厂模式解耦(适用于不同数据库的配置)
发布日期:2021-06-29 15:01:30
浏览次数:2
分类:技术文章
本文共 5341 字,大约阅读时间需要 17 分钟。
Java Web 网络商城案例演示二十一 利用工厂模式解耦(适用于不同数据库的配置)
通过这种方式只需要配置XML传入不同的Dao就可以实现不同的DaoImpl连接不同的数据库创建XML文件
创建BeanFactory类和createObject方法当中
导入相关架包,用于解析XML
BeanFactorypublic class BeanFactory { public static Object createObject(String name) { try { // 通过传入的类的名称找到application.xml中name对应是字节码(class的值) // class的值通过反射的方式找到器对应的类的实现也就是说通过配置XML文件的方式通过Dao找到DaoImpl, // 获取到Document对象 SAXReader reader = new SAXReader(); // 如何获取application.xml文件的输入流(application.xml必须位于src下) InputStream is = BeanFactory.class.getClassLoader().getResourceAsStream("application.xml"); // 获取到该文件对象 Document doc = reader.read(is); // 解析XML // 通过Document对象获取到一个根节点beans Element rootElement = doc.getRootElement(); // 通过根结点获取到根结点下所有的子节点bean,返回一个集合 Listlist = rootElement.elements(); // 遍历集合,判断每个元素上的id的值是否和当前的name一致 for (Element ele : list) { // ele就相当于beans节点下每个bean // 获取到当前节点的id属性的值 String id = ele.attributeValue("id"); // 如果一致,我们要获取到当前元素上class属性的值 if (id.equals(name)) { String str = ele.attributeValue("class"); // 通过反射创建对象并且返回 Class clazz = Class.forName(str); return clazz.newInstance(); } } } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } return null; } public static void main(String[] args) throws SQLException { UserDao ud = (UserDao) BeanFactory.createObject("UserDao");//通过字节码获取到其实现类的对象 User user = new User(); user.setUsername("aaa"); user.setPassword("aaa"); User uu = ud.userLogin(user);//通过接口也就是其父类调用其实力类当中的方法 System.out.println(uu); }}
public class CategoryServiceImpl implements CategoryService { CategoryDao categoryDao = (CategoryDao) BeanFactory.createObject("CategoryDao"); @Override public ListgetAllCats() throws Exception { return categoryDao.getAllCats(); } @Override public void addCategory(Category category) throws Exception { // 本质是向mysql插入一条数据 categoryDao.addCategory(category); // 更新redis的缓存 Jedis jedis = JedisUtils.getJedis();// 获取到Jedis的实例 jedis.del("allCats");// 删除redis当中对应allCats的数据 JedisUtils.closeJedis(jedis);// 关闭当前jedis对象 // 当访问页面时会在CategoryServlet类当中从新开启redis获取对应数据库当中的内容并将其再次放入到redis }}
public class UserServiceImpl implements UserService { UserDao userDao = (UserDao) BeanFactory.createObject("UserDao"); @Override public void userRegist(User user) throws SQLException { // TODO Auto-generated method stub // 实现注册功能 userDao = new UserDaoImpl(); userDao.userRegist(user); } @Override public boolean userActive(String code) throws SQLException { // TODO Auto-generated method stub // 对DB发送select * from user where code = ? User user = userDao.userActive(code);// 将code传入到dao层查看数据,返回该code对应的user,以方便后面操作user if (null != user) { // 可以根据激活码查询到一个用户 // 修改用户的状态,清除激活码 user.setState(1); user.setCode(null); // 对数据库执行一次真实的更新操作 // update user set username=? ,password = ? ,name = ? ,email = ? ,telephone = ? // , birthday = ?,sex = ? ,state = ? ,code = ? where uid = ? userDao.updateUser(user); return true; } else { // 不可以根据激活码查询到一个用户 return false; } } @Override public User userLogin(User user) throws SQLException { // 此处:可以利用异常在模块当中传递一些数据 // select * from user where username = ? and password =? User uu = userDao.userLogin(user); if (null == uu) { // 在这里抛出对应的异常让其在Servlet里面捕获到对应的异常,并反馈到对应的页面上去 throw new RuntimeException("密码有误!"); } else if (uu.getState() == 0) { throw new RuntimeException("用户未激活!"); } else { return uu; } }}
public class ProductServiceImpl implements ProductService { ProductDao productDao = (ProductDao) BeanFactory.createObject("ProductDao"); @Override public void saveProduct(Product product) throws Exception { productDao.saveProduct(product); } @Override public ListfindHots() throws Exception { // TODO Auto-generated method stub return productDao.findHots(); } @Override public List findNews() throws Exception { // TODO Auto-generated method stub return productDao.findNews(); } @Override public Product findProductByPid(String pid) throws Exception { // TODO Auto-generated method stub return productDao.findProductByPid(pid); } // 当点入分类信息的时候,默认cid就是1所以,当前页得到的就是第1页,而起始页经过计算得到的是1终止页得到的是3 @Override public PageModel findProductsByCidWithPage(String cid, int curNum) throws Exception { // 1、创建PageModel对象目的:计算分页参数 // 统计当前分类下商品的个数 select count(*) from product where cid=? int totalRecords = productDao.findTotalRecords(cid); PageModel pm = new PageModel(curNum, totalRecords, 12); // 2、关联集合 select * from product where cid = ? LIMIT ?,? List list = productDao.findProductsByCidWithPage(cid, pm.getStartIndex(), pm.getPageSize()); pm.setList(list); // 3、关联url pm.setUrl("ProductServlet?method=findProductsByCidWithPage&cid=" + cid); // 返回所有的分页数据以及对应的页码 System.out.println(pm); return pm; } @Override public PageModel findAllProductsWithPage(int curNum) throws Exception { // 计算数据库当中所有商品分类的个数 int totalRecords = productDao.findTotalRecords(); // 1、创建对象 PageModel pm = new PageModel(curNum, totalRecords, 5); // 2、关联集合select * from product limit ?,? List list = productDao.findAllProductsWithPage(pm.getStartIndex(), pm.getPageSize()); pm.setList(list); // 3、关联url pm.setUrl("AdminProductServlet?method=findAllProductsWithPage"); return pm; }}
转载地址:https://code100.blog.csdn.net/article/details/105322590 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月08日 03时12分54秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Lammps分子动力学与第一性原理材料模拟及催化
2019-04-29
实习生小白的日常
2019-04-29
实习小白的日常(3)
2019-04-29
实习小白的日常(4)
2019-04-29
APP页面布局参考
2019-04-29
linux 的 Socket IO 模型
2019-04-29
APP调用服务器API设计
2019-04-29
Opencv+Zbar二维码识别(标准条形码/二维码识别)
2019-04-29
zbar优化
2019-04-29
微信扫码登录验证PHP代码(不用开放平台)
2019-04-29
CH554E USB单片机 10引脚小封装低成本USB方案
2019-04-29
windows MQTT客户端
2019-04-29
LINUX下挂载(mount)查看树莓派镜像文件
2019-04-29
基于CH568芯片加密SD卡方案
2019-04-29
1元钱的超低成本单芯片USB单片机方案
2019-04-29
单片机/树莓派扩展双串口(TTL和RS485)
2019-04-29
JAVA(android)提取WIFI客流探针MAC地址源码
2019-04-29
基于CH568芯片的SATA电子盘方案
2019-04-29
linux下C语言判断网络是否连接
2019-04-29