javaee三层架构案例--简单学生管理系统

背景

学了jdbc、jsp等需要串起来,不然会忘记

项目环境

win10
jdk11
mysql8.0.13

jar包

c3p0-0.9.5.2
commons-dbutils-1.7
jstl
mchange-commons-java-0.2.11
mysql-connector-java-8.0.14
standard

项目地址

还不会用github,所以只能这样咯

链接:https://pan.baidu.com/s/1JwSag2RIEBVhGZVAETNqlQ
提取码:o0x3
复制这段内容后打开百度网盘手机App,操作更方便哦

准备数据库

/*创建一个存放学生信息的表格*/

/*创建数据库stus*/
CREATE DATABASE stus; 
/*使用stus*/
USE stus;
/*创建学生表stu*/
CREATE TABLE stu(
  sid INT PRIMARY KEY AUTO_INCREMENT,
  sname VARCHAR(20),
  gender VARCHAR(5),
  phone VARCHAR(20),
  birthday DATE,
  hobby VARCHAR(50),
  info VARCHAR(200)
);

做一个主页

通过IDEA在web目录下创建一个index.jsp作为主页
页面先只有一个超链接叫做 显示所有学生列表
还没写链接到哪个Servlet,用 # 先代替下,等创建好了再写回来

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
   <title>首页</title>
</head>
<body>
<h3><a href="/studentList">显示所有学生列表</a></h3>
</body>
</html>

创建一个Servlet

index.jsp标记1出用的Servlet,创一个Servlet的包,创一个StudentListServlet类,用doGet方法(转发需要用doGet方法,且用doPost没有这个需求)

Servlet接受用户点击,去通知service实现业务逻辑

//这个是用反射,写在类上一行,也可以在web.xml中配置Servlet
@WebServlet(name = "StudentListServlet",urlPatterns = {"/StudentListServlet"})

//写在doGet方法然后在doPost方法中互调....
//因为之后转发只能用doGet方法,有点麻烦

//面向接口编程
//StudentService:接口 StudentServiceImpl:接口实现类
StudentService service = new StudentServiceImpl();
//调用实现类的findAll方法,把结果放在一个list表中,泛型为Student对象
List<Student> list = service.findAll();

创建Student类

上文中缺少Student类,这是一个JavaBean,封装用。

!!!JavaBean一定要有一个空参!!!

!!!JavaBean是用空参来反射得到实例的!!!

创建domian包,里面创建Student类,包含和数据库名字、类型对应的成员变量

//数据类型为Date的导util包,sql包中的Date也是继承该util包中的  
import java.util.Date;
  private int sid;
    private String sname;
    private String gender;
    private String phone;
    private Date birthday;
    private String hobby;
    private String info;
//生成getXxx和setXxx方法
//生成toString方法

创建一个Service接口和Service的实现类

上面没有Service接口,创建一个service包,下面创建StudentService接口

这里是为了实现学生业务逻辑的处理规范

目前只有一个查找所有学生信息的业务

public interface StudentService {
  //这里的throws SQLException是在最后面dao层发现需要抛,一步一步返回来的,当然IDEA中一键生成
    List<Student> findAll() throws SQLException;
}

创建接口的实现类,在service包下创建一个impl包,在impl包内创建StudentServiceImpl实现类

实现学生业务,findAll方法是去数据库中查询,因此要调用查询数据库的方法

public class StudentServiceImpl implements StudentService {
    @Override
    public List<Student> findAll() throws SQLException {
        //StudentDao:接口 StudentDaoImpl:实现类
        StudentDao dao = new StudentDaoImpl();
        return dao.findAll();
    }
}

创建dao层中接口和实现类

创建一个dao包,创建StudentDao接口,在dao包中创建一个impl包,里面创建一个StudentDaoimpl实现类

public interface StudentDao {
    List<Student> findAll() throws SQLException;
}

StudentDaoImpl实现findAll方法,通过C3P0,自己的工具类JDBCUtil调用

通过数据库代码查询,结果返回到BeanListHandler<>(Student.class)中

public class StudentDaoImpl implements StudentDao {
    @Override
    public List<Student> findAll() throws SQLException {
        QueryRunner runner = new QueryRunner(JDBCUtil02.getDataSource());
        String sql = "SELECT * FROM stu";
        return runner.query(sql, new BeanListHandler<>(Student.class));
    }
}

把查询出的结果发到list.jsp中

在StudentListServlet类的doGet方法中,要把结果存到request域中

//名字就叫list,值也是list
request.setAttribute("list",list);

再把结果转发到list.jsp中,不需要改变页面地址

request.getRequestDispatcher("list.jsp").forward(request, response);

目前先做红框内的东西,分析一下,就是2行8列,一行是标题,一行是内容(靠循环出来的结果)
1591648-20190124180614083-336687813.png

要用el表达式,导包jstl.jar和standard.jar
导jstl标签库

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--2行8列展示结果--%>
<table border="1px" width="600px">
    <tr>
        <td>编号</td>
        <td>姓名</td>
  
  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值