MVC设计模式及Web+Mysql版人员管理信息系统

6 篇文章 0 订阅
4 篇文章 0 订阅

一、MVC设计模式

1、软件设计模式

软件设计模式(Design pattern)又成为设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。

设计模式是为了可重用代码、让代码更容易被他人理解、保证代码的可靠性、程序的重用性。

2、MVC的概念

MVC(Model View Controller)是模型-视图-控制器的缩写,一种软件设计典范,用一种业务逻辑、数据、展示界面分离的方法组织代码,将业务逻辑聚集到一个部件中,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。

MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
在这里插入图片描述

  • 视图(View):JSP或HTML文件
  • 控制器(Controller):Servlet(只写Java代码的JSP文件)
  • 模型(Model):JavaBean

3、MVC的发展历程

  1. JSP Model1
    在这里插入图片描述

  2. JSP Model2
    在这里插入图片描述

  3. JSP Modle3 在这里插入图片描述

4、MVC设计模式的优缺点

优点:

  • 多个视图共享一个模型,提高代码可重用性
  • MVC三个模块互相独立,松耦合架构
  • 控制器提高了应用程序的灵活性和可配置性
  • 有利于软件工程化管理

缺点:

  • 增加了系统结构和实现的复杂性
  • 视图对模型数据的低效率访问

二、使用Model1完成对数据库的CURD

1、项目需求

对mysql数据库中的person表进行页面级别的查询、添加、修改、删除操作。

2、项目实现

  1. 创建数据库
create database if not exists `jdbcdb`;
  1. 创建person表
create table if not exists `person`(
	`id` int(8) auto_increment comment '主键ID',
	`name` varchar(32) comment '用户名',
	`sex` varchar(1) comment '性别',
	`age` int(3) comment '年龄',
	`from` varchar(32) comment '籍贯',
	primary key(id)
)engine=InnoDB default charset=utf8;
  1. 创建Java Web项目

打开eclipse,点击File->New->Other…->Web->Dynamic Web Project,输入项目名,选择动态Web模板版本以及Tomcat版本

  1. 导入jar包

将jar包导入到WebContent的WEB-INF的lib目录下。

  • mysql-connector-java-5.1.6.jar:Java连接数据库的驱动
  • druid-1.1.9.jar:druid连接池数据源
  • commmons-dbutils-1.6.jar:dbutils工具类
  • jstl.jar:jstl标签的核心jar包
  • standard.jar:JSP标准标签库
  1. 编写person实体类,与数据库字段对应
package com.jan.entity;

import java.io.Serializable;

/**
 * JavaBean
 * 人员信息类
 * @author Jan
 *
 */
public class Person implements Serializable{
	/**
	 * 序列号
	 */
	private static final long serialVersionUID = -3154289575732556087L;
	private Integer pid;
	private String pname;
	private String sex;
	private Integer age;
	private String from;
	public Integer getPid() {
		return pid;
	}
	public void setPid(Integer pid) {
		this.pid = pid;
	}
	public String getPname() {
		return pname;
	}
	public void setPname(String pname) {
		this.pname = pname;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	public String getFrom() {
		return from;
	}
	public void setFrom(String from) {
		this.from = from;
	}
	@Override
	public String toString() {
		return "Person [pid=" + pid + ", pname=" + pname + ", sex=" + sex + ", age=" + age + ", form=" + from + "]";
	}

}

  1. 编写JDBC工具类
package com.jan.utils;

import javax.sql.DataSource;

import com.alibaba.druid.pool.DruidDataSource;

/**
 * JDBC工具类
 * @author Jan
 *
 */
public class JDBCUtil {
	// 定义连接属性
	private static final String CONN_DRIVER = "com.mysql.jdbc.Driver";
	private static final String CONN_URL = "jdbc:mysql://localhost:3306/jdbcdb?characterEncoding=utf8";
	private static final String CONN_USER = "root";
	private static final String CONN_PASS = "root";
	
	// 创建Druid连接池对象
	private static DruidDataSource dataSource = new DruidDataSource();
	
