晨魅--简单的部门维护操作练习
开发工具:JDK1.7,Eclipse5.7,Tomcat1.7
框架:spring和struts2框架,还有封装的JDBC
数据库结构:
部门编号:“BM”+流水号(4位) 如BM0001 主键
部门名称:varchar(50)
部门联系方式:varchar(50)
流水号:int(不可以自增长,程序维护)
部门登录口令:varchar(100)MD5 加密
界面:
部门新增
部门编号:只读不可编辑
部门名称:
部门联系方式
流水号:只读不可编辑
部门登录口令
部门列表:
查询:部门名称、部门联系方式(模糊查询)
功能:新增、修改、删除
列表显示:流水号、部门名称、部门联系方式、部门编号
我的项目的目录结构:

报错的部分是极简版的js文件,没有格式,Eclipse无法识别,不影响程序运行。
主要操作com.hymange.web.member包下的类,上面都是封装好的方法不需要动。包下面是日志,JDBC和Struts的一些配置文件,主要操作Struts-web.xml配置文件,其它也不需要动。在WebContent目录下是封装好的页面框架和一些页面样式,也不用动。在WEB-INF目录下,classes是编译文件,jsp目录是放页面的,lib目录下放jar包,web.xml是配置文件,index.jsp是在浏览器中访问程序时进的第一个页面,这里没有写登录,直接把这个页面跳过了。
接下来写配置文件
web.xml配置文件:
webAppRootKey /HY_Mange contextConfigLocation classpath*:application*.xml log4jConfigLocation classpath:log4j.properties log4jRefreshInterval 60000 30 pic com.hymange.common.utils.IdenImageServlet pic /pic download com.hymange.common.utils.ServletDownload download /download org.springframework.web.context.ContextLoaderListener org.springframework.web.util.Log4jConfigListener struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter struts2 /* characterEncodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 forceEncoding true characterEncodingFilter /* index.jsp
因为没写登录,在index.jsp里只是一个跳转
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
applicationContext.xml配置文件:
classpath:bonecp.properties
bonecp.properties配置文件
#æ°æ®åºè¿æ¥é
置信æ¯
driverClass=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8
#url=jdbc:mysql://192.168.1.88:3306/hymange_test0630?useUnicode=true&characterEncoding=utf-8
#url=jdbc:mysql://127.0.0.1/hymange?useUnicode=true&characterEncoding=utf-8
username=root
password=
#idleConnectionTestPeriod=60
idleConnectionTestPeriodInMinutes=240
#idleMaxAge=240
idleMaxAgeInMinutes=4
maxConnectionsPerPartition=10
minConnectionsPerPartition=5
partitionCount=4
acquireIncrement=5
statementsCacheSize=100
releaseHelperThreads=3
log4j.properties配置文件
log4j.rootLogger=INFO,stdout,file
log4j.addivity.org.apache=true
#log4j.debug=true
# CONSOLE
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Threshold=INFO
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.Encoding=UTF-8
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n# create log everyday
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=../ccmanager_logs/CCManager
log4j.appender.file.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.file.Encoding=UTF-8
log4j.appender.file.Threshold=INFO
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d %5p %c{1}:%L : %m%nlog4j.logger.com.opensymphony.xwork2=ERRORstruts-default.xml配置文件
save,upd hssfWorkbookfileName *** /html/404.html /html/norole.html login.do
struts.properties配置文件
struts.devMode=false
struts.action.extension=do
struts.enable.DynamicMethodInvocation=truestruts.locale=zh_CN
struts.i18n.encoding=UTF-8
#20M
struts.multipart.maxSize=2147483648
#struts.multipart.saveDir=
struts.i18n.reload=true
struts.ui.theme=simplestruts.objectFactory=springstruts.serve.static.browserCache=false
struts.url.includeParams=nonestruts.custom.i18n.resources=message#struts.codebehind.pathPrefix=/traincenter/
format.numD0={0,number,\#0.0}
format.numD2={0,number,\#0.00} struts.xml是Struts主配置文件
接下来写Java类
1.写一个bean类,映射数据库字段,里面的属性私有,属性名和属性类型要和数据库中的字段一致,并为属性设置get和set方法,代码省略。。。
2.写dao类,在dao类里定义方法写sql语句
package com.hymange.web.member.dao;import java.util.List;import org.springframework.stereotype.Repository;import com.hymange.common.bean.BMember;
import com.hymange.common.exception.DaoException;
import com.hymange.common.model.Clause;
import com.hymange.common.model.Page;
import com.hymange.web.base.dao.BaseDao;
import com.hymange.web.member.bean.DeptBean;/***@Description :部门列表Dao*@author : Zhaohf*@since : 2016年7月11日 下午3:38:10*/
@Repository("MemberDao")
public class MemberDao extends BaseDao {/*** 删除部门*/public Integer deleteDept(DeptBean bMember,Clause clause){return this.getSimpleJdbcTemplate().update("delete from dept where d_number='"+bMember.getD_number()+"'"); }/*** 新增部门 */public Integer insertDept(DeptBean bMember,Clause clause){return this.getSimpleJdbcTemplate().update("insert into dept (d_number,d_name,d_tel,d_num,d_password) values ("+"'"+bMember.getD_number()+"'"+","+"'"+bMember.getD_name()+"'"+","+"'"+bMember.getD_tel()+"'"+","+"'"+bMember.getD_num()+"'"+","+"'"+bMember.getD_password()+"'"+")"); }/*** 部门修改*/public Integer updateDept(DeptBean bMember,Clause clause){
// StringBuffer sql = new StringBuffer();
// sql.append("update dept set");
// sql.append(" d_name='"+bMember.getD_name()+"',");
// sql.append(" d_tel='"+bMember.getD_tel()+"',");
// sql.append(" d_password='"+bMember.getD_password()+"' ");
// sql.append("where d_number='"+bMember.getD_number()+"'");
// return this.getSimpleJdbcTemplate().update(sql.toString(), clause,new DeptBean()); return this.getSimpleJdbcTemplate().update("update dept set d_name='"+bMember.getD_name() +"',d_tel='"+bMember.getD_tel()+"',d_password='"+bMember.getD_password()+"' where d_number='"+bMember.getD_number()+"'");}/*** @Description 按条件查询列表* @throws DaoException */public List getlistMember(Clause clause, Page page) throws DaoException {StringBuffer sql = new StringBuffer();sql.append("SELECT d_number,d_name,d_tel,d_num,d_password FROM dept ");if(clause.getWhereClause()!=null){sql.append(" WHERE "+clause.getWhereClause());}if(clause.getOrderbyClause()!=null){sql.append(clause.getOrderbyClause());}return this.queryForList(sql, clause.getParams(), page, new DeptBean()); }/*** @Description 按条件查询条数* @return* @throws DaoException */public Long selectCount(Clause clause) throws DaoException {StringBuffer sql = new StringBuffer();sql.append(" SELECT COUNT(*) "); sql.append(" FROM ");sql.append(" dept ");if(clause.getWhereClause()!=null){sql.append(" WHERE "+clause.getWhereClause());} return this.queryForLong(sql.toString(),clause.getParams());}/*** @Description 查询单条数据* @author Zhaohf* @param clause* @return* @throws DaoException*/public DeptBean select (Clause clause) throws DaoException{StringBuffer sql = new StringBuffer();sql.append(" SELECT d_number,d_name,d_tel,d_num,d_password "); sql.append(" FROM ");sql.append(" dept ");if(clause.getWhereClause()!=null){sql.append(" WHERE "+clause.getWhereClause());}if(clause.getOrderbyClause()!=null){sql.append(clause.getOrderbyClause());} return this.queryForObject(sql, clause.getParams(), new DeptBean());}/*** @Description 按条件查询条数* @return* @throws DaoException */public Long getlistContract(Clause clause) throws DaoException {StringBuffer sql = new StringBuffer();sql.append(" SELECT COUNT(*) "); sql.append(" FROM ");sql.append(" dept ");if(clause.getWhereClause()!=null){sql.append(" WHERE "+clause.getWhereClause());} return this.queryForLong(sql.toString(),clause.getParams());}
}
3.写service类,做逻辑判断,调dao里的方法
package com.hymange.web.member.service;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;import com.hymange.common.bean.BContract;
import com.hymange.common.bean.BMember;
import com.hymange.common.exception.DaoException;
import com.hymange.common.model.Clause;
import com.hymange.common.model.Constant;
import com.hymange.common.model.Page;
import com.hymange.web.base.service.BaseService;
import com.hymange.web.member.bean.DeptBean;
import com.hymange.web.member.dao.MemberDao;/***@Description : 部门列表Service*@author : Zhaohf*@since : 2016年7月11日 下午3:36:58*/
@Service("MemberService")
public class MemberService extends BaseService { @Autowired@Qualifier("MemberDao")private MemberDao memberDao;private Clause clause = new Clause();public List getlistMember(DeptBean bMember,Page page) throws DaoException{//设置查询语句setClause(bMember); return memberDao.getlistMember(clause,page); }public long selectCount(DeptBean bMember) throws DaoException{//设置查询语句setClause(bMember); return memberDao.selectCount(clause); }/*** @Description 设置查询语句*/private void setClause(DeptBean bMember){clause = new Clause();if(null != bMember.getD_name() && !bMember.getD_name().isEmpty()){clause.andWhereClause(" d_name LIKE ? ");clause.addParams(this.reParam(bMember.getD_name()));}if(null != bMember.getD_tel() && !bMember.getD_tel().isEmpty()){clause.andWhereClause(" d_tel LIKE ?" );clause.addParams(this.reParam(bMember.getD_tel()));} }/*** 删除部门*/public Boolean delete_member(DeptBean bMember) throws DaoException{boolean flag = false;if(this.memberDao.deleteDept(bMember, clause)>0){flag = true;} return flag;}/*** 新增部门 */public Boolean insert_member(DeptBean bMember) throws DaoException{boolean flag = false;// 部门编号和流水号(执行新增操作的方法)String a = "BM"; String code = this.setLsh("dept", "1", 3);int d_num=Integer.parseInt(code);bMember.setD_number(a+code);bMember.setD_num(d_num);if(this.memberDao.insertDept(bMember, clause)>0){flag = true;} return flag;}//在新增部门跳转时,掉这个方法,计算出部门编号和流水号public void save_obj(DeptBean bMember) throws DaoException{// 部门编号和流水号String a = "BM"; String code = this.setLsh("dept", "1", 3);// dept是表名,1是第一位是1,3是从1后面开始数的三位数int d_num=Integer.parseInt(code);//把流水号转成int型bMember.setD_number(a+code);bMember.setD_num(d_num); }/*** 部门修改*/public Boolean update_member(DeptBean bMember) throws DaoException{boolean flag = false;if(this.memberDao.updateDept(bMember, clause)>0){flag = true;} return flag; }/*** @Description 查询单条数据* @author * @param page* @return* @throws DaoException*/public DeptBean select(DeptBean bMember) throws DaoException{clause = new Clause();clause.andWhereClause(" D_number = ? ");clause.addParams(bMember.getD_number());DeptBean bM= this.memberDao.select(clause);return bM;}
4.写action类,控制页面跳转和具体操作
package com.hymange.web.member.action;import java.io.FileOutputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.List;import org.apache.struts2.ServletActionContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;import com.hymange.common.bean.BContract;
import com.hymange.common.bean.BMember;
import com.hymange.common.exception.DaoException;
import com.hymange.common.model.Constant;
import com.hymange.common.utils.MD5Encrypt;
import com.hymange.web.base.action.BaseAction;
import com.hymange.web.member.bean.DeptBean;
import com.hymange.web.member.service.MemberService;import sun.misc.BASE64Decoder;/***@Description : 部门列表Action*@author : Zhaohf*@since : 2016年7月11日 下午2:28:01*/
@SuppressWarnings("serial")
@Controller("MemberAction")
public class MemberAction extends BaseAction {private DeptBean bmember;private List bmemberList;@Autowired@Qualifier("MemberService")private MemberService memberService;/*** @Description 部门列表跳转* @author Zhaohf* @return*/public String member_list(){bmember = new DeptBean();try {bmemberList = memberService.getlistMember(bmember,this.getPage());long count = memberService.selectCount(bmember);this.toJsonData(bmemberList, count);} catch (DaoException e) {e.printStackTrace();} return"member_list";}/*** @Description 部门列表查询* @author * @return*/public String select_member_list(){if(null == bmember)bmember = new DeptBean();String d_name = ServletActionContext.getRequest().getParameter("d_name");String d_tel = ServletActionContext.getRequest().getParameter("d_tel"); bmember.setD_number(d_name);bmember.setD_number(d_tel);try {bmemberList = memberService.getlistMember(bmember,this.getPage());long count = memberService.selectCount(bmember);this.toJsonData(bmemberList, count);} catch (DaoException e) {e.printStackTrace();} return "jsonResult";}/*** @Description 新增部门页跳转* @author * @return*/public String member_add(){bmember = new DeptBean();try {//掉计算流水号的方法,然后把得到的值传到页面显示出来this.memberService.save_obj(bmember);ServletActionContext.getRequest().setAttribute("bmember", bmember); } catch (DaoException e) {e.printStackTrace();}this.setHandle("ADD");return"member_add";}/*** 新增部门*/public String save_member(){//MD5加密bmember.setD_password(MD5Encrypt.MD5Encode(bmember.getD_password().substring(bmember.getD_password().length())));try { if(memberService.insert_member(bmember)==true){this.toJsonMsg("success", "保存成功");} else {this.toJsonMsg("error", "系统繁忙。。。");} } catch (DaoException e) {e.printStackTrace();this.toJsonMsg("error", "系统繁忙。。。");}return Constant.JSON_RESULT;}/*** @Description 部门修改页跳转* @author * @return*/public String member_edit(){try {bmember = this.memberService.select(bmember);ServletActionContext.getRequest().setAttribute("bmember", bmember); } catch (DaoException e) {e.printStackTrace();} this.setHandle("EDIT");return"member_edit";}/*** 部门修改*/public String edit_member(){//MD5加密bmember.setD_password(MD5Encrypt.MD5Encode(bmember.getD_password().substring(bmember.getD_password().length())));try { if(memberService.update_member(bmember)==true){this.toJsonMsg("success", "保存成功");} else {this.toJsonMsg("error", "系统繁忙。。。");} } catch (DaoException e) {e.printStackTrace();this.toJsonMsg("error", "系统繁忙。。。");} return Constant.JSON_RESULT;}/*** 删除部门*/public String delete_member(){ try { if(memberService.delete_member(bmember)==true){this.toJsonMsg("success", "删除成功");} else {this.toJsonMsg("error", "系统繁忙。。。");} } catch (DaoException e) {e.printStackTrace();this.toJsonMsg("error", "系统繁忙。。。");} return Constant.JSON_RESULT;}//get和set方法 public List getBmemberList() {return bmemberList;}public void setBmemberList(List bmemberList) {this.bmemberList = bmemberList;}public DeptBean getBmember() {return bmember;}public void setBmember(DeptBean bmember) {this.bmember = bmember;} 5.写Struts-web.xml配置文件,他负责链接action类和页面的
/WEB-INF/jsp/member/member_list.jsp /WEB-INF/jsp/member/member_add.jsp /WEB-INF/jsp/member/member_detail.jsp /WEB-INF/jsp/member/member_testPassword.jsp /WEB-INF/jsp/member/member_edit.jsp namespace="/" 空间名,/是没有,如果写了,在浏览器中访问时把链接打上
action里的 name="member" class="MemberAction" name是起的名,class是交给它管理的类
result里的 name="member_list" name是交给它管理的类里的方法名,标签体里是他要跳转的jsp页面
6.写jsp页面
部门列表页面
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
部门列表
<%@include file="../common/base.jsp"%>
当前位置:部门列表
操作提示:查看部门列表 新增部门 修改部门删除
部门新增页面
<%@page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
部门新增
<%@include file="/WEB-INF/jsp/common/base.jsp"%>
当前位置:部门列表/部门新增 会员编辑
保存返回列表 保存返回列表
修改部门页面
<%@page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
修改部门
<%@include file="/WEB-INF/jsp/common/base.jsp"%>
当前位置:部门列表/修改部门 修改部门
保存返回列表 保存返回列表
效果展示:
部门列表页面

部门新增页面

修改部门页面

删除效果

查询效果

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
