springMVC +MySQL 完成简单的增删改查外加代码优化

本文详细介绍了使用SpringMVC框架实现增删改查功能的全过程,包括配置文件详解、DAO层代码示例、控制器代码及视图展示,通过具体案例帮助读者掌握SpringMVC的实际应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需要的jar包:

 

要完成一个简单的增删改查首先要有明确的思路:

因为用到springMVC框架,所以我们看一下他的流程:

1、  用户发送请求至前端控制器DispatcherServlet。

2、  DispatcherServlet收到请求调用HandlerMapping处理器映射器。

3、  处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。

4、  DispatcherServlet调用HandlerAdapter处理器适配器。

5、  HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。

6、  Controller执行完成返回ModelAndView。

7、  HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。

8、  DispatcherServlet将ModelAndView传给ViewReslover视图解析器。

9、  ViewReslover解析后返回具体View。

10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。

11、 DispatcherServlet响应用户。

1.先完成对web.xml 的配置,其实简单的一些增删改查不用配置太多;

(1) 配置中央控制器(也是前端控制器)DispatcherServlet

 

<servlet>
        <servlet-name>springDispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <!-- Map all requests to the DispatcherServlet for handling -->
    <servlet-mapping>
        <servlet-name>springDispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

 

又因为和前端含接就有请求和响应,那么就有可能出现请求或者是响应的中文乱码,所以我配置了

filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>

配置完web.xml

在配置springMVC.xml

先配置一个扫描包的代码:

<context:component-scan base-package="com.lcg.spring.springmvc.shujuku"></context:component-scan>

"com.lcg.spring.springmvc.shujuku" 为包名

 

在配置一个视图解析器:

<bean id ="viewResolver" class ="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"></property> 
<property name="suffix" value =".jsp"></property>

<property name="prefix"  这个是设置springMVC视图解析器viewResolver的前缀

<property name="suffix" 这个是设置springMVC视图解析器viewResolver的后缀

配置完了,就不多说了,上代码:

index.jsp 是完成注册功能

Dao java 代码

package com.lcg.spring.springmvc.shujuku.Dao;

import java.util.List;

import com.lcg.spring.springmvc.shujuku.bean.User;

public interface Dao {
public boolean insert(User user);//录入信息
public boolean delete(String name);//删除信息
public boolean update(String name, User user);//修改信息
public List<User> queryAll() throws ClassNotFoundException;//查询全部信息
public User query(String name) throws ClassNotFoundException;//查询个人信息
}

UserDao 代码:

package com.lcg.spring.springmvc.shujuku.Dao;

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 com.lcg.spring.springmvc.shujuku.bean.User;
import com.lcg.spring.springmvc.shujuku2.DBUtil.DBUtil;
import com.sun.org.apache.regexp.internal.recompile;

public class UserDao implements Dao{

    Connection conn = null;
    PreparedStatement pre = null;
    ResultSet rs = null;
    String URL = "Jdbc:mysql://localhost:3306/读取?characterEncoding=utf-8";//连接数据库语句
    String us = "root";
    String pa = "021117";