	// 绑定连接属性
	static{
		dataSource.setDriverClassName(CONN_DRIVER);
		dataSource.setUrl(CONN_URL);
		dataSource.setUsername(CONN_USER);
		dataSource.setPassword(CONN_PASS);
	}
	
	/**
	 * @return 返回一个数据源
	 */
	public static DataSource getDataSource(){
		return dataSource;
	}
}

  1. 创建系统首页
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>人员信息管理系统v1.0</title>
	</head>
	<body>
		<div>
			欢迎使用人员管理信息系统!<hr />
			<h1 style="color: red">${msg }</h1>
			<fieldset>
				<legend>请选用功能:</legend>
				<p>
					1.<a href="showAllServer.jsp">展示所有信息</a>
				</p>
				<p>
					2.<a href="showAdd.jsp">添加人员信息</a>
				</p>
			</fieldset>
		</div>
	</body>
</html>
  1. 编写添加页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>添加人员信息</title>
</head>
<body>
	<fieldset>
		<legend>添加人员信息</legend>
		<form action="showAddServer.jsp" method="post">
			<table border="1">
				<tr align="center">
					<th>姓名</th>
					<td><input type="text" name="pname" required="required" placeholder="请在这里输入姓名...." /></td>
				</tr>
				<tr align="center">
					<th>性别</th>
					<td>
						<input type="radio" name="sex" required="required" value="" />&emsp;&emsp;
						<input type="radio" name="sex" required="required" value="" /></td>
				</tr>
				<tr align="center">
					<th>年龄</th>
					<td><input type="number" min="10" maxlength="100" step="1" name="age" required="required" placeholder="请在这里输入年龄...." /></td>
				</tr>
				<tr align="center">
					<th>籍贯</th>
					<td>
						<select name="from" required="required">
							<option value=false>--请选择--</option>
							<option value="北京市">北京市</option>
							<option value="上海市">上海市</option>
							<option value="天津市 ">天津市</option>
							<option value="重庆市">重庆市</option>
							<option value="内蒙古自治区">内蒙古自治区</option>
							<option value="新疆维吾尔自治区 ">新疆维吾尔自治区</option>
							<option value="宁夏回族自治区 ">宁夏回族自治区</option>
							<option value="广西壮族自治区 ">广西壮族自治区</option>
							<option value="西藏自治区 ">西藏自治区</option>
							<option value="黑龙江省">黑龙江省</option>
							<option value="吉林省 ">吉林省</option>
							<option value="辽宁省">辽宁省</option>
							<option value="河北省 ">河北省</option>
							<option value="甘肃省">甘肃省</option>
							<option value="青海省 ">青海省</option>
							<option value="陕西省">陕西省</option>
							<option value="河南省 ">河南省</option>
							<option value="山东省">山东省</option>
							<option value="山西省 ">山西省</option>
							<option value="安徽省 ">安徽省</option>
							<option value="湖北省 ">湖北省</option>
							<option value="湖南省 ">湖南省</option>
							<option value="江苏省">江苏省</option>
							<option value="四川省 ">四川省</option>
							<option value="贵州省">贵州省</option>
							<option value="云南省">云南省</option>
							<option value="浙江省  ">浙江省</option>
							<option value="江西省  ">江西省</option>
							<option value="广东省 ">广东省</option>
							<option value="福建省  ">福建省</option>
							<option value="台湾省 ">台湾省</option>
							<option value="海南省 ">海南省</option>
							<option value="香港特别行政区 ">香港特别行政区</option>
							<option value="澳门特别行政区">澳门特别行政区</option>
						</select>
					</td>
				</tr>
				<tr>
					<th colspan="2">
						<button type="submit">添加</button>
						<button type="reset" onclick="window.history.back();">取消</button>
					</th>
				</tr>
			</table>
		</form>
	</fieldset>
</body>
</html>
  1. 编写添加控制器
<%@page import="com.jan.utils.JDBCUtil"%>
<%@page import="org.apache.commons.dbutils.QueryRunner"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	// 添加
	// 设置接收的编码格式
	request.setCharacterEncoding("utf-8");
	// 接收form表单提交的数据
	String pname = request.getParameter("pname");
	String sex = request.getParameter("sex");
	String age = request.getParameter("age");
	String from = request.getParameter("from");
	
