简介
流程
一、Moudle
1.准备数据库和连接池
- 数据库创建
mysql> create database studentmessages;
Query OK, 1 row affected (0.47 sec)
mysql> use studentmessages;
Database changed
mysql> create table student(id int primary key auto_increment,name varchar(10),age int,sex varchar(5));
Query OK, 0 rows affected (1.07 sec)
mysql> insert into student(name,age,sex) values('张三',19,'男'),('李四',20,'男'),('王六',21,'女'),('钱七',24,'女');
Query OK, 4 rows affected (0.55 sec)
Records: 4 Duplicates: 0 Warnings: 0
- 工具类
propertites:
driverclass=com.mysql.cj.jdbc.Driver
uname=root
upass=027050
url=jdbc:mysql://localhost:3306/usermessage?serverTimezone=UTC
initialSize=5
maxActive=10
minIdle=5
maxWait=3000 - 连接工具
public class BaseDao {
// 1.定义变量
private Connection connection;
private PreparedStatement pps;
private ResultSet resultSet;// 存储查询结果
private int count;// 存储增删改结果
private static String userName;
private static String userPass;
private static String url;
private static String driverName;
private static DruidDataSource dataSource = new DruidDataSource();
// 2.加载驱动(静态代码块之执行一次)
static {
ResourceBundle bundle = ResourceBundle.getBundle("db");
driverName = bundle.getString("driverclass");
url = bundle.getString("url");
userName = bundle.getString("uname");
userPass = bundle.getString("upass");
// 德鲁伊连接池
dataSource.setUsername(userName);
dataSource.setPassword(userPass);
dataSource.setUrl(url);
dataSource.setDriverClassName(driverName);
}
// 3.方法一:获得连接
protected Connection getConnection(){
try {
connection = dataSource.getConnection();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return connection;
}
// 4.方法二:获得预状态通道
protected PreparedStatement getPps(String sql){
try {
pps = getConnection().prepareStatement(sql);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return pps;
}
// 5.方法三:绑定参数(预装态通道内的?)(list保存需要替代?的值的容器)
protected void param(List list){
if(list != null && list.size()>0){
for (int i = 0;i<list.size();i++) {
try {
pps.setObject(i + 1, list.get(i));
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}
// 6.方法四:增删改结果
protected int update(String sql,List list){
getPps(sql);
param(list);
try {
count = pps.executeUpdate();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return count;
}
// 7.方法五:查询结果
protected ResultSet query(String sql,List list){
getPps(sql);
param(list);
try {
resultSet = pps.executeQuery();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return resultSet;
}
// 8.方法六:关闭资源
protected void closeAll(){
try {
if (resultSet != null) {
resultSet.close();
}
if (pps != null) {
pps.close();
}
if (connection != null) {
connection.close();
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
2.bean
public class Student {
private int id;
private String name;
private int age;
private String sex;
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 int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
3.dao
3.1dao接口
package dao;
import bean.Student;
import java.util.List;
public interface MessageDao {
// 获取学生信息
public List<Student> getAll();
}
3.2dao实现
public class MessageDaoIml extends BaseDao implements MessageDao {
@Override
public List<Student> getAll() {
List<Student> studentList = new ArrayList<>();
try {
List list =new ArrayList();
String sql = "select * from student";
ResultSet rs = query(sql,list);
while(rs.next()){
Student student = new Student();
student.setId(rs.getInt("id"));
student.setName(rs.getString("name"));
student.setAge(rs.getInt("age"));
student.setSex(rs.getString("sex"));
studentList.add(student);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
closeAll();
}
return studentList;
}
}
二、Control
1.services
1.1 services接口
public interface StudentServices {
public List<Student> getAll();
}
1.2 services实现
public class StudentServicesImpl implements StudentServices {
private MessageDao message =new MessageDaoIml();
@Override
public List<Student> getAll() {
return message.getAll();
}
}
三、View
1.主页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<a href="query">查询学生信息</a>
</body>
</html>
2.跳转页面
servlet通过request传递来了List,可通过标准标签库JSTL对集合进行遍历,配合EL表达式取出Student对象的属性:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>学生信息</title>
<style>
.table{
border-style: solid;
border-width: 1px;
border-color: black;
width: 500px;
background-color: #FFC0CB;
border-spacing: 0;
}
td{
border-style: solid;
border-width: 1px;
border-color: black;
}
</style>
</head>
<body>
<%
Object stuList = request.getAttribute("stuList");
%>
<h1>学生信息查询结果</h1>
<table class="table">
<tr>
<td>ID</td>
<td>姓名</td>
<td>年龄</td>
<td>性别</td>
</tr
<c:forEach items="${stuList}" var="stu">
<tr>
<td>${stu.id}</td>
<td>${stu.name}</td>
<td>${stu.age}</td>
<td>${stu.sex}</td>
</tr
</c:forEach>
</table>
</body>
</html>