【案例】
1. 数据库:
学生:姓名、性别、生日、身高、所属班级(select选择)、是否特长生,民族(select选择)
老师:姓名、电话、生日
班级:班级名称、教室号、班主任老师(select选择)
民族:名称
课上实现老师、学生的增删改查。 Dao(Servlet中不出现SQL语句、ResultSet等JDBC):DAO返回的数据、接收的数据都用Model。我习惯Model类名以Info结束。
作业:完成“老师、班级”的增删改查。给“老师”增加 “民族、性别、邮箱”三个字段。
2.DAO的理由:1、Servlet中不出现数据库相关的东西。2、把所有和数据库相关的东西放到DAO中,Servlet只和DAO打交道。3、Servlet和DAO之间传递复杂数据用对象
3. DAO的优点:各司其职:Servlet就是负责和用户交互(获取请求,处理请求,返回响应),到底数据是怎么样跟数据库搞出来的,Servlet不管;DAO只负责和数据库打交道,取出来的数据怎么用,为什么要addnew一条数据,DAO不管。
4.有的老师的习惯:DAO和Model合一。
项目列表:
【TeacherDAO.java】
【TeacherInfo.java】
【RupengUtils.java】
【TeacherServlet.java】
【TeacherList.jsp】
【TeacherEdit.jsp】
【TeacherAddNew.jsp】
【Error.jsp】
建好数据库
建议:现在大家都习惯在catch里throw newRuntimeException了想处理就处理
很少throws 检查异常 spring基本都是遵循这个习惯 为了调用者方便
Dao有好多种写法
在Dao中封装一个方法toModel 把ResultSet转换为TeacherInfo对象
【TeacherDAO.java】
package com.rupeng.web3;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;
/**
* 对教师表的增删改查等进行封装
*
* @author yzk
*
*/
public class TeacherDAO
{
// 方法的参数一般不要超过5个。
// public void addnew(String name,String phoneNum,...)
//spring
/**
* 新增数据
*/
public void addnew(TeacherInfo teacher)
{
try
{
JdbcUtils.executeUpdate(
"Insert into T_Teachers(Name,PhoneNum,BirthDay) values(?,?,?)",
teacher.getName(), teacher.getPhoneNum(), teacher.getBirthDay());
} catch (SQLException e)
{
//封装成RuntimeException主要为了调用者方便
throw new RuntimeException(e);
}
}
/**
* 更新数据(要求id字段是确定,不被修改)
* @param teacher
*/
public void update(TeacherInfo teacher)
{
try
{
JdbcUtils.executeUpdate("Update T_Teachers set Name=?,PhoneNum=?,BirthDay=? where Id=?",
teacher.getName(),teacher.getPhoneNum(),teacher.getBirthDay(),teacher.getId());
} catch (SQLException e)
{
throw new RuntimeException(e);
}
}
/**
* 删除主键为id的老师
* @param id
*/
public void delete(int id)
{
try
{
JdbcUtils.executeUpdate("delete from T_Teachers where Id=?", id);
} catch (SQLException e)
{
throw new RuntimeException(e);
}
}
/**
* 查找逐渐为参数id值的老师
* @param id
* @return 老师对象
*/
public TeacherInfo getById(int id)
{
ResultSet rs = null;
try
{
rs = JdbcUtils.executeQuery("select * from T_Teachers where Id=?", id);
if(rs.next())
{
/*
TeacherInfo info = new TeacherInfo();
info.setId(rs.getInt("Id"));
info.setName(rs.getString("Name"));
info.setPhoneNum(rs.getString("PhoneNum"));
info.setBirthDay(rs.getDate("BirthDay"));
return info;*/
return toModel(rs);
}
else
{
return null;//一条数据都没有,也就是没有找到id=id的数据
}
} catch (SQLException e)
{
throw new RuntimeException(e);
}
finally
{
JdbcUtils.closeAll(rs);
}
}
/**
* 读取当前行的数据,然后形成一个对象返回
* @param rs
* @return
* @throws SQLException
*/
private TeacherInfo toModel(ResultSet rs) throws SQLException
{
TeacherInfo info = new TeacherInfo();
info.setId(rs.getInt("Id"));
info.setName(rs.getString("Name"));
info.setPhoneNum(rs.getString("PhoneNum"));
info.setBirthDay(rs.getDate("BirthDay"));
return info;
}
/**
* 获得所有的老师对象
* @return
*/
public List<TeacherInfo> getAll()
{
ResultSet rs = null;
try
{
rs = JdbcUtils.executeQuery("select * from T_Teachers");
List<TeacherInfo> list = new LinkedList<TeacherInfo>();
while(rs.next())
{
/*
TeacherInfo info = new TeacherInfo();
info.setId(rs.getInt("Id"));
info.setName(rs.getString("Name"));
info.setPhoneNum(rs.getString("PhoneNum"));
info.setBirthDay(rs.getDate("BirthDay"));
list.add(info);*/
list.add(toModel(rs));
}
return list;
}
catch(SQLException e)
{
throw new RuntimeException(e);
}
finally
{
JdbcUtils.closeAll(rs);
}
}
}
【TeacherInfo.java】
package com.rupeng.web3;
import java.sql.Date;
public class TeacherInfo
{
private int id;
private String name;
private String phoneNum;
private Date birthDay;
public int getId()
{
return id;
}
public void setId(int id)
{
this.id = id;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public String getPhoneNum()
{
return phoneNum;
}
public void setPhoneNum(String phoneNum)
{
this.phoneNum = phoneNum;
}
public Date getBirthDay()
{
return birthDay;
}
public void setBirthDay(Date birthDay)
{
this.birthDay = birthDay;
}
}
乱码处理 转到错误页
【RupengUtils.java】
package com.rupeng.web3;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class RupengUtils
{
/**
* 从请求中获取名字为name的值,解决中文乱码问题
* @param req
* @param name
* @return
*/
public static String getParameter(HttpServletRequest request, String name)
{
try
{
String value = request.getParameter(name);
byte[] bytes;
bytes = value.getBytes("ISO-8859-1");
return new String(bytes, "UTF-8");
} catch (UnsupportedEncodingException e)
{
throw new RuntimeException(e);
}
}
/**
* 在/Error.jsp中显示错误消息
* @param request
* @param response
* @param msg
* @throws ServletException
* @throws IOException
*/
public static void showError(HttpServletRequest request,HttpServletResponse response,String msg)
throws ServletException, IOException
{
request.setAttribute("msg", msg);
request.getRequestDispatcher("/Error.jsp").forward(request, response);
}
}
【TeacherServlet.java】
package com.rupeng.web3;
import java.io.IOException;
import java.sql.Date;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class TeacherServlet extends HttpServlet
{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
String action = request.getParameter("action");
if(action.equals("addnew"))
{
request.getRequestDispatcher("/TeacherAddNew.jsp").forward(request, response);
}
else if(action.equals("addnewSubmit"))
{
String name = RupengUtils.getParameter(request, "name");
String phoneNum = request.getParameter("phoneNum");
String birthDay = request.getParameter("birthDay");
Date dateBirthDay = Date.valueOf(birthDay);//把"2008-08-08"这样的字符串解析为Date类型
TeacherInfo teacher = new TeacherInfo();
teacher.setName(name);
teacher.setPhoneNum(phoneNum);
teacher.setBirthDay(dateBirthDay);
//看不到一行sql语句,看不到一个和JDBC相关的东西
//在Servlet中不出现JDBC、不出现SQL语句
//JDBC、SQL语句出现在DAO中
//对于复杂的项目,引入DAO会让代码更清晰,可复用性更强
TeacherDAO dao = new TeacherDAO();
dao.addnew(teacher);
response.sendRedirect("teacher?action=list");
}
else if(action.equals("edit"))
{
int id = Integer.parseInt(request.getParameter("id"));
//先查询修改前的数据
TeacherInfo teacher = new TeacherDAO().getById(id);
if(teacher==null)
{
/*
request.setAttribute("msg", "没有查询到id="+id+"的老师");
request.getRequestDispatcher("/Error.jsp").forward(request, response);*/
RupengUtils.showError(request, response, "没有查询到id="+id+"的老师");
}
else
{
request.setAttribute("teacher",teacher);
request.getRequestDispatcher("/TeacherEdit.jsp").forward(request, response);
}
}
else if(action.equals("editSubmit"))
{
int id = Integer.parseInt(request.getParameter("id"));
String name = RupengUtils.getParameter(request, "name");
String phoneNum = request.getParameter("phoneNum");
String birthDay = request.getParameter("birthDay");
Date dateBirthDay = Date.valueOf(birthDay);//把"2008-08-08"这样的字符串解析为Date类型
TeacherInfo teacher = new TeacherInfo();
teacher.setId(id);
teacher.setName(name);
teacher.setPhoneNum(phoneNum);
teacher.setBirthDay(dateBirthDay);
new TeacherDAO().update(teacher);
response.sendRedirect("teacher?action=list");
}
else if(action.equals("delete"))
{
int id = Integer.parseInt(request.getParameter("id"));
new TeacherDAO().delete(id);
response.sendRedirect("teacher?action=list");
}
else if(action.equals("list"))
{
TeacherDAO dao = new TeacherDAO();
List<TeacherInfo> list = dao.getAll();
request.setAttribute("teachers", list);
request.getRequestDispatcher("/TeacherList.jsp").forward(request, response);
}
else
{
/*
request.setAttribute("msg", "错误的action:"+action);
request.getRequestDispatcher("/Error.jsp").forward(request, response);*/
RupengUtils.showError(request, response,"错误的action:"+action);
}
}
}
【TeacherList.jsp】
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>教师管理</title>
</head>
<body>
<p><a href="teacher?action=addnew">新建教师</a></p>
<table>
<tr><td>删除</td><td>修改</td><td>姓名</td><td>手机号</td><td>生日</td></tr>
<c:forEach items="${teachers}" var="t">
<tr><td><a href="teacher?action=delete&id=${t.id}">删除</a></td><td><a href="teacher?action=edit&id=${t.id}">修改</a></td><td><c:out value="${t.name}"/></td><td><c:out value="${t.phoneNum}"/></td><td>${t.birthDay}</td></tr>
</c:forEach>
</table>
</body>
</html>
【TeacherEdit.jsp】
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>编辑教师</title>
</head>
<body>
<form action="teacher" method="post">
<input type="hidden" name="action" value="editSubmit"/>
<input type="hidden" name="id" value="${teacher.id}"/>
姓名:<input type="text" name="name" value="${teacher.name }"/>
手机号:<input type="text" name="phoneNum" value="${teacher.phoneNum }"/>
生日:<input type="text" name="birthDay" value="${teacher.birthDay }"/>
<input type="submit" value="保存"/>
</form>
</body>
</html>
【TeacherAddNew.jsp】
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>新建老师</title>
</head>
<body>
<form action="teacher" method="post">
<input type="hidden" name="action" value="addnewSubmit"/>
姓名:<input type="text" name="name"/>
手机号:<input type="text" name="phoneNum"/>
生日:<input type="text" name="birthDay"/>
<input type="submit" value="保存"/>
</form>
</body>
</html>
【Error.jsp】
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>错误</title>
</head>
<body>
${msg}
</body>
</html>
Student项目列表:
【StudentDAO.java】
【StudentInfo.java】
【StudentServlet.java】
【StudentList.jsp】
【StudentEdit.jsp】
【StudentList.jsp】
【StudentDAO.java】
package com.rupeng.web3;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;
public class StudentDAO
{
public void addnew(StudentInfo student)
{
try
{
JdbcUtils.executeUpdate(
"Insert into T_Students(Name,Gender,BirthDay,ClassId,TeChangSheng,MinZuId) values(?,?,?,?,?,?)",
student.getName(), student.isGender(), student.getBirthDay(),student.getClassId(),
student.isTeChangSheng(),student.getMinZuId());
} catch (SQLException e)
{
//封装成RuntimeException主要为了调用者方便
throw new RuntimeException(e);
}
}
public void update(StudentInfo student)
{
try
{
JdbcUtils.executeUpdate("Update T_Students set Name=?,Gender=?,BirthDay=?,ClassId=?,TeChangSheng=?,MinZuId=? where Id=?",
student.getName(),student.isGender(),student.getBirthDay(),student.getClassId(),student.isTeChangSheng(),
student.getMinZuId(),student.getId());
} catch (SQLException e)
{
throw new RuntimeException(e);
}
}
public void delete(int id)
{
try
{
JdbcUtils.executeUpdate("delete from T_Students where Id=?", id);
} catch (SQLException e)
{
throw new RuntimeException(e);
}
}
public StudentInfo getById(int id)
{
ResultSet rs = null;
try
{
rs = JdbcUtils.executeQuery("select * from T_Students where Id=?", id);
if(rs.next())
{
return toModel(rs);
}
else
{
return null;//一条数据都没有,也就是没有找到id=id的数据
}
} catch (SQLException e)
{
throw new RuntimeException(e);
}
finally
{
JdbcUtils.closeAll(rs);
}
}
private StudentInfo toModel(ResultSet rs) throws SQLException
{
StudentInfo info = new StudentInfo();
info.setId(rs.getInt("Id"));
info.setName(rs.getString("Name"));
info.setGender(rs.getBoolean("Gender"));
info.setBirthDay(rs.getDate("BirthDay"));
info.setClassId(rs.getInt("ClassId"));
info.setTeChangSheng(rs.getBoolean("TeChangSheng"));
info.setMinZuId(rs.getInt("MinZuId"));
return info;
}
public List<StudentInfo> getAll()
{
ResultSet rs = null;
try
{
rs = JdbcUtils.executeQuery("select * from T_Students");
List<StudentInfo> list = new LinkedList<StudentInfo>();
while(rs.next())
{
list.add(toModel(rs));
}
return list;
}
catch(SQLException e)
{
throw new RuntimeException(e);
}
finally
{
JdbcUtils.closeAll(rs);
}
}
}
【StudentInfo.java】
package com.rupeng.web3;
import java.sql.Date;
public class StudentInfo
{
private int id;
private String haha;
private boolean gender;
private Date birthDay;
private int classId;
private boolean teChangSheng;
private int minZuId;
public int getId()
{
return id;
}
public void setId(int id)
{
this.id = id;
}
public String getName()
{
//return "rupeng";
return haha;
}
public void setName(String name)
{
this.haha = name;
}
public boolean isGender()
{
return gender;
}
public void setGender(boolean gender)
{
this.gender = gender;
}
public Date getBirthDay()
{
return birthDay;
}
public void setBirthDay(Date birthDay)
{
this.birthDay = birthDay;
}
public int getClassId()
{
return classId;
}
public void setClassId(int classId)
{
this.classId = classId;
}
//对于boolean类型的属性,获取方法既可以以get开头又可以以is开头
//如果既有get方法又有is方法,则is方法优先级高
//vip、gender(性别)。He is vip。He is Gender。His Gender is male。
//isVIP、getGender()
//isTeChangSheng
//
/*
public boolean isTeChangSheng()
{
return true;
}*/
public boolean isTeChangSheng()
//public boolean getTeChangSheng()
{
return teChangSheng;
}
public void setTeChangSheng(boolean teChangSheng)
{
this.teChangSheng = teChangSheng;
}
public int getMinZuId()
{
return minZuId;
}
public void setMinZuId(int minZuId)
{
this.minZuId = minZuId;
}
}
【StudentServlet.java】
package com.rupeng.web3;
import java.io.IOException;
import java.sql.Date;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class StudentServlet extends HttpServlet
{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException
{
String action = request.getParameter("action");
if (action.equals("addnew"))
{
List<MinZuInfo> minzus = new MinZuDAO().getAll();
request.setAttribute("minzus", minzus);//给到jsp中的民族下拉列表显示所有民族使用
request.getRequestDispatcher("/StudentAddNew.jsp").forward(request,
response);
} else if (action.equals("addnewSubmit"))
{
String name = RupengUtils.getParameter(request, "name");
/*
boolean gender = Boolean.parseBoolean(request
.getParameter("gender"));*/
boolean gender ="male".equals(request.getParameter("gender"));
String birthDay = request.getParameter("birthDay");
Date dateBirthDay = Date.valueOf(birthDay);
int classId = Integer.parseInt(request.getParameter("classId"));
boolean teChangSheng = "on".equalsIgnoreCase(request
.getParameter("teChangSheng"));
int minZuId = Integer.parseInt(request.getParameter("minZuId"));
StudentInfo student = new StudentInfo();
student.setBirthDay(dateBirthDay);
student.setClassId(classId);
student.setGender(gender);
student.setMinZuId(minZuId);
student.setName(name);
student.setTeChangSheng(teChangSheng);
new StudentDAO().addnew(student);
response.sendRedirect("student?action=list");
} else if (action.equals("edit"))
{
int id = Integer.parseInt(request.getParameter("id"));
StudentInfo student = new StudentDAO().getById(id);
request.setAttribute("student", student);
List<MinZuInfo> minzus = new MinZuDAO().getAll();
request.setAttribute("minzus", minzus);//给到jsp中的民族下拉列表显示所有民族使用
request.getRequestDispatcher("/StudentEdit.jsp").forward(request,
response);
} else if (action.equals("editSubmit"))
{
int id = Integer.parseInt(request.getParameter("id"));
String name = RupengUtils.getParameter(request, "name");
boolean gender = Boolean.parseBoolean(request
.getParameter("gender"));
String birthDay = request.getParameter("birthDay");
Date dateBirthDay = Date.valueOf(birthDay);
int classId = Integer.parseInt(request.getParameter("classId"));
boolean teChangSheng = "on".equalsIgnoreCase(request
.getParameter("teChangSheng"));
int minZuId = Integer.parseInt(request.getParameter("minZuId"));
StudentInfo student = new StudentInfo();
student.setId(id);
student.setBirthDay(dateBirthDay);
student.setClassId(classId);
student.setGender(gender);
student.setMinZuId(minZuId);
student.setName(name);
student.setTeChangSheng(teChangSheng);
new StudentDAO().update(student);
response.sendRedirect("student?action=list");
} else if (action.equals("list"))
{
List<StudentInfo> list = new StudentDAO().getAll();
request.setAttribute("students", list);
request.getRequestDispatcher("/StudentList.jsp").forward(request,
response);
} else if (action.equals("delete"))
{
int id = Integer.parseInt(request.getParameter("id"));
new StudentDAO().delete(id);
response.sendRedirect("student?action=list");
} else
{
RupengUtils.showError(request, response, "action错误" + action);
}
}
}
【StudentAddNew.jsp】
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>新增学生</title>
</head>
<body>
<form action="student" method="post">
<input type="hidden" name="action" value="addnewSubmit"/>
<table>
<tr><td>姓名:</td><td><input type="text" name="name"/></td><td>
性别:</td><td>
<select name="gender">
<option value="male">男</option>
<option value="female">女</option>
</select>
</td></tr>
<tr><td>出生日期:</td><td><input type="text" name="birthDay"/></td><td>班级:</td><td><input type="text" name="classId"/></td></tr>
<tr><td><input type="checkbox" name="teChangSheng" id="teChangSheng" /><label for="teChangSheng">特长生</label></td><td></td>
<td>民族:</td><td>
<select name="minZuId">
<c:forEach items="${requestScope.minzus}" var="minzu">
<option value="${minzu.id}">${minzu.name}</option>
</c:forEach>
</select>
</td></tr>
</table>
<input type="submit" value="保存"/>
</form>
</body>
</html>
【StudentEdit.jsp】
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>修改学生</title>
</head>
<body>
<form action="student" method="post">
<input type="hidden" name="action" value="editSubmit"/>
<input type="hidden" name="id" value="${student.id }" />
<table>
<tr><td>姓名:</td><td><input type="text" name="name" value="<c:out value='${student.name }'/>"/></td>
<td>性别:</td><td>
<select name="gender">
<option value="male" ${student.gender?'selected':'' }>男</option>
<option value="female"${student.gender?'':'selected' }>女</option>
</select>
</td></tr>
<tr><td>出生日期:</td><td><input type="text" name="birthDay" value="${student.birthDay }"/></td>
<td>班级:</td><td><input type="text" name="classId" value="${student.classId }"/></td></tr>
<tr><td><input type="checkbox" name="teChangSheng" id="teChangSheng" ${student.teChangSheng?'checked':'' }/><label for="teChangSheng">特长生</label></td><td></td>
<td>民族:</td><td>
<select name="minZuId">
<c:forEach items="${requestScope.minzus}" var="minzu">
<option value="${minzu.id}" ${student.minZuId eq minzu.id?'selected':'' }>${minzu.name}</option>
</c:forEach>
</select>
</td></tr>
</table>
<input type="submit" value="保存"/>
</form>
</body>
</html>
【StudentList.jsp】
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>学生管理</title>
</head>
<body>
<p><a href="student?action=addnew">新增学生</a></p>
<table>
<thead>
<tr><td>删除</td><td>修改</td><td>姓名</td><td>性别</td><td>生日</td><td>是否特长生</td></tr>
</thead>
<tbody>
<c:forEach items="${students}" var="s">
<tr><td><a href="student?action=delete&id=${s.id}">删除</a></td><td><a href="student?action=edit&id=${s.id}">修改</a></td>
<td><c:out value="${s.name}"/></td><td>${s.gender }</td><td>${s.birthDay }</td><td>${s.teChangSheng }</td></tr>
</c:forEach>
</tbody>
</table>
</body>
</html>
民族项目列表:
【MinZuDAO.java】
【MinZuInfo.java】
【MinZuDAO.java】
package com.rupeng.web3;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;
public class MinZuDAO
{
public List<MinZuInfo> getAll()
{
List<MinZuInfo> list = new LinkedList<MinZuInfo>();
ResultSet rs = null;
try
{
rs = JdbcUtils.executeQuery("select * from T_MinZus");
while(rs.next())
{
list.add(toModel(rs));
}
return list;
} catch (SQLException e)
{
throw new RuntimeException(e);
} finally
{
JdbcUtils.closeAll(rs);
}
}
private MinZuInfo toModel(ResultSet rs) throws SQLException
{
MinZuInfo info = new MinZuInfo();
info.setId(rs.getInt("Id"));
info.setName(rs.getString("Name"));
return info;
}
}
【MinZuInfo.java】
package com.rupeng.web3;
public class MinZuInfo
{
private int id;
private String name;
public int getId()
{
return id;
}
public void setId(int id)
{
this.id = id;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
}
班级项目列表
【ClassDAO.java】
【ClassInfo.java】
【ClassDAO.java】
package com.rupeng.web3;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;
public class ClassDAO
{
private ClassInfo toModel(ResultSet rs) throws SQLException
{
ClassInfo info = new ClassInfo();
info.setId(rs.getInt("Id"));
info.setName(rs.getString("Name"));
info.setRoomNum(rs.getString("RootNum"));
info.setTeacherId(rs.getInt("TeacherId"));
return info;
}
public List<ClassInfo> getAll()
{
List<ClassInfo> list = new LinkedList<ClassInfo>();
ResultSet rs = null;
try
{
rs = JdbcUtils.executeQuery("select * from T_Classes");
while(rs.next())
{
list.add(toModel(rs));
}
return list;
} catch (SQLException e)
{
throw new RuntimeException(e);
} finally
{
JdbcUtils.closeAll(rs);
}
}
}
【ClassInfo.java】
package com.rupeng.web3;
public class ClassInfo
{
private int id;
private String name;
private String roomNum;
private int teacherId;
public int getId()
{
return id;
}
public void setId(int id)
{
this.id = id;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public String getRoomNum()
{
return roomNum;
}
public void setRoomNum(String roomNum)
{
this.roomNum = roomNum;
}
public int getTeacherId()
{
return teacherId;
}
public void setTeacherId(int teacherId)
{
this.teacherId = teacherId;
}
}
【总结】有的老师会把TeacherInfo类和TeacherDao类合成一个类
JavaBean规范 直接s.name 引用属性getName实际属性为name
boolean属性获取方法既可以以get开头也可以以is开头 都存在就is优先级高