	// 编写sql
	String sql = "insert into person values(null,?,?,?,?);";
	// 占位符赋值
	Object[] params = {pname, sex, age, from};
	// 创建执行对象
	QueryRunner qr = new QueryRunner(JDBCUtil.getDataSource());
	// 执行sql
	int count = qr.update(sql, params);
	
	if(count > 0){
		// 重定向到showAll.jsp
		response.sendRedirect("showAllServer.jsp");
	}else{
		request.setAttribute("msg", "对不起,添加失败!");
		request.getRequestDispatcher("index.jsp").forward(request, response);
	}
%>
  1. 编写查询控制器
<%@page import="org.apache.commons.dbutils.handlers.BeanListHandler"%>
<%@page import="com.jan.entity.Person"%>
<%@page import="java.util.List"%>
<%@page import="com.jan.utils.JDBCUtil"%>
<%@page import="org.apache.commons.dbutils.QueryRunner"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	// 编写sql
	String sql = "select id pid, name pname, sex, age, `from` from person;";
	// 创建sql执行对象
	QueryRunner qr = new QueryRunner(JDBCUtil.getDataSource());
	// 执行sql语句
	List<Person> list = qr.query(sql, new BeanListHandler<Person>(Person.class));
	// 保存数据
	request.setAttribute("list", list);
	// 转发给展示页面
	request.getRequestDispatcher("showAll.jsp").forward(request, response);
%>

11.编写查询页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>展示所有数据</title>
<script type="text/javascript">
	function deletePerson(pid){
		window.location.href="delelteServer.jsp?pid=" + pid;
	}
	function updatePerson(pid){
		window.location.href = "showUpdateServer.jsp?pid=" + pid;
	}
</script>
</head>
<body>
	<table border="1">
		<tr align="center">
			<td colspan="6" onclick="window.location.href='index.jsp'">人员信息表</td>
		</tr>
		<tr align="center">
			<td>编号</td>
			<td>姓名</td>
			<td>性别</td>
			<td>年龄</td>
			<td>籍贯</td>
			<td>操作</td>
		</tr>
		
		<c:forEach var="p" items="${list}">
			<tr align="center">
				<td>${p.pid}</td>
				<td>${p.pname}</td>
				<td>${p.sex}</td>
				<td>${p.age}</td>
				<td>${p.from}</td>
				<td>
					<button type="button" onclick="updatePerson('${p.pid}');">更新</button>||
					<button type="button" onclick="deletePerson('${p.pid}');">删除</button>
				</td>
			</tr>
		</c:forEach>
	</table>
</body>
</html>
  1. 编写删除控制器
<%@page import="com.jan.utils.JDBCUtil"%>
<%@page import="org.apache.commons.dbutils.QueryRunner"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	// 删除
	// 接收参数
	String pid = request.getParameter("pid");
	// 编写sql
	String sql = "delete from person where id = ?";
	// 占位符赋值
	Object[] params = {pid};
	// 创建执行对象
	QueryRunner qr = new QueryRunner(JDBCUtil.getDataSource());
	// 执行sql
	int count = qr.update(sql, params);
	// 判断
	if(count > 0){
		response.sendRedirect("showAllServer.jsp");
	}else{
		request.setAttribute("msg", "对不起,删除失败!");
		request.getRequestDispatcher("index.jsp").forward(request, response);
	}
%>
  1. 编写更新回显控制器
<%@page import="org.apache.commons.dbutils.handlers.BeanHandler"%>
<%@page import="com.jan.entity.Person"%>
<%@page import="com.jan.utils.JDBCUtil"%>
<%@page import="org.apache.commons.dbutils.QueryRunner"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	// 更新回显
	// 接收pid
	String pid = request.getParameter("pid");
	// 编写sql
	
