ERP项目笔记-Day02

今日任务:条件查询+实现分页功能+部门表的增删改查

 

01:条件查询:

需求分析:条件查询是我们最基本的功能,在表查询的时候,一般都是需要的。

在做条件查询的时候,我们首先想到的是sql插叙你语句的拼接,这是最笨的方法,使用起来很不方便,所以我们一般做条件查询的时候,都采用离线查询的方式,QBC查询。从前台,使用属性驱动的方式传数据到后台。

关于条件查询的流程图如下:(解析:先从前端哪部分,我们采用的是属性驱动的方法,需要传到后台的数据命名都是属性的名,然后点击查询,就将数据传给后台,然后后台进行各层的调用,最后到Dao层,然后在Dao层进行数据处理,处理完了以后将数据返回给页面,返回的是JOSN字符串的格式,最后前台再去做数据处理,因为我们前端采用的是esayUI的技术,想要将数据渲成表格的形式,就需要得到的是JSON的格式。)

 

 

静态页面

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>部门管理</title>
<link rel="stylesheet" type="text/css" href="ui/themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="ui/themes/icon.css">
<script type="text/javascript" src="ui/jquery.min.js"></script>
<script type="text/javascript" src="ui/jquery.easyui.min.js"></script>
<script type="text/javascript" src="ui/locale/easyui-lang-zh_CN.js"></script>
<script type="text/javascript" src="ui/jquery.serializejson.min.js"></script>

