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 List
getList(); 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 List
getList() {
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 {
/* * 查询所有部门列表 */ List
getList(); /* * 条件查询 */ 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 List
getList() {
// 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() {
List
list = 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 List
getList(); /* * 条件查询 查询所有部门信息 */ 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 {
/* * 查询所有部门列表 */ List
getList(); /* * 条件查询 */ 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 List
getList() {
// 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()); List
list = (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()); List
list = (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; List
list = 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 List
getList() {
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 List
getList(); /* * 条件查询 查询所有部门信息 */ 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 {
/* * 查询所有部门列表 */ List
getList(); /* * 条件查询 * */ 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 List
getList() {
// 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":""} Map
rtn = 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) {
Map
map = 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Java全栈开发---Java ERP系统开发:商业ERP(四)通用工具类的抽取
下一篇:Java全栈开发---Java ERP系统开发:商业ERP(二)数据库的建立,以及项目的搭建

发表评论

最新留言

不错!
[***.144.177.141]2024年04月30日 07时42分24秒