	String sql = "select id pid, name pname, sex, age, `from` from person where id = ?";
	// 占位符赋值
	Object[] params = {pid};
	// 创建执行对象
	QueryRunner qr = new QueryRunner(JDBCUtil.getDataSource());
	// 执行sql
	Person person = qr.query(sql, new BeanHandler<Person>(Person.class), params);
	// 保存数据
	request.setAttribute("person", person);
	// 转发到更新人员页面
	request.getRequestDispatcher("showUpdate.jsp").forward(request, response);
%>
  1. 编写更新页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>更新人员信息</title>
</head>
<body>
	<fieldset>
		<legend>更新人员信息</legend>
		<form action="showUpdateServer2.jsp" method="post">
			<input type="hidden" name="pid" value="${person.pid }" />
			<table border="1">
				<tr align="center">
					<th>姓名</th>
					<td><input type="text" name="pname" required="required" value="${person.pname }" /></td>
				</tr>
				<tr align="center">
					<th>性别</th>
					<td>
						<input type="radio" name="sex" value="" required="required" <c:if test="${person.sex eq ''}">checked</c:if> />男&emsp;&emsp;
						<input type="radio" name="sex" value="" required="required" <c:if test="${person.sex eq ''}">checked</c:if> />女
					</td>
				</tr>
				<tr align="center">
					<th>年龄</th>
					<td><input type="number" min="10" maxlength="100" step="1" name="age" required="required"  value="${person.age }" /></td>
				</tr>
				<tr align="center">
					<th>籍贯</th>
					<td>
						<select name="from" required="required">
							<option value=false <c:if test="${person.from == '-'}">selected="selected"</c:if>>--请选择--</option>
							<option value="北京市" <c:if test="${person.from == '北京市'}">selected="selected"</c:if>>北京市</option>
							<option value="上海市" <c:if test="${person.from == '上海市'}">selected="selected"</c:if>>上海市</option>
							<option value="天津市 " <c:if test="${person.from == '天津市'}">selected="selected"</c:if>>天津市</option>
							<option value="重庆市" <c:if test="${person.from == '重庆市'}">selected="selected"</c:if>>重庆市</option>
							<option value="内蒙古自治区" <c:if test="${person.from == '内蒙古自治区'}">selected="selected"</c:if>>内蒙古自治区</option>
							<option value="新疆维吾尔自治区 " <c:if test="${person.from == '新疆维吾尔自治区'}">selected="selected"</c:if>>新疆维吾尔自治区</option>
							<option value="宁夏回族自治区 " <c:if test="${person.from == '宁夏回族自治区'}">selected="selected"</c:if>>宁夏回族自治区</option>
							<option value="广西壮族自治区 " <c:if test="${person.from == '广西壮族自治区'}">selected="selected"</c:if>>广西壮族自治区</option>
							<option value="西藏自治区 " <c:if test="${person.from == '西藏自治区'}">selected="selected"</c:if>>西藏自治区</option>
							<option value="黑龙江省" <c:if test="${person.from == '黑龙江省'}">selected="selected"</c:if>>黑龙江省</option>
							<option value="吉林省" <c:if test="${person.from == '吉林省'}">selected="selected"</c:if>>吉林省</option>
							<option value="辽宁省" <c:if test="${person.from == '辽宁省'}">selected="selected"</c:if>>辽宁省</option>
							<option value="河北省" <c:if test="${person.from == '河北省'}">selected="selected"</c:if>>河北省</option>
							<option value="甘肃省" <c:if test="${person.from == '甘肃省'}">selected="selected"</c:if>>甘肃省</option>
							<option value="青海省" <c:if test="${person.from == '青海省'}">selected="selected"</c:if>>青海省</option>
							<option value="陕西省" <c:if test="${person.from == '陕西省'}">selected="selected"</c:if>>陕西省</option>
							<option value="河南省" <c:if test="${person.from == '河南省'}">selected="selected"</c:if>>河南省</option>
							<option value="山东省" <c:if test="${person.from == '山东省'}">selected="selected"</c:if>>山东省</option>
							<option value="山西省" <c:if test="${person.from == '山西省'}">selected="selected"</c:if>>山西省</option>
							<option value="安徽省" <c:if test="${person.from == '安徽省'}">selected="selected"</c:if>>安徽省</option>
							<option value="湖北省" <c:if test="${person.from == '湖北省'}">selected="selected"</c:if>>湖北省</option>
							<option value="湖南省" <c:if test="${person.from == '湖南省'}">selected="selected"</c:if>>湖南省</option>
							<option value="江苏省" <c:if test="${person.from == '江苏省'}">selected="selected"</c:if>>江苏省</option>
							<option value="四川省" <c:if test="${person.from == '四川省'}">selected="selected"</c:if>>四川省</option>
							<option value="贵州省" <c:if test="${person.from == '贵州省'}">selected="selected"</c:if>>贵州省</option>
							<option value="云南省" <c:if test="${person.from == '云南省'}">selected="selected"</c:if>>云南省</option>
							<option value="浙江省" <c:if test="${person.from == '浙江省'}">selected="selected"</c:if>>浙江省</option>
							<option value="江西省" <c:if test="${person.from == '江西省'}">selected="selected"</c:if>>江西省</option>
							<option value="广东省" <c:if test="${person.from == '广东省'}">selected="selected"</c:if>>广东省</option>
							<option value="福建省" <c:if test="${person.from == '福建省'}">selected="selected"</c:if>>福建省</option>
							<option value="台湾省" <c:if test="${person.from == '台湾省'}">selected="selected"</c:if>>台湾省</option>
							<option value="海南省" <c:if test="${person.from == '海南省'}">selected="selected"</c:if>>海南省</option>
							<option value="香港特别行政区 " <c:if test="${person.from == '香港特别行政区'}">selected="selected"</c:if>>香港特别行政区</option>
							<option value="澳门特别行政区" <c:if test="${person.from == '澳门特别行政区'}">selected="selected"</c:if>>澳门特别行政区</option>
						</select>
					</td>
				</tr>
				<tr>
					<th colspan="2">
						<button type="submit">更新</button>
						<button type="reset" onclick="window.history.back();">取消</button>
					</th>
				</tr>
			</table>
		</form>
	</fieldset>
</body>
</html>
  1. 编写更新控制器
<%@page import="org.apache.commons.dbutils.QueryRunner"%>
<%@page import="com.jan.utils.JDBCUtil"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	// 更新
	// 设置接收到的编码格式
	request.setCharacterEncoding("utf8");
	// 接收更新页面传过来的数据
	String pid = request.getParameter("pid");
	String pname = request.getParameter("pname");
	String sex = request.getParameter("sex");
	String age = request.getParameter("age");
	String from = request.getParameter("from");
	
