Java全栈开发---Java ERP系统开发:商业ERP(四)通用工具类的抽取
发布日期:2021-06-29 15:02:52 浏览次数:2 分类:技术文章

本文共 12061 字,大约阅读时间需要 40 分钟。

一、通用工具类抽取

1、通用类的抽取思路分析

在这里插入图片描述

2、通用Dao抽取

(1)创建接口(在erp_dao下)

在这里插入图片描述

(2)把IDepDao里面所有的方法,都复制到IBaseDao里面去
package com.itzheng.erp.dao;import java.util.List;import com.itzheng.erp.entity.Dep;public interface IBaseDao {
public List
getList(); List
getList(Dep dep1, Dep dep2, Object param, int firstResult, int maxResults); long getCount(Dep dep1, Dep dep2, Object param); void add(Dep dep); public void delete(Long uuid); Dep get(Long uuid); void update(Dep dep);}
(3)IBaseDao上加上泛型支持IBaseDao
(4)替换所有的Dep为大写的T,dep替换为t
package com.itzheng.erp.dao;import java.util.List;import com.itzheng.erp.entity.Dep;public interface IBaseDao
{
public List
getList(); List
getList(T t1, T t2, Object param, int firstResult, int maxResults); long getCount(T t1, T t2, Object param); void add(T t); public void delete(Long uuid); T get(Long uuid); void update(T t);}
(5)删除接口IDepDao接口当中的方法,并继承IBaseDao
package com.itzheng.erp.dao;import java.util.List;import com.itzheng.erp.entity.Dep;public interface IDepDao extends IBaseDao
{
}
(6)创建BaseDao实现IBaseDao的接口:实现IBaseDao接口以及继承HibernateDaoSupport,将DepDao当中的复制到BaseDao当中,替换Dep为T将 dep 替换为t

在这里插入图片描述

修改对应的代码
定义entityClass属性
在这里插入图片描述
把T.class替换为entityClass
添加无参构造方法,在构造方法当中实现entityClass的具体类型
在这里插入图片描述

