三层架构:
MVC与三层架构:
三层代码流程解析:
实例流程:
代码实例:
Student.java
package org.student.entity;
public class Student {
private int sno ;
private String sname ;
private int sage ;
private String saddress ;
public Student() {
}
public Student(String sname,int sage, String saddress) {
this.sname = sname;
this.sage = sage;
this.saddress = saddress;
}
public Student(int sno, String sname, int sage, String saddress) {
this.sno = sno;
this.sname = sname;
this.sage = sage;
this.saddress = saddress;
}
public int getSno() {
return sno;
}
public void setSno(int sno) {
this.sno = sno;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public int getSage() {
return sage;
}
public void setSage(int sage) {
this.sage = sage;
}
public String getSaddress() {
return saddress;
}
public void setSaddress(String saddress) {
this.saddress = saddress;
}
@Override
public String toString() {
return this.getSno()+"-"+this.getSname()+"-"+this.getSage()+""+this.getSaddress();
}
}
AddStudentServlet.java
package org.student.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.student.entity.Student;
import org.student.service.IStudentService;
import org.student.service.impl.StudentServiceImpl;
public class AddStudentServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
int no =Integer.parseInt( request.getParameter("sno"));
String name = request.getParameter("sname");
int age = Integer.parseInt( request.getParameter("sage")) ;
String address = request.getParameter("saddress");
Student student = new Student(no,name,age,address) ;
//接口 x = new 实现类();
IStudentService studentService = new StudentServiceImpl();
boolean result = studentService.addStudent(student) ;
/*
* out request response session application
* out: PrintWriter out = response.getWriter() ;
* session: request.getSession()
* application: request.getServletContext()
*/
//设置响应编码
response.setContentType("text/html; charset=UTF-8");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter() ;//响应对象
/*
if(result) {
//out.println("增加成功!");
//response.sendRedirect("QueryAllStudentsServlet");
}else {
//out.println("增加失败!");
//response.sendRedirect("QueryAllStudentsServlet");
}*/
if(!result) {//如果增加失败,给request放入一条数据error
request.setAttribute("error", "addError");
}else {//增加成功
request.setAttribute("error", "noaddError");
}
// response.sendRedirect("QueryAllStudentsServlet");
request.getRequestDispatcher("QueryAllStudentsServlet").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
StudentServiceImpl.java
package org.student.service.impl;
import java.util.List;
import org.student.dao.IStudentDao;
import org.student.dao.impl.StudentDaoImpl;
import org.student.entity.Student;
import org.student.service.IStudentService;
//业务逻辑层:逻辑性的增删改查( 增:查+增) ,对dao层进行的组装
public class StudentServiceImpl implements IStudentService{
IStudentDao studentDao = new StudentDaoImpl();
//根据学号查询学生
public Student queryStudentBySno(int sno) {
return studentDao.queryStudentBySno(sno);
}
//查询全部学生
public List<Student> queryAllStudents(){
return studentDao.queryAllStudents() ;
}
public boolean updateStudentBySno(int sno, Student student) {
if(studentDao.isExist(sno)) {
return studentDao.updateStudentBySno(sno, student) ;
}
return false ;
}
public boolean deleteStudentBySno(int sno) {
if(studentDao.isExist(sno)) {
return studentDao.deleteStudentBySno(sno) ;
}
return false ;
}
public boolean addStudent(Student student) {
if(!studentDao.isExist(student.getSno())) {//不存在
return studentDao.addStudent(student) ;
}else {
System.out.println("此人已存在!");
return false ;
}
}
@Override
public List<Student> queryStudentsByPage(int currentPage, int pageSize) {
return studentDao.queryStudentsByPage(currentPage, pageSize);
}
@Override
public int getTotalCount() {
return studentDao.getTotalCount();
}
}
StudentDaoImpl.java
package org.student.dao.impl;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.student.dao.IStudentDao;
import org.student.entity.Student;
import org.student.util.DBUtil;
//数据访问层:原子性 的增删改查
public class StudentDaoImpl implements IStudentDao{
private final String URL ="jdbc:oracle:thin:@127.0.0.1:1521:ORCL" ;
private final String USERNAME ="scott" ;
private final String PASSWORD ="tiger" ;
//存在大量冗余(重复)
public boolean addStudent(Student student) {//zs 23 xa
String sql ="insert into student(sno,sname,sage,saddress) values(?,?,?,?) " ;
Object[] params = {student.getSno(),student.getSname(),student.getSage(),student.getSaddress()};
return DBUtil.executeUpdate(sql, params) ;
}
//根据学号修改学生: 根据sno知道待修改的人 ,把这个人 修改成student
public boolean updateStudentBySno(int sno,Student student) {//3 -> zs,23,bj
String sql = "update student set sname =?,sage=?,saddress=? where sno=?" ;
Object[] params = {student.getSname(),student.getSage(),student.getSaddress(),sno};
return DBUtil.executeUpdate(sql, params) ;
}
//根据学号删除学生
public boolean deleteStudentBySno(int sno) {
String sql = "delete from student where sno = ?" ;
Object[] params = {sno} ;
return DBUtil.executeUpdate(sql, params) ;
}
//查询全部学生(很多学生)
public List<Student> queryAllStudents() {
PreparedStatement pstmt = null ;
Student student = null;
List<Student> students = new ArrayList<>();
ResultSet rs = null ;
try {
String sql = "select * from student" ;
rs = DBUtil.executeQuery(sql, null) ;
// rs = pstmt.executeQuery() ;
while(rs.next()) {
int no = rs.getInt("sno") ;
String name = rs.getString("sname") ;
int age = rs.getInt("sage");
String address = rs.getString("saddress") ;
student = new Student(no,name,age,address);
students.add(student) ;
}
return students ;
} catch (SQLException e) {
e.printStackTrace();
return null ;
}catch (Exception e) {
e.printStackTrace();
return null ;
}
finally {
DBUtil.closeAll(rs, pstmt, DBUtil.connection);
// try {
// if(rs!=null)rs.close();
// if(pstmt!=null)pstmt.close();
// if(DBUtil.connection!=null)DBUtil.connection.close();
// } catch (SQLException e) {
// e.printStackTrace();
// }
}
}
//根据姓名查询
//根据年龄查询
//查询此人是否存在
public boolean isExist(int sno) {//true:此人存在 false:不存在
return queryStudentBySno(sno)==null? false:true ;
}
//根据学号 查询学生
public Student queryStudentBySno(int sno) {//3
Student student = null;
Connection connection = null ;
PreparedStatement pstmt = null ;
ResultSet rs = null ;
try {
Class.forName("oracle.jdbc.OracleDriver") ;
connection = DriverManager.getConnection( URL,USERNAME,PASSWORD ) ;
String sql = "select * from student where sno =? " ;
pstmt = connection.prepareStatement( sql) ;
pstmt.setInt(1, sno);
rs = pstmt.executeQuery() ;
if(rs.next()) {
int no = rs.getInt("sno") ;
String name = rs.getString("sname") ;
int age = rs.getInt("sage");
String address = rs.getString("saddress") ;
student = new Student(no,name,age,address);
}
return student ;
} catch (ClassNotFoundException e) {
e.printStackTrace();
return null ;
} catch (SQLException e) {
e.printStackTrace();
return null ;
}catch (Exception e) {
e.printStackTrace();
return null ;
}
finally {
try {
if(rs!=null)rs.close();
if(pstmt!=null)pstmt.close();
if(connection!=null)connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//查询当前页(特定页)的学生集合
//currentPage:页数、当前页的页码
//pageSize:页面大小
@Override
public List<Student> queryStudentsByPage(int currentPage,int pageSize) {
String sql = "select *from "
+"("
+ "select rownum r,t.*from"
+" (select s.* from student s order by sno asc) t"
+" where rownum<=? "
+") where r>=?" ;
// Object[] params = {页数*页面大小,(页数-1)*页面大小+1};
Object[] params = {currentPage*pageSize,(currentPage-1)*pageSize+1};
ResultSet rs = DBUtil.executeQuery(sql, params) ;
List<Student> students = new ArrayList<>();
try {
while(rs.next()) {
Student student = new Student(rs.getInt("sno"),rs.getString("sname") ,rs.getInt("sage"),rs.getString("saddress"));
students.add(student) ;
}
} catch (SQLException e) {
e.printStackTrace();
}catch (Exception e) {
e.printStackTrace();
}finally {
DBUtil.closeAll(rs, DBUtil.pstmt, DBUtil.connection);
}
return students;
}
@Override
public int getTotalCount() {
String sql = "select count(*) from student" ;
return DBUtil.getTotalCount(sql);
}
}