	// 编写sql
	String sql = "update person set name=?,sex=?,age=?,`from`=? where id=?";
	// 占位符赋值
	Object[] params = {pname, sex, age, from, pid};
	// 创建执行对象
	QueryRunner qr = new QueryRunner(JDBCUtil.getDataSource());
	// 执行sql
	int count = qr.update(sql, params);
	// 判断
	if(count > 0){
		response.sendRedirect("showAllServer.jsp");
	}else{
		request.setAttribute("msg", "对不起,修改失败!");
		request.getRequestDispatcher("index.jsp").forward(request, response);
	}

%>

三、软件分层

前言:JSP页面作为页面来说承载了它不该承载的很多东西,比如数据库操作。

1、软件分层概述

JSP开发分两层弊端:

  • 展示逻辑与业务流程混合
  • 业务代码与数据访问混合;
  • 编码职责不清,修改时互相影响,难以重用和扩展

JSP开发分三层:
在这里插入图片描述
软件分层的优点:

  • 职责清晰
  • 无损替换
  • 代码复用
  • 降低依赖

2、软件分层原则

  • 上层依赖其下层,依赖关系不跨层 : 表示层不能直接访问数据访问层;
  • 上层调用下层的结果,取决于下层的实现 : 下一层不能调用上一层,下一层不依赖上一层;
  • 上层的改变不会影响下一层, 下层的改变会影响上一层得到的结果
  • 在上一层中不能出现下一层的概念 : 分工明确,各司其职

3、软件分层

一般软件分层分为三层:

  • 数据层:(DAO)Data Access Object层,专门用来处理数据
  • 业务层:(Service)Business层,专门用来处理业务逻辑
  • 控制层:(Controller)WEB层,专门负责页面的控制

DAO层和Service层之间使用接口和实现类这种设计原则优点:

  • 接口负责设计本层结构
  • 实现类帮助实现接口的内容
  • 接口减少类与类之间的耦合

4、建包小工具

import java.io.File;
import java.io.IOException;

/**
 * javaweb分层
 * 自动建包工具类
 * @author Jan
 *
 */
public class AutoCreatePackage {
	
	private static final String packageL0 = "src";
	private static final String packageL1 = "com";
	private static final String packageL2 = "gaj";
	private static final String packageL3e = "entity";
	private static final String packageL3u = "utils";
	private static final String packageL3d = "dao";
	private static final String packageL3s = "server";
	private static final String packageL3c = "controller";
	private static final String packageL4 = "implement";
	private static final String slashes = System.getProperty("file.separator");

	public static void main(String[] args) throws IOException {
		// 获取src目录
		String srcPath = System.getProperty("user.dir") + slashes + packageL0;
		
		// 获取一级目录
		String level1 = srcPath + slashes +  packageL1;
		File file = new File(level1);
		if(!file.exists()){
			file.mkdir();
			System.out.println(level1 +"创建完毕!");
		}else{
			System.out.println(level1 + "已存在!");
		}
		
		// 获取二级目录
		String level2 = level1 + slashes + packageL2;
		file = new File(level2);
		if(!file.exists()){
			file.mkdir();
			System.out.println(level2 +"创建完毕!");
		}else{
			System.out.println(level2 + "已存在!");
		}
		
		// 获取三级各目录
		// 创建com.gaj.entity包
		String level3e = level2 + slashes + packageL3e;
		file = new File(level3e);
		if(!file.exists()){
			file.mkdir();
			System.out.println(level3e +"创建完毕!");
		}else{
			System.out.println(level3e + "已存在!");
		}
		
		// 创建com.gaj.utils包
		String level3u = level2 + slashes + packageL3u;
		file = new File(level3u);
		if(!file.exists()){
			file.mkdir();
			System.out.println(level3u +"创建完毕!");
		}else{
			System.out.println(level3u + "已存在!");
		}		
		
		// 创建com.gaj.dao包
		String level3d = level2 + slashes + packageL3d;
		file = new File(level3d);
		if(!file.exists()){
			file.mkdir();
			System.out.println(level3d +"创建完毕!");
		}else{
			System.out.println(level3d + "已存在!");
		}		
		
		// 创建com.gaj.server包
		String level3s = level2 + slashes + packageL3s;
		file = new File(level3s);
		if(!file.exists()){
			file.mkdir();
			System.out.println(level3s +"创建完毕!");
		}else{
			System.out.println(level3s + "已存在!");
		}
		
		// 创建com.gaj.controller包
		String level3c = level2 + slashes + packageL3c;		
		file = new File(level3c);
		if(!file.exists()){
			file.mkdir();
			System.out.println(level3c +"创建完毕!");
		}else{
			System.out.println(level3c + "已存在!");
		}		
/*		
		// 创建com.gaj.server.impl包
		String level4s = level3s + slashes + packageL4;
		file = new File(level4s);
		if(!file.exists()){
			file.mkdir();
			System.out.println(level4s +"创建完毕!");
		}else{
			System.out.println(level4s + "已存在!");
		}			
		
		// 创建com.gaj.dao.impl包
		String level4d = level3d + slashes + packageL4;
		file = new File(level4d);
		if(!file.exists()){
			file.mkdir();
			System.out.println(level4d +"创建完毕!");
		}else{
			System.out.println(level4d + "已存在!");
		}		
*/		
		System.out.println("所有包创建完毕,请选中src包按F5键刷新目录!");
	}
}

四、对人员信息管理系统V1.0进行优化

1、DAO层需求

DAO主要使用来与数据库的数据进行交互,增删改查都是由DAO层负责

DAO层接口

package com.gaj.dao;

import java.util.List;

import com.gaj.entity.Person;

/**
 * 人员表的数据库操作接口
 * @author Jan
 *
 */
public interface PersonDao {
	
	public int insertPerson(Person person) throws Exception;
	
	public int updatePerson(Person person) throws Exception;
	
	public int deletePerson(Person person) throws Exception;
	
	public Person findPersonById(Integer id) throws Exception;
	