    public List<User> queryAll() throws ClassNotFoundException {
        List<User> users = new ArrayList<>();//设置一个集合
        User user = null;
        try {
            
            String sql = "select *from zhuci";//数据库的查询语句
            rs= DBUtil.executeQuery(sql, null);//调用DBUtil帮助类来驱动
            while (rs.next()) {
                String id = rs.getString("id");
                String name = rs.getString("name");
                String password = rs.getString("password");
                user = new User(id, name, password);
                users.add(user);
                System.out.println(user);
            }
            return users;
            // System.out.println("注册成功");
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return null;
        }finally {
            
            try {
                if(rs!=null) rs.close();//关闭接口
                if(pre!=null)pre.close();
                if(DBUtil.conn!=null) DBUtil.conn.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    }

    }

    public User query(String name) throws ClassNotFoundException {//查询个人信息
        User user = null;
        try {
            
            String sql = "select *from zhuci where name =?";//查询个人信息的数据库语句
            Object [] prean = {name};
            rs = DBUtil.executeQuery(sql, prean);
            System.out.println(rs);
            if (rs.next()) {
                String id = rs.getString("id");
                String names = rs.getString("name");
                String password = rs.getString("password");

                user = new User(id, names, password);
            }

            //System.out.println(user);
            return user;
            // System.out.println("注册成功");
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return null;
        }finally {
            
            try {
                if(rs!=null) rs.close();
                if(pre!=null)pre.close();
                if(DBUtil.conn!=null) DBUtil.conn.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    }

    }
    
    public String denglu(String name ,String password)
    {
        
        
        try {
            Class.forName("com.mysql.jdbc.Driver");
            
            conn = DriverManager.getConnection(URL, us, pa);
            String sql = "select *from zhuci where name= ?and password=?";//登陆的查询语句
            pre = conn.prepareStatement(sql);//预编译数据库语句
            pre.setString(1, name);
            pre.setString(2, password);
            rs = pre.executeQuery();//获得查询到的内容
            if (rs.next()) {
                System.out.println("此账号存在,允许登陆");
                return "1";
            }else {
                System.out.println("此账号不存在,不允许登陆,登陆失败");
                return "0";
            }
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return "0";
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return "0";
        }
        
    }

    @Override
    public boolean insert(User user) {
        
        String sql ="insert into zhuci (id,name ,password) values (?,?,?)";//录入语句
        Object [] prean = {user.getId(),user.getName(),user.getPassword()};把要录入的信息放到prean数组中
        return DBUtil.executeUpdate(sql, prean);//调用帮助类驱动数据库语句
    }
    @Override
    public boolean delete(String name) {
        // TODO Auto-generated method stub
        String sql ="delete from zhuci where name = ?";//删除数据库语句
        Object [] prean = {name};
        return DBUtil.executeUpdate(sql, prean);
    }
    @Override
    public boolean update(String name, User user) {
        // TODO Auto-generated method stub
        String sql ="update zhuci set id =?,password =? where name =?";//修改数据库语句
        Object [] prean = {user.getId(),user.getPassword(), name};
        return DBUtil.executeUpdate(sql, prean);
    }
    
    
}

java链接MySQL的优化:DBUtil

 

package com.lcg.spring.springmvc.shujuku2.DBUtil;

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 com.lcg.spring.springmvc.shujuku.bean.User;

public class DBUtil {
    
    
    private static final String URL = "Jdbc:mysql://localhost:3306/读取?characterEncoding=utf-8";
    private static final String us = "root";
    private static final String pa = "021117";
    public static Connection conn = null;
    public static PreparedStatement pre = null;
    public static ResultSet rs = null;
    
    public static boolean executeUpdate(String sql,Object [] prean) {
        
        
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(URL, us, pa);
            
            pre = conn.prepareStatement(sql);
            if (prean!=null) {
                for (int i = 0; i < prean.length; i++) {
                    pre.setObject(i+1, prean[i]);
                }
                }
            int count = pre.executeUpdate();
            System.out.println(count);
            if (count>0) {
                return true;
            }else {
                return false;
            }
            
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return false;
            } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return false;
        }finally {
            
                try {
                    if(pre!=null)pre.close();
                    if(conn!=null) conn.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
        }
        
    }
    
    public static ResultSet executeQuery(String sql,Object [] prean) {
        
        User user = null;
        
        List<User> users = new ArrayList<>();
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(URL, us, pa);
            
            pre = conn.prepareStatement(sql);
            if (prean!=null) {
            for (int i = 0; i < prean.length; i++) {
                pre.setObject(i+1, prean[i]);
            }
            }
            rs = pre.executeQuery();
            return rs;
            
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        
            return null;
            } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        
            return null;
        }
        

        
    }

}

 

中央控制器代码servleet:

package com.lcg.spring.springmvc.shujuku.servlet;

import java.io.UnsupportedEncodingException;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;

import org.springframework.stereotype.Controller;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.lcg.spring.springmvc.shujuku.Dao.UserDao;
import com.lcg.spring.springmvc.shujuku.bean.User;

import sun.security.util.Password;

@Controller
public class Servleet {
    
    @RequestMapping(value = "/denglu", method = RequestMethod.POST)//设置路径和获取的方法
    public String denglu(User user, HttpServletRequest request ) throws UnsupportedEncodingException {
        
        request.setCharacterEncoding("utf-8");//设置请求的字符编码
        String id = request.getParameter("userid");//从jsp表单中获取内用
        String name = request.getParameter("username");//从jsp表单中获取内用
        String password = request.getParameter("userpassword");//从jsp表单中获取内用
        user = new User(id, name, password);//把获取到的内容放到User中

         request .setAttribute("user", user);//把user放到request域中,方便表单中获取java中的数据
        System.out.println(user);
        UserDao dao = new UserDao();//把UserDao进行实例化
        
        boolean result = dao.insert(user);
        
        if (!result) {//判断
            return "sibai";
        } else {
            System.out.println("录入成功");
            return "success";
        }

    }
    @RequestMapping("/queryall")//设置访问的路径
    public String queryall (HttpServletRequest request) throws ClassNotFoundException {
        UserDao dao = new UserDao();//把UserDao进行实例化
        List<User> users = dao.queryAll();//把从数据库中获取到的数据放到List集合中
        System.out.println(users);
        request.setAttribute("users", users);//把user放到request域中,方便表单中获取java中的数据
        return "Login";//运行成功后返回的路径
    }

    @RequestMapping("/delete")//设置访问的路径
    public String delete(String name,HttpServletRequest request) {
        UserDao dao = new UserDao();
        name = request.getParameter("username");
        boolean result =dao.delete(name);
        
        if (!result) {
            return "Login";
        }
        return "delete";
        
    }
    