<script type="text/javascript">
var method="";
 $(function(){
      //使用数据表格的方式在页面上显示json格式的数据
	$('#grid').datagrid({    
	    url:'dep_getList', 
	    striped:true,
	    //每次只能选中一行,默认为false
	    singleSelect:true,
	    //显示分页的工具栏
	    pagination:true,
	    columns:[[    
	        {field:'uuid',title:'部门编号',width:100},    
	        {field:'name',title:'部门名称',width:100},    
	        {field:'tele',title:'部门联系电话',width:100,align:'right'},
	        {field:'-',title:'操作',width:150,align:'right',formatter: function(value,row,index){
	        		var oper='<a href="javascript:void(0)" onclick="edit(' + row.uuid+ ')">修改</a>';
	        		oper +=' ||<a href="javascript:void(0)" onclick="del(' + row.uuid+ ')">删除</a>';
					return oper;
	          }		
		    }
	    ]],
	    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);
   	 //  alert(JSON.stringify(formData));
   	 /* 其实上边的load方法,就是加载下边ajax,下边我们给指定了一个url。而上边的没有指定url,就用原来的url。
   	 $.ajax({
   		   url:'dep_getList',
   		   data:formData,
   		   dataType:'json',
   		   type:'post',
   		   success:function(rtn){
   			   //加载数据
   			   //datagrid(参数1,参数2)是方法,里边有两个参数,参数一是我们的方法名称,
   			   $('#grid').datagrid('loadData',rtn);
   		   }
   	   });
   	   **/
      });
      $('#editDlg').dialog({    
  	    title: '部门编辑',    
  	    width: 300,    
  	    height: 200,    
  	    closed: true,   //初始化窗口是否为关闭 
  	    modal: true   
    	}); 
      $('#btnSave').bind('click',function(){
   	   var formData= $('#editForm').serializeJSON();
   	   $.ajax({
   		   url: 'dep_'+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(ok){
	  if(ok){
		  $.ajax({
    		   url: 'dep_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','dep_get?id='+uuid);
 }
	 
  
	 
</script>
</head>
<body>
<div class="easyui-panel" style="padding-left:4px;border-bottom:0 px;">
<div style="height:2px;"></div>
<form id="searchForm">
	<table>
		<tr> 
			<td>部门名称</td>
			<td><input name="dep1.name"></td>
		</tr>
		<tr> 
			<td>部门电话</td>
			<td><input name="dep1.tele"></td>
		</tr>
	</table>
	<button type="button" id="btnSearch">查询</button>
</form>
<div style="height:2px;"></div>
</div>
<table id="grid"></table>
<div id="editDlg">
	<form id="editForm">
		<table>
		<tr>  
			<td>部门名称</td>
			<td><input name="dep.name"><input type="hidden" name="dep.uuid"/></td>
		</tr>
		<tr> 
			<td>部门电话</td>
			<td><input name="dep.tele"></td>
		</tr>
	</table>
	<button type="button" id="btnSave">保存</button>
	</form>
</div>
</body>
</html>

web层代码:

package com.angus.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.angus.erp.biz.IDepBiz;
import com.angus.erp.entity.Dep;

/**
 * 部门action
 * 
 * @author DELL
 *
 */
public class DepAction {

	private IDepBiz depBiz;

	public void setDepBiz(IDepBiz depBiz) {
		this.depBiz = depBiz;
	}

	private Dep dep;

	public Dep getDep() {
		return dep;
	}

	public void setDep(Dep dep) {
		this.dep = dep;
	}

	// 属性驱动:条件查询
	private Dep dep1;
	private Dep dep2;
	private Object param;

	public Dep getDep1() {
		return dep1;
	}

	public void setDep1(Dep dep1) {
		this.dep1 = dep1;
	}
	
	public Dep getDep2() {
		return dep2;
	}

	public void setDep2(Dep dep2) {
		this.dep2 = dep2;
	}

	public Object getParam() {
		return param;
	}

	public void setParam(Object param) {
		this.param = param;
	}

	//分页查询
	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;
	}

	/**
	 * 查询所有部门的方法 并使用fastJson将查询到的数据转成json格式
	 */
	public void list() {
		// 调用部门的业务查询所有的部门信息
		List<Dep> list = depBiz.getList();
		// 把部门列表转换成Json格式
		String listString = JSON.toJSONString(list);
		write(listString);
	}

	/** 部门表的条件查询 **/
	public void getList() {
		int firstResult=(page-1)*rows;
		
		List<Dep> list = depBiz.getList(dep1,dep2,param,firstResult,rows);
		long total=depBiz.getCount(dep1,dep2,param);
		
		Map<String,Object> mapData=new HashMap<String,Object>();
	
		mapData.put("total", total);
		mapData.put("rows", list);
		
		// 把部门列表转换成Json格式
		String listString = JSON.toJSONString(mapData);
		write(listString);
	}
	/**新增方法**/
	public void add() {
		//{"success":true,"message":""}
		//返回前端的JSON数据
		Map<String,Object> rtn=new HashMap<String,Object>();
		try {
			depBiz.add(dep);
			ajaxReturn(true, "添加成功");
		} catch (Exception e) {
			e.printStackTrace();
			ajaxReturn(false, "添加失败");
		}
		
	}
	
	private long id;
	
     public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}
	/**删除**/
	public void delete() {
		try {
			depBiz.delete(id);
			ajaxReturn(true, "删除成功");
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			ajaxReturn(false, "删除失败");
		}
	}
	/**根据编号查询用作数据回显**/
	public void get() {
		Dep dep=depBiz.get(id);
		String jsonString=JSON.toJSONString(dep);
		//{"name":"吃货部","tele":"1245","uuid":17}
		String jsonStringAfter=mapData(jsonString,"dep");
		
		write(jsonStringAfter);
		
	}
	/**修改部门数据**/
	public void update() {
		
		try {
			depBiz.update(dep);
			ajaxReturn(true, "修改成功");
		} catch (Exception e) {
			e.printStackTrace();
			ajaxReturn(false, "修改失败");
		}
	}
	/**这个方法的作用是在json字符串的key上加上前缀,方便我们的前天数据的回显**/
	/** jsonString 是字符串  prefix 是前缀**/
	public String mapData(String jsonString,String prefix ) {
		Map<String,Object> map=JSON.parseObject(jsonString);
		//存储加上前缀的Key值
		Map<String,Object> dataMap=new HashMap<String,Object>();
		//给每个Key值加上前缀
		for(String key : map.keySet()) {
			dataMap.put(prefix+"."+key, map.get(key));
		}
		return JSON.toJSONString(dataMap);
	}
	/**相同代码的抽取**/
	public void write(String jsonString) {
		try {
			// 相应对象
			HttpServletResponse response = ServletActionContext.getResponse();
			response.setContentType("text/html;charset=utf-8");

			// 将json格式的数据输出给页面
			response.getWriter().write(jsonString);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	/**相同代码的抽取,向页面写数据**/
	public void  ajaxReturn(boolean success,String message) {
		Map<String,Object> rtn=new HashMap<String,Object>();
			rtn.put("success", success);
			rtn.put("message", message);
			write(JSON.toJSONString(rtn));
	}
}

业务层代码:

package com.angus.erp.biz.impl;

/**
 * 查询所有部门的实现类
 */
import java.util.List;

import com.angus.erp.biz.IDepBiz;
import com.angus.erp.dao.IDepDao;
import com.angus.erp.entity.Dep;

public class DepBiz implements IDepBiz {
	 
	private IDepDao depDao;
	
	public void setDepDao(IDepDao depDao) {
		this.depDao = depDao;
	}
	
	@Override
	public List<Dep> getList() {
		return depDao.getList();
	}
	/**分页查询**/
	@Override
	public List<Dep> 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);
	}
	/**新增**/
	@Override
	public void add(Dep dep) {
		depDao.add(dep);
	}
	/**删除**/
	@Override
	public void delete(Long uuid) {
		depDao.delete(uuid);
	}
	/**根据编号查询用作修改的数据回显**/
	@Override
	public Dep get(Long uuid) {
		return depDao.get(uuid);
	}
	/**更新部门数据**/
	@Override
	public void update(Dep dep) {
		depDao.update(dep);
	}
	


}

 

dao层代码:

package com.angus.erp.dao.impl;
/**
 * 部门数据访问
 */
import java.util.List;

import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;

import com.angus.erp.dao.IDepDao;
import com.angus.erp.entity.Dep;

public class DepDao extends HibernateDaoSupport implements IDepDao {

	/** 查询出所有的部门信息**/
	@Override
	public List<Dep> getList() {
		return (List<Dep>) this.getHibernateTemplate().find("from Dep");
	}

	@Override
	/**部门表的条查询**/
	public List<Dep> getList(Dep dep1,Dep dep2,Object param,int firstResult,int maxResults) {
		DetachedCriteria dc=getDetachedCriteriaDep(dep1);
		return (List<Dep>) this.getHibernateTemplate().findByCriteria(dc,firstResult,maxResults);
	}
	/**查询部门表的总的数据数得到count**/
	@Override
	public long getCount(Dep dep1,Dep dep2,Object param) {
		DetachedCriteria dc=getDetachedCriteriaDep(dep1);
		dc.setProjection(Projections.rowCount());
		List<Long> list=(List<Long>)getHibernateTemplate().findByCriteria(dc);
		return list.get(0);
	}
	/**关于查询时的相同代码的抽取**/
	private DetachedCriteria getDetachedCriteriaDep(Dep dep1) {
		DetachedCriteria dc=DetachedCriteria.forClass(Dep.class);
		if(null!=dep1) {
			//判断是否输入了部门名称,并且判断去掉空格以后的长度大于0
			if(null!=dep1.getName()&&dep1.getName().trim().length()>0) {
				//MatchMode.ANYWHERE 相当于是   % %
				//MatchMode.END  相当于是  % name 以什么什么结尾的模糊查询
				//MatchMode.START 相当于是以什么开始的迷糊查询
				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;
	}

	@Override
	public void add(Dep dep) {
		this.getHibernateTemplate().save(dep);
	}
	/**删除的方法**/
	@Override
	public void delete(Long uuid) {
		//让对象进入持久化状态
		Dep dep=this.getHibernateTemplate().get(Dep.class, uuid);
		getHibernateTemplate().delete(dep);
	}
	/**通过编号进行修改**/
	@Override
	public Dep get(Long uuid) {
		
		return getHibernateTemplate().get(Dep.class, uuid);
	}
	/**更新部门数据**/
	@Override
	public void update(Dep dep) {
		this.getHibernateTemplate().update(dep);
	}
	
}

第一天知识点总结:

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值