	public List<Person> findAllPersons() throws Exception;
}

DAO层实现类

package com.gaj.dao.implement;

import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import com.gaj.dao.PersonDao;
import com.gaj.entity.Person;
import com.gaj.utils.JDBCUtil;

public class PersonDaoImpl implements PersonDao {
	
	
	QueryRunner qr = new QueryRunner(JDBCUtil.getDataSouce());

	@Override
	public int insertPerson(Person person) throws Exception {
		// 编写sql
		String sql = "insert into person values(null,?,?,?,?)";
		// 占位符赋值
		Object[] params = {person.getPname(), person.getSex(), person.getAge(), person.getFrom()};
		// 执行sql
		int count = qr.update(sql, params);
		// 返回影响行数
		return count;
	}

	@Override
	public int updatePerson(Person person) throws Exception {
		// 编写sql
		String sql = "update person set name=?, sex=?, age=?, `from`=? where id=?";
		// 占位符赋值
		Object[] params = {person.getPname(), person.getSex(), person.getAge(), person.getFrom(), person.getPid()};
		// 执行sql
		int count = qr.update(sql, params);
		// 返回影响行数
		return count;
	}

	@Override
	public int deletePerson(Person person) throws Exception {
		// 编写sql
		String sql = "delete from person where id=?";
		// 占位符赋值
		Object param = person.getPid();
		// 执行sql
		int count = qr.update(sql, param);
		// 返回影响行数
		return count;
	}

	@Override
	public Person findPersonById(Integer id) throws Exception {
		// 编写sql
		String sql = "select id pid, name pname, sex, age, `from` from person where id = ?";
		// 占位符赋值
		Object param = id;
		// 执行sql
		Person person = qr.query(sql, new BeanHandler<Person>(Person.class), param);
		// 返回对象
		return person;
	}

	@Override
	public List<Person> findAllPersons() throws Exception {
		// 编写sql
		String sql = "select id pid, name pname, sex, age, `from` from person";
		// 执行sql
		List<Person> list = qr.query(sql, new BeanListHandler<Person>(Person.class));
		// 返回集合
		return list;
	}

}

2、Service层需求

service主要是承上启下,并且处理业务的层,所以此层基本都是为了承接DAO层向页面传递数据的

Service层接口

package com.gaj.server;

import java.util.List;

import com.gaj.entity.Person;

public interface PersonService {
	
	public int insertPerson(Person person) throws Exception;
	
	public int updatePerson(Person person) throws Exception;
	
	public int deletePerson(Person person) throws Exception;
	
	public Person findPersonById(Integer id) throws Exception;
	
	public List<Person> findAllPersons() throws Exception;
	
}

Service层实现类

package com.gaj.server.implement;

import java.util.List;

import com.gaj.dao.PersonDao;
import com.gaj.dao.implement.PersonDaoImpl;
import com.gaj.entity.Person;
import com.gaj.server.PersonService;

public class PersonServiceImpl implements PersonService {
	
	private PersonDao personDao = new PersonDaoImpl();

	@Override
	public int insertPerson(Person person) throws Exception {
		return personDao.insertPerson(person);
	}

	@Override
	public int updatePerson(Person person) throws Exception {
		return personDao.updatePerson(person);
	}

	@Override
	public int deletePerson(Person person) throws Exception {
		return personDao.deletePerson(person);
	}

	@Override
	public Person findPersonById(Integer id) throws Exception {
		return personDao.findPersonById(id);
	}

	@Override
	public List<Person> findAllPersons() throws Exception {
		return personDao.findAllPersons();
	}

}

4、优化页面控制器