package com.itzheng.erp.dao.impl;import java.lang.reflect.ParameterizedType;import java.lang.reflect.Type;import java.util.List;import org.hibernate.criterion.DetachedCriteria;import org.hibernate.criterion.Projections;import org.springframework.orm.hibernate5.support.HibernateDaoSupport;import com.itzheng.erp.dao.IBaseDao;public class BaseDao
extends HibernateDaoSupport implements IBaseDao
{
private Class
entityClass; public BaseDao() {
// 通过子类来获取父类 Type baseDaoClass = getClass().getGenericSuperclass(); // 参数化的类型 ParameterizedType pType = (ParameterizedType) baseDaoClass; // 获取参数类型的数组 Type[] types = pType.getActualTypeArguments(); // 得到了泛型里T的类型 Type targetType = types[0]; // 转成class类型 entityClass = (Class
) targetType; } /* * 查询出所有的部门信息 */ @Override public List
getList() {
return (List
) this.getHibernateTemplate().find("from Dep"); } /* * 条件查询 */ @Override public List
getList(T t1, T t2, Object parme, int firstResult, int maxResults) { DetachedCriteria dc = getDetachedCriteria(t1); return (List
) this.getHibernateTemplate().findByCriteria(dc, firstResult, maxResults);// 添加条件之后再进行查询 } @Override public long getCount(T t1, T t2, Object parme) { DetachedCriteria dc = getDetachedCriteria(t1); dc.setProjection(Projections.rowCount());// 获取的是表中元素的个数 List
list = (List
) getHibernateTemplate().findByCriteria(dc); return list.get(0); } /* * 删除 */ public void delete(Long uuid) { T t = this.getHibernateTemplate().get(entityClass, uuid); // 删除持久化转态 this.getHibernateTemplate().delete(t); } /* * 由子类实现 */ public DetachedCriteria getDetachedCriteria(T t) { return null; } /* * */ @Override public void add(T t) { this.getHibernateTemplate().save(t); } /* * 通过编号查询对象 */ @Override public T get(Long uuid) { return getHibernateTemplate().get(entityClass, uuid); } /* * 更新 */ @Override public void update(T t) { this.getHibernateTemplate().update(t); }}

3、erp_biz当中的,业务层抽取

(1)在erp_biz下的biz当中创建接口(创建通用业务层的接口)

在这里插入图片描述

package com.itzheng.erp.biz;import java.util.List;public interface IBaseBiz
{
/* * 查询所有部门列表 */ List
getList(); /* * 条件查询 * */ List
getList(T t1, T t2, Object param, int firstResult, int maxResults); public long getCount(T t1, T t2, Object param); void add(T t); public void delete(Long uuid); public T get(Long uuid); void update(T t);}
(2)删除IDepBiz当中的方法,继承上面创建好的接口
package com.itzheng.erp.biz;import com.itzheng.erp.entity.Dep;/* * 部门业务接口 */public interface IDepBiz extends IBaseBiz
{
}
(3)创建BaseBiz实现类,将DepBiz(替换DepDao为BaseDao,depDao替换成baseDao,将Dep改写为T,将dep改写为t)
package com.itzheng.erp.biz.impl;import java.util.List;import com.itzheng.erp.biz.IBaseBiz;import com.itzheng.erp.dao.IBaseDao;import com.itzheng.erp.entity.Dep;public class BaseBiz
implements IBaseBiz
{
/* * 数据访问层的调用 */ private IBaseDao
baseDao; public void setBaseDao(IBaseDao
baseDao) {
this.baseDao = baseDao; } @Override public List
getList() {
// TODO Auto-generated method stub return baseDao.getList(); } @Override public List
getList(T t1, T t2, Object param, int firstResult, int maxResults) { return baseDao.getList(t1, t2, param, firstResult, maxResults); } @Override public long getCount(T t1, T t2, Object param) { return baseDao.getCount(t1, t2, param); } @Override public void add(T t) { System.out.println(t); baseDao.add(t); } @Override public void delete(Long uuid) { // TODO Auto-generated method stub baseDao.delete(uuid); } @Override public T get(Long uuid) { return baseDao.get(uuid); } @Override public void update(T t) { baseDao.update(t); }}
(4)在DepBiz当中继承BaseBiz实现IDepBiz
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 extends BaseBiz
implements IDepBiz {
/* * 数据访问层的调用 */ private IDepDao depDao; public void setDepDao(IDepDao depDao) {
this.depDao = depDao; super.setBaseDao(this.depDao); }}

4、抽取通用Action

(1)在erp_web当中创建,创建BaseAction

在这里插入图片描述

(2)将DepAction当中的所有方法都复制过来,替换DepBiz为BaseBiz,depBiz为baseBiz,替换Dep为T替换dep 为t
package com.itzheng.erp.action;import java.io.IOException;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.servlet.http.HttpServletResponse;import org.apache.struts2.ServletActionContext;import com.alibaba.fastjson.JSON;import com.itzheng.erp.biz.IBaseBiz;public class BaseAction
{
private IBaseBiz
baseBiz; public void setBaseBiz(IBaseBiz
baseBiz) {
this.baseBiz = baseBiz; } // 属性驱动:条件查询 private T t1; private T t2; private Object param; public Object getParam() {
return param; } public void setParam(Object param) {
this.param = param; } public T getT2() {
return t2; } public void setT2(T t2) {
this.t2 = t2; } public T getT1() {
return t1; } public void setT1(T t1) {
this.t1 = t1; } private int page;// 页码 private int rows;// 每页的记录数 public int getPage() {
return page; } public void setPage(int page) {
this.page = page; } public int getRows() {
return rows; } public void setRows(int rows) {
this.rows = rows; } // 条件查询 public void getList() {
System.out.println("页码:" + page + "记录数:" + rows); int firstResult = (page - 1) * rows; List
list = baseBiz.getList(t1, t2, param, firstResult, rows); long total = baseBiz.getCount(t1, t2, param);// 查询数据的条数 // 把部门列表转换为JSON字符串 // {
{total: total, rows:[]};} Map
mapData = new HashMap
(); mapData.put("total", total); mapData.put("rows", list); String listString = JSON.toJSONString(mapData); write(listString); } /* * 查询所有部门 */ public void list() { /* * 调用业务部门的业务,查询所有部门信息 */ List
list = baseBiz.getList(); // 把部门列表转换为JSON字符串 String listString = JSON.toJSONString(list); write(listString); } /* * 新增的修改 */ private T t; public T getT() { return t; } public void setT(T t) { this.t = t; } public void add() { // {"success":true,"message":""} // 返回前端的JSON数据 System.out.println(t + "------------------------------------"); Map
rtn = new HashMap
(); try { baseBiz.add(t); rtn.put("success", true); rtn.put("message", "新增成功"); } catch (Exception e) { e.printStackTrace(); rtn.put("success", false); rtn.put("message", "新增失败"); } // 向集合当中添加一部分数据,然后将map集合转换为JSON数据输出到页面上 write(JSON.toJSONString(rtn)); } /* * 删除 */ private long id; public long getId() { return id; } public void setId(long id) { this.id = id; } /** * 删除 * * @param jsonString */ public void delete() { try { baseBiz.delete(id); ajaxReturn(true, "删除成功"); } catch (Exception e) { e.printStackTrace(); ajaxReturn(false, "删除失败"); } } /* * 通过编号查询对象 */ public void get() { T t = baseBiz.get(id); String jsonString = JSON.toJSONString(t); System.out.println("转换前:" + jsonString); // 将JSON数据转换为MAP对象 // 转换为map对象 String jsonStringAfter = mapData(jsonString, "t"); System.out.println("转换后:" + jsonStringAfter); write(jsonStringAfter); } /* * 修改 */ public void update() { try { ajaxReturn(true, "更新成功"); baseBiz.update(t); } catch (Exception e) { // TODO: handle exception ajaxReturn(false, "更新失败"); e.printStackTrace(); } } // 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); } public void ajaxReturn(boolean success, String message) { // 返回前端的JSON数据 Map
rtn = new HashMap
(); rtn.put("success", success); rtn.put("message", message); write(JSON.toJSONString(rtn)); } public void write(String jsonString) { try { // 响应对象 HttpServletResponse response = ServletActionContext.getResponse(); response.setContentType("text/html;charset=utf-8"); // 输出给页面 response.getWriter().write(jsonString); System.out.println(jsonString); } catch (IOException e) { e.printStackTrace(); } }}
(3)改造DepAction
package com.itzheng.erp.action;import java.io.IOException;import java.util.HashMap;import java.util.List;import java.util.Map;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 extends BaseAction
{
private IDepBiz depBiz; public void setDepBiz(IDepBiz depBiz) {
this.depBiz = depBiz; super.setBaseBiz(this.depBiz); }}

5、抽取前端的(js代码封装)

在webapp下新建立一个js文件夹

在这里插入图片描述
在这里插入图片描述
在js文件夹下创建一个crud.js的文件
在这里插入图片描述
crud.js当中的内容,把dep.html里面的内容都复制到crud.js当中,将里面'dep替换为name+'_

//提交的方法var method = "";$(function() {
$('#grid').datagrid({
url : name + '_getList', columns : columns, singleSelect : true, pagination : true, toolbar : [ {
text : '新增', iconCls : 'icon-add', handler : function() {
method = "add"; $('#editDlg').dialog('open'); } } ] }); $('#btnSearch').bind('click', function() {
// 把表单数据转换成json对象 var formData = $('#searchForm').serializeJSON(); $('#grid').datagrid('load', formData); }); $('#editDlg').dialog({
title : '部门编辑', width : 300, height : 200, closed : true,// 窗口是是否为关闭状态, true:表示关闭 modal : true // 模式窗口 }); $('#btnSave').bind('click', function() {
var formData = $('#editForm').serializeJSON(); $.ajax({
url : name + '_' + method, data : formData, dataType : 'json', type : 'post', success : function(rtn) {
$.messager.alert("提示", rtn.message, 'info', function() {
// 成功的话,我们要关闭窗口 $('#editDlg').dialog('close'); // 刷新表格数据 $('#grid').datagrid('reload'); }); } }); });});/** * 删除部门 */function del(uuid) {
$.messager.confirm("确认", "确认要删除吗?", function(yes) {
if (yes) {
$.ajax({
url : name + '_delete?id=' + uuid, dataType : 'json', type : 'post', success : function(rtn) {
$.messager.alert("提示", rtn.message, 'info', function() {
// 刷新表格数据 $('#grid').datagrid('reload'); }); } }); } });}/** * 修改部门 */function edit(uuid) {
// 弹出窗口 $('#editDlg').dialog('open'); // 清空表单内容 $('#editForm').form('clear'); method = "update"; // 加载数据 $('#editForm').form('load', name + '_get?id=' + uuid);}

dep.html里面先定义name=“dep”,colums=[];因为他们是具体某个实体类的私有内容

在这里插入图片描述

6、Dep.html修改

部门管理
名称
电话
部门名称
部门电话

7、测试访问成功

在这里插入图片描述

转载地址:https://code100.blog.csdn.net/article/details/109130159 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Java全栈开发---Java ERP系统开发:商业ERP(五)员工管理的完善
下一篇:Java全栈开发---Java ERP系统开发:商业ERP(三)部门管理(增删改查)

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年04月12日 05时42分12秒