    @RequestMapping("/query")
    public String query(String name ,HttpServletRequest request) throws ClassNotFoundException {
        UserDao dao = new UserDao();
        name = request.getParameter("username");
        User user  = dao.query(name);
        request.setAttribute("user", user);
        System.out.println(user);
            return "user";
                    }
    @RequestMapping("/queryupdate")
    public String queryupdate(String name ,HttpServletRequest request) throws ClassNotFoundException {
        UserDao dao = new UserDao();
        name = request.getParameter("username");
        User user  = dao.query(name);
        request.setAttribute("user", user);
        //System.out.println(user);
            return "update";
                    }
    @RequestMapping("/update")
    public String update(String name,User user ,HttpServletRequest request) {
        
        UserDao dao = new UserDao ();
        name  = request.getParameter("username");
        String id = request.getParameter("userid");
        String password = request.getParameter("userpassword");
        user = new User (id,password);
        System.out.println("user+"+user);            
        
        boolean result=dao.update(name, user);
        System.out.println(result);
        if (!result) {
            return "update";
        }
        
        return "updatesuccess";
    }
    
    @RequestMapping("/deng")
    public String  denglu(String name,String password,HttpServletRequest request) {
        UserDao dao = new UserDao();
        name = request.getParameter("username");
        password = request.getParameter("userpassword");
        
        System.out.println(name);
        System.out.println(password);
        String  result = dao.denglu(name, password);
        
        if (result=="1") {
            return "chenggong";
        }else {
        
        return "defult";
        }
    }
        
    }

登陆代码denglu.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>
<h1>登陆界面</h1>
<form action="deng" method = "post">
账号: <input type = "text" name = "username"/><br>
密码:<input type = "password" name = "userpassword"/><br>
<input type = "submit" value = "登陆"/>
</form>
</body>
</html>

 

这是主页面:也就是查询全部学生的显示页面

Login.jsp

<%@page import="com.lcg.spring.springmvc.shujuku.bean.User"%>
<%@page import="java.util.List"%>
<%@ 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>
<h1>主页面</h1>
<table border="1px">
    <tr>
    <th>学号</th>
    <th>姓名</th>
    <th>密码</th>
    <th>操作</th>
    <th>操作</th>
    </tr>
    
    <%
//获取request 域中的数

       List<User> users =(List<User>) request.getAttribute("users");
       
for(User user : users){
    %>

把获取到的数据放进表格中
    <tr>
    <td><%=user.getId() %></td>
    <td><a href ="query?username=<%=user.getName() %>"><%=user.getName() %></a></td>//设置一个超链接访问查询个人的信息的内容
    <td><%=user.getPassword() %></td>
    <td><a href ="delete?username=<%= user.getName()%>" >删除</a></td>//设置一个超链接方便进行对该名字的信息进行删除
    <td><a href ="queryupdate?username=<%= user.getName()%>" >修改</a></td>/设置一个超链接方便进行对该名字的信息进行修改
    </tr>
    
    <%
}
%>
    </table>
    
    <a href ="index.jsp">  注册信息</a>
</body>
</html>

这是显示修改页面的jsp 代码

update.jsp

<%@page import="com.lcg.spring.springmvc.shujuku.bean.User"%>
<%@ 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>

<%
User user =(User)request.getAttribute("user");        //获取request域中的内容
%>
<form action="update">//设置访问的路径
学号:<input type ="text" name = "userid" value ="<%=user.getId()%>" /><br/>
姓名:<input type ="text" name = "username"  value ="<%=user.getName() %>" readonly="readonly"/><br/>
密码:<input type ="text" name = "userpassword" value ="<%=user.getPassword() %>"/><br/>
<a href = "queryall">返回</a>//设置一个超链接方便返回主界面

<input type = "submit"  value = "修改" />

</form>

</body>
</html>

这是查询个人信息的jsp页面代码:

user.jsp

<%@page import="com.lcg.spring.springmvc.shujuku.bean.User"%>
<%@ 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>

<%
   User user =(User)request.getAttribute("user");//获取request域中的内容
%>
<form action="query">
学号:<input type ="text" name = "uid" value ="<%=user.getId()%>" /><br/>
姓名:<input type ="text" name = "uname"  value ="<%=user.getName() %>" readonly="readonly"/><br/>
年龄:<input type ="text" name = "uage" value ="<%=user.getPassword() %>"/><br/>
<a href = "queryall">返回</a>
</form>

</body>
</html>

 

此为登陆失败的代码;

defult.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>
<h1>登陆失败</h1>
<%
response.setHeader("refresh", "0.02;URL=denglu.jsp");//此为页面定时跳转,0.02秒后主动跳转到登陆页面让你重新登陆


%>
</body>
</html>

 

 

最后是效果图了

 

 

 

 

希望对你们有帮助

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值