创建数据库表
字段如下:
然后 创建实体类Student 与表中字段名对应 (domain包)
public class Student {
private Integer id;
private String name;
private String age;
private String address;
public Student() {
}
public Student(Integer id, String name, String age, String address) {
this.id = id;
this.name = name;
this.age = age;
this.address = address;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", address='" + address + '\'' +
'}';
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
//另外PageBean类 封装分页所需要的属性
public class PageBean <T>{
private int pageNum;//当前页面页码
private int pageSize;//页面大小
private long totleSize;//总数据数
private int pageCount;//总页数
private List<T> data;//当前页面数据 集合 存放对象
public PageBean(int pageNum, int pageSize, long totleSize, List<T> data) {
this.pageNum = pageNum;
this.pageSize = pageSize;
this.totleSize = totleSize;
this.data = data;
//这里总页数不用传参构造 直接计算出来(总数据和页面大小相除)
pageCount= (int) (totleSize%pageSize==0?totleSize/pageSize:totleSize/pageSize+1);
}
public PageBean() {
}
public int getPageNum() {
return pageNum;
}
public void setPageNum(int pageNum) {
this.pageNum = pageNum;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public long getTotleSize() {
return totleSize;
}
public void setTotleSize(long totleSize) {
this.totleSize = totleSize;
}
public int getPageCount() {
return pageCount;
}
public void setPageCount(int pageCount) {
this.pageCount = pageCount;
}
public List<T> getData() {
return data;
}
public void setData(List<T> data) {
this.data = data;
}
}
创建数据库工具类 放在 utils包
public class DataSourceUtils {
//使用的是阿里的Druid连接池
private static DruidDataSource dataSource;
static {
Properties properties=new Properties();
InputStream in = DataSourceUtils.class.getClassLoader().getResourceAsStream("druid.properties");
try {
properties.load(in);
dataSource= (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
System.out.println("初始化连接池失败");
}
}
//获得连接池的方法 用于工具类操作时据库当作参数传递过去
public static DataSource getDataSource(){
return dataSource;
}
}
//判断字符床是否为空的工具类,用于下面的pageNum和pageSize判断
public class StringUtils {
public static boolean isEmpty(String s){
if(s==null||s.trim().length()==0){
return true;
}else {
return false;
}
}
}
接下来 创建StudentDao接口 和其实现类 Dao是用来操作数据库的 (dao包)
//j接口
public interface StudentDao {
//查找当前页面数据
List<Student> findPage(int pageNum,int PageSize);
void add(Student student);
//获取数据总数
long getCount();
void delete(Integer id);
Student queryById(Integer id);
void update(Student student);
}
//实现类
public class StudentDaoImpl implements StudentDao {
@Override
//获取当前页面的数据 是一个集合 存放学生对象
public List<Student> findPage(int pageNum, int PageSize) {
QueryRunner qr=new QueryRunner(DataSourceUtils.getDataSource());
try {
return qr.query("select * from student order by id limit ?,?",new BeanListHandler<Student>(Student.class),(pageNum-1)*PageSize,PageSize);
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("获取分页失败",e);
}
}
@Override
public void add(Student student) {
QueryRunner qr=new QueryRunner(DataSourceUtils.getDataSource());
Object[] params={null,student.getName(),student.getAge(),student.getAddress()};
try {
qr.update("insert into student values(?,?,?,?)",params);
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
//获取总数据条数
public long getCount() {
QueryRunner qr=new QueryRunner(DataSourceUtils.getDataSource());
try {
return qr.query("select count(*) from student",new ScalarHandler<>());//使用工具类的,new ScalarHandler<>()
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("获取数据总数失败",e);
}
}
@Override
public void delete(Integer id) { //根据学号删除学生
QueryRunner qr=new QueryRunner(DataSourceUtils.getDataSource());
try {
qr.update("delete from student where id=?",id);
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("删除失败",e);
}
}
@Override
public Student queryById(Integer id) {
QueryRunner qr=new QueryRunner(DataSourceUtils.getDataSource());
try {
return qr.query("select * from student where id=?",new BeanHandler<Student>(Student.class),id);
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("查询失败",e);
}
}
@Override
public void update(Student student) {
QueryRunner qr=new QueryRunner(DataSourceUtils.getDataSource());
Object[] params={student.getName(),student.getAge(),student.getAddress(),student.getId()};
try {
qr.update("update student set name=?,age=?,address=? where id=?",params);
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("修改失败",e);
}
}
}
接下来是StudentService接口 及其实现类 (Service包)
//接口
public interface StudentService {
//分页属性太多 封装成pagebean
PageBean<Student> findPage(int pageNum, int pageSize);
void add(Student student);
void delete(Integer id);
Student queryById(Integer id);
void update(Student student);
}
//实现类
public class StudentServiceImpl implements StudentService {
StudentDao studentDao=new StudentDaoImpl();
@Override
//这里将分页属性封装到pageBean中 此方法 返回pageBean对象
public PageBean<Student> findPage(int pageNum, int pageSize) {
//获取页面数据
List<Student> data = studentDao.findPage(pageNum, pageSize);
long totleSize = studentDao.getCount();//获取总数据
//封装
PageBean<Student> pageBean=new PageBean<>(pageNum,pageSize,totleSize,data);
return pageBean;
}
@Override
public void add(Student student) {
studentDao.add(student);
}
@Override
public void delete(Integer id) {
studentDao.delete(id);
}
@Override
public Student queryById(Integer id) {
return studentDao.queryById(id);
}
@Override
public void update(Student student) {
studentDao.update(student);
}
}
然后是servlet 分为 增加,删除,修改,查询 (Servlet包内容)
//增加 从注册界面 接收数据 增加到数据库
@WebServlet(name = "AddServlet",value = "/add")
public class AddServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String name = request.getParameter("name");
String age = request.getParameter("age");
String address = request.getParameter("address");
Student student=new Student(null,name,age,address);
StudentService studentService=new StudentServiceImpl();
studentService.add(student);
response.sendRedirect("/0905web02_war_exploded/stulist");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
//删除
@WebServlet(name = "DeleteServlet",value = "/delete")
public class DeleteServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
StudentService service=new StudentServiceImpl();
Integer id = Integer.parseInt(request.getParameter("id"));
service.delete(id);
response.sendRedirect("/0905web02_war_exploded/stulist");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
//修改 先转到按学号查询的servlet,再传到学生信息的页面 最后到修改界面 修改
//按学号查询
@WebServlet(name = "QueryByIdServlet",value = "/querybyid")
public class QueryByIdServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Integer id = Integer.parseInt(request.getParameter("id"));
StudentService service=new StudentServiceImpl();
Student student = service.queryById(id);
request.setAttribute("student",student);
request.getRequestDispatcher("info.jsp").forward(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
//修改servlet
@WebServlet(name = "UpdateServlet",value = "/update")
public class UpdateServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//使用传统的封装
/* Integer id = Integer.parseInt(request.getParameter("id"));
String name = request.getParameter("name");
String age = request.getParameter("age");
String address = request.getParameter("address");
Student student=new Student(id,name,age,address);*/
Student student =new Student();
try {
//使用BeanUtils工具类优化
BeanUtils.populate(student,request.getParameterMap());
} catch (Exception e) {
e.printStackTrace();
}
StudentService service=new StudentServiceImpl();
service.update(student);
response.sendRedirect("/0905web02_war_exploded/stulist");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
//最后是查询当前页面的学生
@WebServlet(name = "StudentListServlet",value = "/stulist")
public class StudentListServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String pageNum = request.getParameter("pageNum");
String pageSize = request.getParameter("pageSize");
int pn=1;//默认页数
int ps=5;//默认页面大小
//StringUtils判断拿到的字符串是否为空
if(!StringUtils.isEmpty(pageNum)){
pn = Integer.parseInt(pageNum);
if(pn<=0){
pn=1;
}
}
if(!StringUtils.isEmpty(pageSize)){
ps = Integer.parseInt(pageSize);
if(ps<=0){
ps=5;
}
}
StudentService service=new StudentServiceImpl();
PageBean<Student> pageBean = service.findPage(pn, ps);
request.setAttribute("pageBean",pageBean);//将分页信息封装到pagebean中 放到request转发到信息显示页面stuinfo.jsp
request.getRequestDispatcher("stuinfo.jsp").forward(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
接下来是前端页面
学生信息显示界面 可用于修改数据
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>详细信息</title>
</head>
<body>
这里在表单中修改完数据 直接 传到修改servlet中 操作数据库更改数据
<form action="${pageContext.request.contextPath}/update" method="post">
学生id:<input type="text" name="id" value="${student.id}" readonly="readonly"/><br>
学生姓名:<input type="text" name="name" value="${student.name}"/><br>
学生年龄:<input type="text" name="age" value="${student.age}"/><br>
学生地址:<input type="text" name="address" value="${student.address}"/><br>
<input type="submit" value="修改"/><br>
</form>
</body>
</html>
主页面 显示学生信息 用到了jstl中的遍历 需要导包
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>学生信息</title>
</head>
<body>
<table align="center" border="1px">
<tr>
<td>id</td>
<td>姓名</td>
<td>年龄</td>
<td>地址</td>
<td colspan="2" align="center">操作</td>
</tr>
<c:forEach var="stu" items="${pageBean.data}">
<tr>
<td>${stu.id}</td>
<td>${stu.name}</td>
<td>${stu.age}</td>
<td>${stu.address}</td>
<td><a href="${pageContext.request.contextPath}/delete?id=${stu.id}">删除</a></td>
<td><a href="${pageContext.request.contextPath}/querybyid?id=${stu.id}">修改</a></td>
</tr>
</c:forEach>
</table>
<div align="center">
<a href="${pageContext.request.contextPath}/stulist?pageNum=1&pageSize=${pageBean.pageSize}">首页</a>
<a href="${pageContext.request.contextPath}/stulist?pageNum=${pageBean.pageNum-1}&pageSize=${pageBean.pageSize}">上一页</a>
<a href="${pageContext.request.contextPath}/stulist?pageNum=${pageBean.pageNum+1}&pageSize=${pageBean.pageSize}">下一页</a>
<a href="${pageContext.request.contextPath}/stulist?pageNum=${pageBean.pageCount}&pageSize=${pageBean.pageSize}">尾页</a>
</div>
</body>
</html>
Durid连接池的配置文件:druid.properties
#连接设置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/gogogo?useSSL=true&characterEncoding=utf8
username=root
password=123456
#<!-- 初始化连接 -->
initialSize=10
#最大连接数量
maxActive=50
#<!-- 最小空闲连接 -->
minIdle=5
#<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->
maxWait=5000
本次所用到的jar包
及其数据库连接池配置文件