Java全栈开发---Java ERP系统开发:商业ERP(三)部门管理(增删改查)
发布日期:2021-06-29 15:02:51
浏览次数:2
分类:技术文章
本文共 14684 字,大约阅读时间需要 48 分钟。
九、条件查询
(一)条件查询分析:动态组合条件查询
1、伪代码分析
if(如果输入部门名称){ 过滤部门名称}if(如果输入部门电话){ 过滤部门电话}
动态组合条件查询。表格上有查询表单,输入部门名称,部门电话进行条件查询,如果同时输入条件侧全部进行查询
HQL编写伪代码
(二)后端代码的编写
1、在erp_dao下的IDepDao当中创建接口
package com.itzheng.erp.dao;import java.util.List;import com.itzheng.erp.entity.Dep;public interface IDepDao { public ListgetList(); List getList(Dep dep1);}
2、在DepDao实现类当中
package com.itzheng.erp.dao.impl;import java.util.List;import org.hibernate.criterion.DetachedCriteria;import org.hibernate.criterion.MatchMode;import org.hibernate.criterion.Restrictions;import org.springframework.orm.hibernate5.support.HibernateDaoSupport;import com.itzheng.erp.dao.IDepDao;import com.itzheng.erp.entity.Dep;/* * 部门的数据访问权限 */public class DepDao extends HibernateDaoSupport implements IDepDao { /* * 查询出所有的部门信息 */ @Override public ListgetList() { return (List ) this.getHibernateTemplate().find("from Dep"); } /* * 条件查询 */ @Override public List getList(Dep dep1) { DetachedCriteria dc = DetachedCriteria.forClass(Dep.class);// 条件,如果满足下面的判断就,添加相应的条件 if (null != dep1) { // 判断传入Dep的条件是否为空 // 是否输入部门名称 if (null != dep1.getName() && dep1.getName().trim().length() > 0) { // 判断名称不为空的情况下 // MatchMode.ANYWHERE => % % // MatchMode.END => %name // MatchMode.START => name% // 如果输入了部门名称 dc.add(Restrictions.like("name", dep1.getName(), MatchMode.ANYWHERE));// 通过模糊查询 } } // 是否输入了部门的电话 if (null != dep1) { // 是否输入部门名称 if (null != dep1.getTele() && dep1.getTele().trim().length() > 0) { // 不为空的情况下 dc.add(Restrictions.like("tele", dep1.getTele(), MatchMode.ANYWHERE));// 通过模糊查询 } } return (List ) this.getHibernateTemplate().findByCriteria(dc);// 添加条件之后再进行查询 }}
3、在erp_biz下的IDepBiz当中创建接口
package com.itzheng.erp.biz;import java.util.List;import com.itzheng.erp.entity.Dep;/* * 部门业务接口 */public interface IDepBiz { /* * 查询所有部门列表 */ ListgetList(); /* * 条件查询 */ List getList(Dep dep1);}
4、DepBiz当中实现对应的接口的内容
package com.itzheng.erp.biz.impl;import java.util.List;import com.itzheng.erp.biz.IDepBiz;import com.itzheng.erp.dao.IDepDao;import com.itzheng.erp.entity.Dep;/* * 部门业务实现 */public class DepBiz implements IDepBiz { /* * 数据访问层的调用 */ private IDepDao depDao; public void setDepDao(IDepDao depDao) { this.depDao = depDao; } @Override public ListgetList() { // TODO Auto-generated method stub return depDao.getList(); } @Override public List getList(Dep dep1) { // TODO Auto-generated method stub return depDao.getList(dep1); }}
5、在erp_web下的DeptAction当中
package com.itzheng.erp.action;import java.io.IOException;import java.util.List;import javax.servlet.http.HttpServletResponse;import org.apache.struts2.ServletActionContext;import com.alibaba.fastjson.JSON;import com.itzheng.erp.biz.IDepBiz;import com.itzheng.erp.entity.Dep;/* * 部门Action */public class DeptAction { private IDepBiz depBiz; public void setDepBiz(IDepBiz depBiz) { this.depBiz = depBiz; } // 属性驱动:条件查询 private Dep dep1; public Dep getDep1() { return dep1; } public void setDep1(Dep dep1) { this.dep1 = dep1; } //条件查询 public void getList() { Listlist = depBiz.getList(dep1); // 把部门列表转换为JSON字符串 String listString = JSON.toJSONString(list); try { // 响应对象 HttpServletResponse response = ServletActionContext.getResponse(); response.setContentType("text/html;charset=utf-8"); // 输出给页面 response.getWriter().write(listString); System.out.println(listString); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /* * 查询所有部门 */ public void list() { /* * 调用业务部门的业务,查询所有部门信息 */ List list = depBiz.getList(); // 把部门列表转换为JSON字符串 String listString = JSON.toJSONString(list); try { // 响应对象 HttpServletResponse response = ServletActionContext.getResponse(); response.setContentType("text/html;charset=utf-8"); // 输出给页面 response.getWriter().write(listString); System.out.println(listString); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}
6、测试运行发现错误,编码格式有错误,需要在Maven当中自带的Tomcat当中设置编码格式
再次运行模糊查询匹配成功(三)前端代码的编写
复制到ui文件下
1、在webapp下的webapp下面的dep.html当中
在dep.html当中先引入上面的js然后编写前端代码
全部代码
部门管理
2、运行测试
条件查询成功
十、分页查询
1、在erp_web下的 applicationContext_action.xml当中的修改为多例模式
2、在DeptAction当中设置接收页码和行数对应的值,生成set和get方法
3、修改dao层当中getList方法
4、修改dao接口
package com.itzheng.erp.dao;import java.util.List;import com.itzheng.erp.entity.Dep;public interface IDepDao { public ListgetList(); /* * 条件查询 查询所有部门信息 */ List getList(Dep dep1, int firstResult, int maxResults);}
5、修改erp_biz当中对应的接口和实现类
package com.itzheng.erp.biz;import java.util.List;import com.itzheng.erp.entity.Dep;/* * 部门业务接口 */public interface IDepBiz { /* * 查询所有部门列表 */ ListgetList(); /* * 条件查询 */ List getList(Dep dep1, int firstResult, int maxResults);}
package com.itzheng.erp.biz.impl;import java.util.List;import com.itzheng.erp.biz.IDepBiz;import com.itzheng.erp.dao.IDepDao;import com.itzheng.erp.entity.Dep;/* * 部门业务实现 */public class DepBiz implements IDepBiz { /* * 数据访问层的调用 */ private IDepDao depDao; public void setDepDao(IDepDao depDao) { this.depDao = depDao; } @Override public ListgetList() { // TODO Auto-generated method stub return depDao.getList(); } @Override public List getList(Dep dep1, int firstResult, int maxResults) { // TODO Auto-generated method stub return depDao.getList(dep1, firstResult, maxResults); }}
6、修改DeptAction
7、修改IDepDao接口当中的内容
8、修改DepDao
@Overridepublic long getCount(Dep dep1) { /* * 记录条件查询的记录数 */ DetachedCriteria dc = DetachedCriteria.forClass(Dep.class);// 条件,如果满足下面的判断就,添加相应的条件 if (null != dep1) { // 判断传入Dep的条件是否为空 // 是否输入部门名称 if (null != dep1.getName() && dep1.getName().trim().length() > 0) { // 判断名称不为空的情况下 // MatchMode.ANYWHERE => % % // MatchMode.END => %name // MatchMode.START => name% // 如果输入了部门名称 dc.add(Restrictions.like("name", dep1.getName(), MatchMode.ANYWHERE));// 通过模糊查询 } } // 是否输入了部门的电话 if (null != dep1) { // 是否输入部门名称 if (null != dep1.getTele() && dep1.getTele().trim().length() > 0) { // 不为空的情况下 dc.add(Restrictions.like("tele", dep1.getTele(), MatchMode.ANYWHERE));// 通过模糊查询 } } dc.setProjection(Projections.rowCount()); return (long) getHibernateTemplate().findByCriteria(dc).get(0);}
9、DepDao当中创建方法
@Override public long getCount(Dep dep1) { /* * 记录条件查询的记录数 */ DetachedCriteria dc = DetachedCriteria.forClass(Dep.class);// 条件,如果满足下面的判断就,添加相应的条件 if (null != dep1) { // 判断传入Dep的条件是否为空 // 是否输入部门名称 if (null != dep1.getName() && dep1.getName().trim().length() > 0) { // 判断名称不为空的情况下 // MatchMode.ANYWHERE => % % // MatchMode.END => %name // MatchMode.START => name% // 如果输入了部门名称 dc.add(Restrictions.like("name", dep1.getName(), MatchMode.ANYWHERE));// 通过模糊查询 } } // 是否输入了部门的电话 if (null != dep1) { // 是否输入部门名称 if (null != dep1.getTele() && dep1.getTele().trim().length() > 0) { // 不为空的情况下 dc.add(Restrictions.like("tele", dep1.getTele(), MatchMode.ANYWHERE));// 通过模糊查询 } } dc.setProjection(Projections.rowCount()); Listlist = (List ) getHibernateTemplate().findByCriteria(dc); return list.get(0); }
10、在erp_dao当中的DepDao当中创建接口
对应接口的实现类当中DepDao
@Override public long getCount(Dep dep1) { /* * 记录条件查询的记录数 */ DetachedCriteria dc = DetachedCriteria.forClass(Dep.class);// 条件,如果满足下面的判断就,添加相应的条件 if (null != dep1) { // 判断传入Dep的条件是否为空 // 是否输入部门名称 if (null != dep1.getName() && dep1.getName().trim().length() > 0) { // 判断名称不为空的情况下 // MatchMode.ANYWHERE => % % // MatchMode.END => %name // MatchMode.START => name% // 如果输入了部门名称 dc.add(Restrictions.like("name", dep1.getName(), MatchMode.ANYWHERE));// 通过模糊查询 } } // 是否输入了部门的电话 if (null != dep1) { // 是否输入部门名称 if (null != dep1.getTele() && dep1.getTele().trim().length() > 0) { // 不为空的情况下 dc.add(Restrictions.like("tele", dep1.getTele(), MatchMode.ANYWHERE));// 通过模糊查询 } } dc.setProjection(Projections.rowCount()); Listlist = (List ) getHibernateTemplate().findByCriteria(dc); return list.get(0); }
11、在DepBiz当中的(Dep dep1)
12、DepAction当中
// 条件查询 public void getList() { System.out.println("页码:" + page + "记录数:" + rows); int firstResult = (page - 1) * rows; Listlist = depBiz.getList(dep1, firstResult, rows); long total = depBiz.getCount(dep1);// 查询数据的条数 // 把部门列表转换为JSON字符串 // { {total: total, rows:[]};} Map mapData = new HashMap (); mapData.put("total", total); mapData.put("rows", list); String listString = JSON.toJSONString(mapData); write(listString); }
十一、查询的优化
1、创建一个方法返回值为DetachedCriteria(抽取公共方法)在DepDao当中
package com.itzheng.erp.dao.impl;import java.util.List;import org.hibernate.criterion.DetachedCriteria;import org.hibernate.criterion.MatchMode;import org.hibernate.criterion.Projection;import org.hibernate.criterion.Projections;import org.hibernate.criterion.Restrictions;import org.springframework.orm.hibernate5.support.HibernateDaoSupport;import com.itzheng.erp.dao.IDepDao;import com.itzheng.erp.entity.Dep;/* * 部门的数据访问权限 */public class DepDao extends HibernateDaoSupport implements IDepDao { /* * 查询出所有的部门信息 */ @Override public ListgetList() { return (List ) this.getHibernateTemplate().find("from Dep"); } /* * 条件查询 */ @Override public List getList(Dep dep1, int firstResult, int maxResults) { DetachedCriteria dc = getDetachedCriteria(dep1); return (List ) this.getHibernateTemplate().findByCriteria(dc, firstResult, maxResults);// 添加条件之后再进行查询 } @Override public long getCount(Dep dep1) { DetachedCriteria dc = getDetachedCriteria(dep1); dc.setProjection(Projections.rowCount());// 获取的是表中元素的个数 List list = (List ) getHibernateTemplate().findByCriteria(dc); return list.get(0); } private DetachedCriteria getDetachedCriteria(Dep dep1) { /* * 记录条件查询的记录数 */ DetachedCriteria dc = DetachedCriteria.forClass(Dep.class);// 条件,如果满足下面的判断就,添加相应的条件 if (null != dep1) { // 判断传入Dep的条件是否为空 // 是否输入部门名称 if (null != dep1.getName() && dep1.getName().trim().length() > 0) { // 判断名称不为空的情况下 // MatchMode.ANYWHERE => % % // MatchMode.END => %name // MatchMode.START => name% // 如果输入了部门名称 dc.add(Restrictions.like("name", dep1.getName(), MatchMode.ANYWHERE));// 通过模糊查询 } if (null != dep1.getTele() && dep1.getTele().trim().length() > 0) { // 不为空的情况下 dc.add(Restrictions.like("tele", dep1.getTele(), MatchMode.ANYWHERE));// 通过模糊查询 } } return dc; }}
2、如果在页面上需要多添加一列内容的时候,直接在对应的方法上设置对应的内容,在DepDao当中
(1)先在实现类上
(2)在对应的接口上,在DepDao当中
package com.itzheng.erp.dao;import java.util.List;import com.itzheng.erp.entity.Dep;public interface IDepDao { public ListgetList(); /* * 条件查询 查询所有部门信息 */ List getList(Dep dep1, Dep dep2, Object param, int firstResult, int maxResults); long getCount(Dep dep1, Dep dep2, Object param);}
3、在IDepBiz当中的(erp_biz当中)
(1)修改接口的方法
package com.itzheng.erp.biz;import java.util.List;import com.itzheng.erp.entity.Dep;/* * 部门业务接口 */public interface IDepBiz { /* * 查询所有部门列表 */ ListgetList(); /* * 条件查询 * */ List getList(Dep dep1, Dep dep2, Object param, int firstResult, int maxResults); public long getCount(Dep dep1, Dep dep2, Object param);}
(2)修改对应的实现类DepBiz
package com.itzheng.erp.biz.impl;import java.util.List;import com.itzheng.erp.biz.IDepBiz;import com.itzheng.erp.dao.IDepDao;import com.itzheng.erp.entity.Dep;/* * 部门业务实现 */public class DepBiz implements IDepBiz { /* * 数据访问层的调用 */ private IDepDao depDao; public void setDepDao(IDepDao depDao) { this.depDao = depDao; } @Override public ListgetList() { // TODO Auto-generated method stub return depDao.getList(); } @Override public List getList(Dep dep1, Dep dep2, Object param, int firstResult, int maxResults) { return depDao.getList(dep1, dep2, param, firstResult, maxResults); } @Override public long getCount(Dep dep1, Dep dep2, Object param) { return depDao.getCount(dep1, dep2, param); }}
4、在erp_web下的DepAction,当中创建两个查询属性、
并生成get和set方法
十二、实现增加部门功能,要求使用弹出窗口无刷新效果实现
1、 配置主键生成策略
(1)IDepDao
(2)在实现类当中
@Overridepublic void add(Dep dep) { this.getHibernateTemplate().save(dep);}
2、 对应的映射文件:在erp_entity当中的Dep.hbm.xml
3、 在erp_biz当中的IDepBiz
void add(Dep dep);
4、 在erp_biz当中的DepBiz实现类当中,调用接口当中的add方法
5、 在DeptAction当中增加add方法
public void add() { // {"success":true,"message":""} Maprtn = new HashMap (); try { depBiz.add(dep); rtn.put("success", true); rtn.put("message", "新增成功"); } catch (Exception e) { e.printStackTrace(); rtn.put("success", false); rtn.put("message", "新增失败"); } write(JSON.toJSONString(rtn)); }
十三、新增部门前端
部门管理
十四、删除部门
1、删除部门的前端页面
2、删除部门的后端实现
(1) 在erp_dao当中的DepDao类当中设置删除方法
(2) 在erp_dao当中的IDepDao类当中设置删除方法
(3)在业务层当中的dao当中
(4)在业务层当中的dao当中的实现类当中
调用对应的dao层的delete方法
3、在DepAction当中,设置删除的方法
4、测试运行代码
删除成功十五、修改部门
(一)实现加载修改数据
1、前端页面的实现(在erp_web下的dep.html)
2、在erp_dao的
(1)当中创建接口DepDao
(2)在对应的接口当中实现接口当中定义的get方法
3、在erp_biz当中
(1)实现对应的IDepBiz
(2)实现对应的IDepBiz接口
4、在DepAction当中:设置修改的方法,并设置对应字符串的转换方法
/* * 通过编号查询对象 */ public void get() { Dep dep = depBiz.get(id); String jsonString = JSON.toJSONString(dep); System.out.println("转换前:" + jsonString); // 将JSON数据转换为MAP对象 // 转换为map对象 String jsonStringAfter = mapData(jsonString, "dep"); System.out.println("转换后:" + jsonStringAfter); write(jsonStringAfter); } // JSON 数据字符串 // 要加上的前缀 public String mapData(String jsonString, String prefix) { Mapmap = JSON.parseObject(jsonString); // 存储key加上前缀后的值 Map dataMap = new HashMap (); // 给每个key值加上前缀 for (String key : map.keySet()) { dataMap.put(prefix + "." + key, map.get(key)); } return JSON.toJSONString(dataMap); }
5、点击修改对应信息,将信息查询出来显示到弹框当中
(二)修改部门(也就是更新数据)
1、在IDepDao当中声明接口
2、在实现类当中实现对应的接口
3、在IDepBiz当中设置接口
4、对应的实现类调用对应的到层
5、在DepAction当中设置对应更新的方法
6、修改dep.html页面
更新成功转载地址:https://code100.blog.csdn.net/article/details/108974875 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
不错!
[***.144.177.141]2024年04月30日 07时42分24秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
el-table 二维数组合并行
2019-04-29
UR5e机械臂运行一直阻塞在waitForServer
2019-04-29
ROS把pkg1下的某个头文件和源文件生成动态链接库供pkg2调用
2019-04-29
使用urdf_tutorial快速可视化urdf文件
2019-04-29
SQl 数据完整性(随堂博客)
2019-04-29
左连接、右连接、内连接
2019-04-29
MySQL DQL语句基础(随堂博客)
2019-04-29
利用MySQL进行数据复杂查询(1)
2019-04-29
MySQL 表与表之间的关系
2019-04-29
pymysql 的基础应用
2019-04-29
Python 管理程序改进——连接MYSQL
2019-04-29
Python 爬虫-豆瓣影星图片下载
2019-04-29
网页端数据库操作界面—主题函数文件
2019-04-29
网页端数据库操作界面-Html页面(1)
2019-04-29
Python爬虫 百度热搜热点
2019-04-29
excel的常用函数(二)
2019-04-29
excel文本函数
2019-04-29
电商大战二十年
2019-04-29