  1. 优化添加控制器
<%@page import="com.gaj.entity.Person"%>
<%@page import="com.gaj.server.PersonService"%>
<%@page import="com.gaj.server.implement.PersonServiceImpl"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	// 添加
	// 接收add表单传过来的数据
	// 设置编码
	request.setCharacterEncoding("utf-8");
	// 接收数据
	String pname = request.getParameter("pname");
	String sex = request.getParameter("sex");
	String age = request.getParameter("age");
	String from = request.getParameter("from");
	// 封装数据
	Person person = new Person();
	person.setPname(pname);
	person.setSex(sex);
	person.setAge(Integer.parseInt(age));
	person.setFrom(from);
	// 创建service层对象
	PersonService service = new PersonServiceImpl();
	// 执行添加
	int count = service.insertPerson(person);
	// 判断
	if(count > 0){
		response.sendRedirect("showAllServer.jsp");
	}else{
		// 添加失败 返回添加页面并弹窗提示
		String msg = "<script type='text/javascript'>history.back();alert('添加失败!');</script>";
		// text/html(服务端给客户端发送的数据类型):浏览器将这段话当做是HTML文本进行解析
		response.setContentType("text/html; charset=utf-8");
		// 打印
		out.print(msg);
	}
%>
  1. 优化查询控制器
<%@page import="com.gaj.entity.Person"%>
<%@page import="java.util.List"%>
<%@page import="com.gaj.server.PersonService"%>
<%@page import="com.gaj.server.implement.PersonServiceImpl"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	// 创建service对象
	PersonService service = new PersonServiceImpl();
	// 执行查询 获得一个model 
	List<Person> list = service.findAllPersons();
	// 保存model
	request.setAttribute("list", list);
	// 转发给showAll.jsp
	request.getRequestDispatcher("showAll.jsp").forward(request, response);
%>
  1. 优化删除控制器
<%@page import="com.gaj.entity.Person"%>
<%@page import="com.gaj.server.PersonService"%>
<%@page import="com.gaj.server.implement.PersonServiceImpl"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	// 删除
	// 接收传过来的id值
	String pid = request.getParameter("pid");
	
	// 创建service层对象
	PersonService service = new PersonServiceImpl();
	// 按id查询
	Person person = service.findPersonById(Integer.parseInt(pid));
	// 删除该人
	int count = service.deletePerson(person);
	// 判断
	if(count > 0){
		response.sendRedirect("showAllServer.jsp");
	}else{
		// 删除失败 返回查询页面并弹窗提示
		String msg = "<script type='text/javascript'>history.back();alert('删除失败!');</script>";
		// text/html(服务端给客户端发送的数据类型):浏览器将这段话当做是HTML文本进行解析
		response.setContentType("text/html; charset=utf-8");
		// 打印
		out.print(msg);	
	}
%>
  1. 优化更新回显控制器
<%@page import="com.gaj.entity.Person"%>
<%@page import="com.gaj.server.implement.PersonServiceImpl"%>
<%@page import="com.gaj.server.PersonService"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	// 更新回显
	// 接收id
	String pid = request.getParameter("pid");
	// 创建Service层对象
	PersonService service = new PersonServiceImpl();
	// 按id查询
	Person person = service.findPersonById(Integer.parseInt(pid));
	// 保存person对象
	request.setAttribute("person", person);
	// 转发给showUpdate.jsp
	request.getRequestDispatcher("showUpdate.jsp").forward(request,response);
%>
  1. 优化更新控制器
<%@page import="com.gaj.server.implement.PersonServiceImpl"%>
<%@page import="com.gaj.server.PersonService"%>
<%@page import="com.gaj.entity.Person"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	// 更新
	// 设置编码
	request.setCharacterEncoding("utf-8");
	// 接收update表单数据
	String pid = request.getParameter("pid");
	String pname = request.getParameter("pname");
	String sex = request.getParameter("sex");
	String age = request.getParameter("age");
	String from = request.getParameter("from");
	
	// 创建service层对象
	PersonService service = new PersonServiceImpl();
	// 封装person对象
	Person person = new Person();
	person.setPid(Integer.parseInt(pid));
	person.setPname(pname);
	person.setSex(sex);
	person.setAge(Integer.parseInt(age));
	person.setFrom(from);
	// 更新person
	int count = service.updatePerson(person);
	// 判断
	if(count > 0){
		response.sendRedirect("showAllServer.jsp");
	}else{
		// 更新失败 返回更新页面并弹窗提示
		String msg = "<script type='text/javascript'>history.back();alert('更新失败!');</script>";
		// text/html(服务端给客户端发送的数据类型):浏览器将这段话当做是HTML文本进行解析
		response.setContentType("text/html; charset=utf-8");
		// 打印
		out.print(msg);
	}
%>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值