基于MVC模式的增删改查

阅读: 评论:0

基于MVC模式的增删改查

基于MVC模式的增删改查

基于MVC模式的学生管理

  • 前言
  • 一、项目目录
  • 二、具体代码实现
    • 1.数据库操作package org.mabo.dao;
    • 2.学生实体类package ity;
    • 3.service服务package org.mabo.service;
    • 4.控制器package ller;
    • 5.JDBC操作集成工具package org.mabo.util;
    • 6.webapp目录前台代码
  • 三.项目相关依赖
    • maven依赖:
  • 四、运行结果
    • 欢迎页面
    • 增加学生页面
    • 详细信息页面
  • 五、可能存在的问题
    • 配置文件l中DispatcherServlet爆红
    • 新建的maven项目目录不全
  • 六、总结


前言

作者:拜客

  • 该项目采用MVC三层模式,基于Spring框架进行开发。
  • service层集成了dao层负责处理和发送数据给controller
  • controller来进行对后台数据的响应,并且发送到前台(底层还是servlet,并且该项目就是通过servlet项目改写的)
  • dao层负责专门对数据库操作
  • 该项目属于半前后端分离
  • 该项目是maven项目
  • 基本实现了对学生信息的增删改差
  • 不足之处是在对学生进行增加的时候学生已经存在,导致添加失败没有提示
  • 是否添加学生成功没有显示

一、项目目录

二、具体代码实现

1.数据库操作package org.mabo.dao;

IStudentDao.java代码如下(示例):

