首先有以下几个包:
1.controller
控制层,对用户的请求进行响应
2.dao
数据层接口标准
3.daoimpl
数据层实现层
4.model
实体类层
5.service
业务层接口标准
6.serviceimpl
业务实现层
7.util
工具层
-------------------------------------------------------------------------------------------------------------------------------------------------------分割线--------------------------------------------------------------------------------
首先我们封装JDBC
package Util;import java.io.IOException;import java.io.InputStream;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.Properties;import org.junit.jupiter.api.Test;public class DbUtil { public static Connection con=null; public static PreparedStatement stmt=null; public static ResultSet res=null; //加载驱动 static { try { Class.forName("com.mysql.cj.jdbc.Driver"); System.out.println("数据库驱动加载成功"); }catch(ClassNotFoundException e) { e.printStackTrace(); } } public static Connection getConnection() { Properties p=new Properties(); ClassLoader classLoader=Thread.currentThread().getContextClassLoader(); InputStream in=classLoader.getResourceAsStream("db.properties"); String username=null; String password=null; String url=null; try { p.load(in); username=p.getProperty("username"); password=p.getProperty("password"); url=p.getProperty("url"); System.out.println("外部文件加载成功"); }catch(IOException e1) { e1.printStackTrace(); } try { if(con==null) { con=DriverManager.getConnection(url, username, password); System.out.println("数据库链接成功"); } }catch(SQLException e) { e.printStackTrace(); } return con; } public static void CloseConnection(Connection con) { try { if(res!=null) { res.close(); } if(stmt!=null) { stmt.close(); } if(con!=null) { con.close(); } }catch(SQLException e) { e.printStackTrace(); } }}
里面有两个方法一个方法返回con对象供数据层使用,一个方法关闭数据库连接
然后我们编写数据层接口标准
public interface UserDao { public ListgetAllUser();//列出全部用户}
然后编写数据层
package daoimpl;//数据层接口实现类import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import Util.DbUtil;import dao.UserDao;import model.User;public class UserDaoImpl implements UserDao{ //JDBC的三个接口 Connection con=null; PreparedStatement stmt=null; ResultSet res=null; //按照数据层开发标准实现接口方法 @Override //返回一个list集合 public ListgetAllUser() { //实例化一个list集合 List list=new ArrayList (); //将要执行的sql语句 String sql="select * from user"; //执行数据库连接 try { //由数据库工具连接类返回一个数据库连接 con=DbUtil.getConnection(); stmt=con.prepareStatement(sql); res= stmt.executeQuery(); while(res.next()) { User u=new User(); u.setId(res.getString("id")); u.setUsername(res.getString("username")); u.setPassword(res.getString("password")); list.add(u); } }catch(SQLException e) { e.printStackTrace(); } return list; } }
使用工具类包里面返回的数据库连接对象,然后使用预处理的sql,读取到数据库里面的信息,然后把读取到的数据利用实体类的setter和getter方法来存到实体类里然后存在集合里面。
然后编写业务层开发标准
import java.util.List;import model.User;public interface UserService { public ListgetAllUser();//列出全部用户}
然后编写业务层实现类
public class UserServiceImpl implements UserService { //取到数据层类 private UserDao userDao; @Override public ListgetAllUser() { List list=userDao.getAllUser(); return list; }}
调用数据层接口的getAllUser()方法来获取到集合
然后编写控制层
package controller;//控制层import java.io.IOException;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.List;import javax.servlet.RequestDispatcher;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import daoimpl.UserDaoImpl;import model.User;@WebServlet("/servlet01")public class ListServlet extends HttpServlet { private static final long serialVersionUID = 1L; UserDaoImpl userDao=new UserDaoImpl();//访问数据层 public ListServlet() { super(); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().append("Served at: ").append(request.getContextPath()); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //通过数据层得到数据库里的数据并存到集合里 Listlist=userDao.getAllUser(); if(list!=null) { System.out.println("数据读取成功!"); } //把数据存起来 request.setAttribute("users", list); //重定向到数据展示页 request.getRequestDispatcher("list.jsp").forward(request, response); }}
然后把集合存到request里面,并且重定向到list.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>列表
使用jsp的jstl标签来循环读取request里的数据