public interface IStudentDao {//查询全部学生public List<Student> queryAllStudent();public Student queryStudentBySno(int sno);public boolean isExist(int sno) ;public boolean addStudent(Student student) ;public boolean deleteStudentBySno(int sno);public boolean updateStudentBySno(int sno,Student student) ;}

StudentDaoImpl.java代码如下(示例):

package org.mabo.dao.impl;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;import org.mabo.dao.IStudentDao;
import ity.Student;
import org.mabo.util.DBUtil;//数据访问层  原子性
public class StudentDaoImpl implements IStudentDao{public static int  getTotalCount(String sql) {ResultSet rs=null;int count=-1;rs&#uteQuery(sql, null);try {()) {count&#Int(1);}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally {DBUtil.closeAll();}return count;}//查询全部学生public List<Student> queryAllStudent() {List<Student> students=new ArrayList<Student>();Student student=new Student();ResultSet rs=null;try {String sql="select *from student";rs&#uteQuery(sql, null);()) {int no&#Int("sno");String name&#String("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) {// TODO Auto-generated catch blocke.printStackTrace();return null; } catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();return null; }finally {DBUtil.closeAll();}}public Student queryStudentBySno(int sno) {ResultSet rs=null;Student student=new Student();try {String sql="select *from student where sno=?";Object[]params= {sno};rs&#uteQuery(sql, params);()) {int no&#Int("sno");String name&#String("sname");int age= rs.getInt("sage");String address= rs.getString("saddress");student=new  Student(no,name,age,address);}return student;} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();return null; } catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();return null; }finally {DBUtil.closeAll();}}public boolean isExist(int sno) {return queryStudentBySno(sno)==null ? false:true;}public boolean addStudent(Student student) {String sql="insert into student values(?,?,?,?)";Object[]params= {Sno(),Sname(),Sage(),Sadress()};uteUpdate(sql, params);}public boolean deleteStudentBySno(int sno) {String sql="DELETE FROM student WHERE sno=?";Object[]params= {sno};uteUpdate(sql, params);}public boolean updateStudentBySno(int sno,Student student) {String sql="update student set sname=? ,sage=?,saddress=? where sno=?";Object[]params= {Sname(),Sage(),Sadress(),Sno()};uteUpdate(sql, params);}}

2.学生实体类package ity;

Student.java代码如下(示例):

package ity;
//实体类
public class Student {private int sno;private String sname;private int sage;private String 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 getSadress() {return saddress;}public void setSadress(String sadress) {this.saddress = sadress;}public Student(int sno, String sname, int sage, String sadress) {super();this.sno = sno;this.sname = sname;this.sage = sage;this.saddress = sadress;}public Student() {}public Student( int sage, String sadress) {this.sage = sage;this.saddress = sadress;}@Overridepublic String toString() {return "Student [sno=" + sno + ", sname=" + sname + ", sage=" + sage + ", saddress=" + saddress + "]";}}

3.service服务package org.mabo.service;

IStudentService.java代码如下(示例):

package org.mabo.service;import java.util.List;import ity.Student;public interface IStudentService {public boolean addStudent(Student student);//删除学生public boolean deleteStudent(int sno) ;//更新学生信息public boolean updateStudentBySno(int sno,Student student) ;//根据学号查询学生public Student queryStudentBySno(int sno) ;//查询所有学生public List<Student> queryAllStudent();
}

StudentServiceImpl.java代码如下(示例):

package org.mabo.service.impl;import org.mabo.dao.IStudentDao;
import org.mabo.dao.impl.StudentDaoImpl;
import ity.Student;
import org.mabo.service.IStudentService;import java.util.List;
//业务逻辑层
//负责对dao层进行组装
public class StudentServiceImpl implements IStudentService{StudentDaoImpl studentDao=new StudentDaoImpl();//增加学生public boolean addStudent(Student student) {if(studentDao.Sno())) {studentDao.addStudent(student);return true;}else {return false;}}//删除学生public boolean deleteStudent(int sno) {if(studentDao.isExist(sno)) {return studentDao.deleteStudentBySno(sno);}return false;	}//更新学生信息public boolean updateStudentBySno(int sno,Student student) {if(studentDao.isExist(sno)) {return studentDao.updateStudentBySno(sno, student);}return false;}//根据学号查询学生public Student queryStudentBySno(int sno) {return studentDao.queryStudentBySno(sno);}//查询所有学生public List<Student> queryAllStudent(){return studentDao.queryAllStudent();}}

4.控制器package ller;

MyController.java代码如下(示例):

package ller;import ity.Student;
import com.mabo.service.IStudentService;
import com.mabo.service.impl.StudentServiceImpl;
import org.springframework.http.HttpRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.List;@Controller
public class MyController {@RequestMapping(value = "/some.do")public ModelAndView doSome(){//处理some.do请求,相当于service调用处理完成了ModelAndView mv = new ModelAndView();//添加数据,框架在请求的最后把数据放入到request作用域//request.setAttribute("msg","欢迎使用....");mv.addObject("msg","欢迎使用springmvc做web开发");mv.addObject("fun","执行的是doSome方法");//指定视图,指定视图的完整路径//框架对视图执行的forward操作&#RequestDispather("/show.jsp").forward(...)mv.setViewName("show.jsp");return mv;}@RequestMapping(value = "/queryAllStudent.do")public ModelAndView doQueryAllStudent(){IStudentService service=new StudentServiceImpl();List<Student> students= service.queryAllStudent();System.out.String());//处理some.do请求,相当于service调用处理完成了ModelAndView mv = new ModelAndView();//添加数据,框架在请求的最后把数据放入到request作用域//request.setAttribute("msg","欢迎使用....");mv.addObject("students",students);//指定视图,指定视图的完整路径//框架对视图执行的forward操作&#RequestDispather("/show.jsp").forward(...)mv.setViewName("/index2.jsp");return mv;}@RequestMapping(value = "/AddStudentServlet.do")public ModelAndView doAddStudent(HttpServletRequest request){try {request.setCharacterEncoding("utf-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}int no = Integer.Parameter("sno")) ;String name = Parameter("sname");int age =Integer.Parameter("sage")) ;String address = Parameter("saddress");Student student=new Student(no,name,age,address);IStudentService service=new StudentServiceImpl();boolean result= service.addStudent(student);ModelAndView mv = new ModelAndView();if(result==true) {System.out.print("增加成功");mv.setViewName("/queryAllStudent.do");}else {System.out.print("增加失败");}return mv;}@RequestMapping(value = "/QueryStudentBySno.do")public ModelAndView doQueryStudentBySno(HttpServletRequest request) {try {request.setCharacterEncoding("utf-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}int no = Integer.Parameter("sno"));IStudentService service = new StudentServiceImpl();Student student = service.queryStudentBySno(no);if (student != null) {ModelAndView mv = new ModelAndView();//添加数据,框架在请求的最后把数据放入到request作用域//request.setAttribute("msg","欢迎使用....");mv.addObject("student", student);//指定视图,指定视图的完整路径//框架对视图执行的forward操作&#RequestDispather("/show.jsp").forward(...)mv.setViewName("personInfo.jsp");return mv;} else {System.out.println("失败");}return null;}@RequestMapping(value = "/DeleteStudentServlet.do")public ModelAndView doDeleteStudent(HttpServletRequest request) {int no = Integer.Parameter("sno")) ;IStudentService service=new StudentServiceImpl();boolean result=service.deleteStudent(no);if(result) {ModelAndView mv = new ModelAndView();mv.setViewName("/queryAllStudent.do");return  mv;}else return null;}@RequestMapping(value = "/UpdateStudent.do")public ModelAndView doUpdateStudent(HttpServletRequest request) {try {request.setCharacterEncoding("utf-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}int no = Integer.Parameter("sno")) ;String name = Parameter("sname");int age =Integer.Parameter("sage")) ;String address = Parameter("saddress");Student student=new Student(no,name,age,address);IStudentService service=new StudentServiceImpl();boolean result= service.updateStudentBySno(no, student);ModelAndView mv=new ModelAndView();if(result) {System.out.print("成功");mv.setViewName("/queryAllStudent.do");return mv;}else {System.out.print("失败");return null;}}}

5.JDBC操作集成工具package org.mabo.util;

DBUtil.java代码如下(示例):

package org.mabo.util;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.ArrayList;
import java.util.List;import ity.Student;public class DBUtil {static String URL = "jdbc:mysql://localhost:3306/user?serverTimezone=UTC" ;static String USERNAME = "root" ;static String PWD = "368542";public static Connection connection=null;public static PreparedStatement pStatement=null;public static ResultSet rs=null;public static Connection getConnection() throws ClassNotFoundException, SQLException {Class.forName(&#sql.cj.jdbc.Driver");Connection(URL, USERNAME, PWD);}public static PreparedStatement createPreparedStatement(String sql, Object[] params) throws ClassNotFoundException, SQLException {pStatement=getConnection().prepareStatement(sql);if(params!=null) {for(int i=0;i<params.length;i++) {pStatement.setObject(i+1, params[i]);}}return pStatement;}public static  boolean executeUpdate(String sql, Object[] params) {try {pStatement=createPreparedStatement(sql,params);int count&#uteUpdate();if(count>0) {return true;}else {return false;}} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();return false; } catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();return false; } catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();return false; }finally {try {if(pStatement!=null) {pStatement.close();}if(connection!=null) {connection.close();}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}public static  ResultSet executeQuery(String sql,Object[]params) {try {pStatement=createPreparedStatement(sql,params);rs&#uteQuery();return rs;} catch (ClassNotFoundException | SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();return null;}	}public static void closeAll() {try {if(DBUtil.rs!=null) {DBUtil.rs.close();}if(DBUtil.pStatement!=null) {DBUtil.pStatement.close();}tion!=null) {tion.close();}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}

6.webapp目录前台代码

index.jsp代码如下(示例):

<%@page import="java.util.List"%>
<%@page import="ity.Student"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="" method="post" ><table border="1"><tr><th>学号</th><th>姓名</th><th>年龄</th><th>地址</th><th>操作</th></tr><%List<Student> students=(List<Student>)Attribute("students");for(Student student:students){%>		<tr><th><a href="QueryStudentBySnoServlet?sno=<%&#Sno() %>"><%&#Sno() %></a></th><th><a><%&#Sname() %></a></th><th><a><%&#Sage() %></a></th><th><a><%&#Sadress() %></a></th><th><a href="DeleteStudentServlet?sno=<%&#Sno() %>">删除</a></th></tr><%		}%></table><a href="add.jsp">新增</a>
</form>
</body>
</html>

personInfo.jsp代码如下(示例):

<%@page import="ity.Student"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>个人信息</title>
</head>
<body>
<%Student student=(Attribute("student");
%>
<form action="UpdateStudentServlet" method="post">学号:<input type="text" name="sno" value="<%&#Sno() %>" readonly="readonly"><br>姓名:<input type="text" name="sname" value="<%&#Sname() %>"><br>年龄:<input type="text" name="sage" value="<%&#Sage() %>"><br>地址:<input type="text" name="saddress" value="<%&#Sadress() %>"><br><input type="submit" value="修改"><br><a href="QueryAllStudentServlet">返回</a>
</form>
</body>
</html>

add.jsp代码如下(示例):

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="AddStudentServlet" method="post">学号:<input type="text" name="sno"><br>姓名:<input type="text" name="sname"><br>年龄:<input type="text" name="sage"><br>地址:<input type="text" name="saddress"><br><input type="submit" value="新增"><br><a href="QueryAllStudentServlet">返回</a>
</form>
</body>
</html>

三.项目相关依赖

maven依赖:

<?xml version="1.0" encoding="UTF-8"?><project xmlns:xsi="" xmlns=".0.0"xsi:schemaLocation=".0.0 .0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.mabo</groupId><artifactId>SpringMVC</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><mavenpiler.source>1.8</mavenpiler.source><mavenpiler.target>1.8</mavenpiler.target></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><!--servlet--><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><!--spring mvc--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.6.RELEASE</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.16</version></dependency></dependencies><build></build>
</project>

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns=""xmlns:xsi=""xmlns:context=""xsi:schemaLocation="://www.springframework/schema/beans/spring-beans.xsd://www.springframework/schema/context/spring-context.xsd"><!--声明组件扫描器--><context:component-scan base-package="com.mabo"/></beans>

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns=""xmlns:xsi=""xsi:schemaLocation=" .xsd"version="4.0"><!--声明:注册springmvc的核心对象DispatcherServlet需要在tomcat服务器启动后,创建DispatcherServlet对象实例为什么要创建DispatcherServlet对象的实例呢?因为在DispatcherServlet创建过程中,会同时创建springmvc容器对象,读取springmvc的配置文件,把这个配置文件中的对象都配置好,当用户发起请求时就可以直接使用对象了。servlet的初始化会执行init()方法,DispatcherServlet在init()中{//创建容器,读取配置文件webApplicationContext ctx = new ClassPathXmlApplicationContext(&#l");//把容器对象放入到ServletContext中getServletContext().setAttribute(key,ctx);}
--><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--自定义springmvc读取文件的位置--><init-param><!--springmvc配置文件的位置属性--><param-name>contextConfigLocation</param-name><!--指定自定义文件的位置--><param-value>l</param-value></init-param><!--表示在tomcat启动后,创建servlet对象数字表示启动后创建对象的顺序,数值越小,tomcat创建对象越早,要求大于等于0的整数--><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><!--使用框架的时候,url-pattern可以使用两种值1.使用扩展名方式,语法 *.xxxx , xxxx时自定义扩展名。常用的方式 *.do, *.action, *.mvc等等localhost:8080/myweb/some.dolocalhost:8080?myweb/other.do2.使用斜杠"/"--><url-pattern>*.do</url-pattern></servlet-mapping><!--欢迎页面--><welcome-file-list><welcome-file>queryAllStudent.do</welcome-file></welcome-file-list>
</web-app>

四、运行结果

欢迎页面

欢迎页面为controller
跳转后为index.jsp

点击删除自动跳转到index.jsp

增加学生页面

增加学生页面

详细信息页面

点击学生学号进入详细信息
该界面可以修改学生信息,修改完毕跳转到index.jsp
学号不可改

五、可能存在的问题

配置文件l中DispatcherServlet爆红

org.springframework.web.servlet.DispatcherServletr配置的时候爆红,并且在maven依赖中找不到相关的包

	<servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

解决办法:在lib目录导入包spring-web-5.2.6.RELEASE.jar并添加

添加jar包

选择并确定

新建的maven项目目录不全

设置java文件夹为根,添加resources目录

六、总结

[MVC注解的项目参考教学视频]()
[servlet基础参考视频](=38&t=509)
  • 该项目采用MVC三层模式,基于Spring框架进行开发。
  • service层集成了dao层负责处理和发送数据给controller
  • controller来进行对后台数据的响应,并且发送到前台(底层还是servlet,并且该项目就是通过servlet项目改写的)
  • dao层负责专门对数据库操作
  • 该项目属于半前后端分离
  • 该项目是maven项目
  • 基本实现了对学生信息的增删改差
  • 不足之处是在对学生进行增加的时候学生已经存在,导致添加失败没有提示
  • 是否添加学生成功没有显示

本文发布于:2024-02-01 09:58:57,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170675273935838.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:模式   MVC
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23