Spring MVC实现mysql数据库增删改查完整实例

最近刚学了springmvc框架,感觉确实方便了不少,减少了大量的冗余代码。就自己做了个小项目练练手,这是个初级的springmvc应用的项目,没有用到mybatis,项目功能还算完善,实现了基本的增删改查的功能。

项目环境:

-系统:win10

-开发环境:eclipseOxygenReleaseCandidate3(4.7)

-jdk版本:java1.8(121)

-mysql:5.7

-spring:4.0

-tomcat:8.5

用到的技术:

springmvcspringjspjdbcjavaBeanjsjstl

访问地址:http://localhost:8080/你的项目名/all

声明:我只是一个刚入门不久的新手,所写代码难免有出错之处,如发现欢迎各位指出,谢谢大家。

下面就贴上详细过程

1.首先创建一个web项目(DynamicWebProject)

项目名字就自己写了,不再详细写

Spring MVC实现mysql数据库增删改查完整实例_第1张图片

2. 这是我的已完成项目结构

我只是为了实现功能,没有用到接口,只用了简单的三个类,bean包下的实体类,dao层数据库访问类,controller层的界面控制类,

Spring MVC实现mysql数据库增删改查完整实例_第2张图片

所有引用的jar包都在/WebContent/WEB-INF/lib文件夹下,这点与普通的java项目不同。

3. 具体java代码

1.Student类,实体类 首先要写一个javaBean,我的是Student作为javaBean,详细代码如下:

package bean;

public class Student {

  private Integer id;//学生id
  private String name;//学生姓名
  private Double javaScore;//java成绩
  private Double htmlScore;//html成绩
  private Double cssScore;//css成绩
  private Double totalScore;
  public Integer getId() {
  return id;
  }
  public void setId(Integer id) {
  this.id = id;
  }
  public String getName() {
  return name;
  }
  public void setName(String name) {
  this.name = name;
  }
  public Double getJavaScore() {
  return javaScore;
  }
  public void setJavaScore(Double javaScore) {
  this.javaScore = javaScore;
  }
  public Double getHtmlScore() {
  return htmlScore;
  }
  public void setHtmlScore(Double htmlScore) {
  this.htmlScore = htmlScore;
  }
  public Double getCssScore() {
  return cssScore;
  }
  public void setCssScore(Double cssScore) {
  this.cssScore = cssScore;
  }
  public Double getTotalScore() {
  return totalScore;
  }
  public void setTotalScore(Double totalScore) {
  this.totalScore = totalScore;
  }
}

2. StudentDao,数据库访问操作类 然后是dao层即数据访问层的代码,这里使用的是spring封装的一个类(JdbcTemplate),里面有一些操作数据库的方法,不用再自己写大量重复代码,只要写SQL语句。下面是具体代码:

package dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.List;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;

import bean.Student;

public class StudentDao {

  /**
   * @Fields jdbcTemplate : TODO
   */

  private JdbcTemplate jdbcTemplate;

  /**
   * spring提供的类
   * 
   * @param jdbcTemplate
   *      返回值类型: void
   * @author janinus
   */
  public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
  this.jdbcTemplate = jdbcTemplate;
  }

  /**
   * 查询所有学生
   * 
   * @return 返回值类型: List
   * @author janinus
   */
  public List queryAll() {
  String sql = "select id,name,javaScore,htmlScore,cssScore from student";
  //将查询结果映射到Student类中,添加到list中,并返回
  return jdbcTemplate.query(sql, new StudentMapper());
  }

  /**
   * 通过姓名查询
   * 
   * @param name
   * @return 返回值类型: List
   * @author janinus
   */
  public List queryByName(String name) {
  String sql = "select id,name,javaScore,htmlScore,cssScore from student where name like '%" + name + "%'";
  return jdbcTemplate.query(sql, new StudentMapper());
  }

  /**
   * 添加学生
   * 
   * @param student
   * @return 返回值类型: boolean
   * @author janinus
   */
  public boolean addStu(Student student) {
  String sql = "insert into student(id,name,javaScore,htmlScore,cssScore) values(0,?,?,?,?)";
  return jdbcTemplate.update(sql,
    new Object[] { student.getName(), student.getJavaScore(), student.getHtmlScore(),
      student.getCssScore() },
    new int[] { Types.VARCHAR, Types.DOUBLE, Types.DOUBLE, Types.DOUBLE }) == 1;
  }

  /**
   * 删除学生
   * 
   * @param id
   * @return 返回值类型: boolean
   * @author janinus
   */
  public boolean deleteStu(Integer id) {
  String sql = "delete from student where id = ?";
  return jdbcTemplate.update(sql, id) == 1;
  }

  /**
   * 更新学生信息
   * 
   * @param student
   * @return 返回值类型: boolean
   * @author janinus
   */
  public boolean updateStu(Student student) {
  String sql = "update student set name=? ,javaScore=?,htmlScore = ? ,cssScore = ? where id = ?";
  Object stuObj[] = new Object[] { student.getName(), student.getJavaScore(), student.getHtmlScore(),
    student.getCssScore(), student.getId() };
  return jdbcTemplate.update(sql, stuObj) == 1;
  }

  /**
   * 返回总成绩前n名学生
   * 
   * @param num
   * @return 返回值类型: List
   * @author janinus
   */
  public List topNum(int num) {
  String sql = "select id,name,javaScore+htmlScore+cssScore from student order by javaScore+htmlScore+cssScore desc ,name asc limit ?";
  return jdbcTemplate.query(sql, new RowMapper() {

    @Override
    public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
    // TODO Auto-generated method stub
    Student student = new Student();
    student.setId(rs.getInt(1));
    student.setName(rs.getString(2));
    student.setTotalScore(rs.getDouble(3));
    return student;
    }
  }, num);
  }

  /**
   * 
   * StudentMapper数据库映射
   * 
   * @ClassName StudentMapper
   * @author janinus
   * @date 2017年6月27日
   * @Version V1.0
   */

  class StudentMapper implements RowMapper {

  @Override
  public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
    // TODO Auto-generated method stub
    Student student = new Student();
    student.setId(rs.getInt(1));
    student.setName(rs.getString(2));
    student.setJavaScore(rs.getDouble(3));
    student.setHtmlScore(rs.getDouble(4));
    student.setCssScore(rs.getDouble(5));

    return student;
  }

  }
}

3. StudentController ,前后端交互类 最后是与用户交互有关的控制层StudentController类,这个类主要用来将前后端联合,实现完整的交互。下面是具体代码:

package controller;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import bean.Student;
import dao.StudentDao;

@Controller
public class StudentController {

  /**
   * 
   * 从数据库中获取全部学生信息,将数据返回给主页index,jsp
   * 
   * @param model
   * @return 返回值类型: String
   * @author janinus
   */
  @RequestMapping(value = "/all")
  public String queryAll(Model model) {
  ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
  //从ioc容器中获取dao
  StudentDao dao = (StudentDao) context.getBean("dao");
  model.addAttribute("students", dao.queryAll());
  model.addAttribute("tops", dao.topNum(3));
  return "index.jsp";
  }

  /**
   * 通过姓名查找学生,使用模糊查找,将结果返回给index.jsp
   * 
   * @param name
   * @param model
   * @return 返回值类型: String
   * @author janinus
   */
  @RequestMapping(value = "/queryByName")
  public String queryByName(String name, Model model) {
  ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
  //从ioc容器中获取dao
  StudentDao dao = (StudentDao) context.getBean("dao");
  model.addAttribute("students", dao.queryByName(name));
  model.addAttribute("tops", dao.topNum(3));
  return "index.jsp";
  }

  /**
   * 添加新学生,并将结果返回给all页面,由all转发到主页
   * @param name
   * @param javaScore
   * @param htmlScore
   * @param cssScore
   * @param model
   * @return 返回值类型: String
   * @author janinus
   */
  @RequestMapping(value = "/add")
  public String addStu(String name, String javaScore, String htmlScore, String cssScore, Model model) {
  ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
  StudentDao dao = (StudentDao) context.getBean("dao");
  Student student = new Student();
  student.setName(name);
  student.setJavaScore(Double.parseDouble(javaScore));
  student.setHtmlScore(Double.parseDouble(htmlScore));
  student.setCssScore(Double.parseDouble(cssScore));
  boolean result = dao.addStu(student);
  if (result)
    model.addAttribute("msg", "");
  else
    model.addAttribute("msg", "");
  return "all";
  }

  /**
   * 通过id删除学生
   * @param id
   * @param model
   * @return 返回值类型: String
   * @author janinus
   */
  @RequestMapping(value = "/deleteById")
  public String deleteById(String id, Model model) {
  ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
  StudentDao dao = (StudentDao) context.getBean("dao");
  boolean result = dao.deleteStu(Integer.parseInt(id));
  if (result)
    model.addAttribute("msg", "");
  else
    model.addAttribute("msg", "");
  return "all";
  }

  /**
   * 
   * @param id
   * @param name
   * @param javaScore
   * @param htmlScore
   * @param cssScore
   * @param model
   * @return 返回值类型: String
   * @author janinus
   */
  @RequestMapping(value = "/update")
  public String updateStu(String id, String name, String javaScore, String htmlScore, String cssScore, Model model) {
  ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
  StudentDao dao = (StudentDao) context.getBean("dao");
  Student student = new Student();
  student.setId(Integer.parseInt(id));
  student.setName(name);
  student.setJavaScore(Double.parseDouble(javaScore));
  student.setHtmlScore(Double.parseDouble(htmlScore));
  student.setCssScore(Double.parseDouble(cssScore));
  boolean result = dao.updateStu(student);
  if (result)
    model.addAttribute("msg", msg("修改成功"));
  else
    model.addAttribute("msg", msg("修改失败"));
  return "all";
  }

  /**
   * 要弹出的页面消息
   * @param msg
   * @return 返回值类型: String
   * @author janinus
   */
  public String msg(String msg) {
  return "";
  }
}

所有的java代码已经完成,下面只剩下具体的xml配置和前端页面。

4.前端页面

由于是一个简单的小项目,我的js,css都在同一个页面,没有分开,只有两个页面,

1.index.jsp

主页,截图

Spring MVC实现mysql数据库增删改查完整实例_第3张图片

编辑

Spring MVC实现mysql数据库增删改查完整实例_第4张图片

详细代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
  <%@ taglib prefix="fn" 
      uri="http://java.sun.com/jsp/jstl/functions" %>
  <%@ taglib prefix="c" 
      uri="http://java.sun.com/jsp/jstl/core" %>



  
  学生管理





${msg }

学生管理

所有学生

id 名称 java分数 html分数 css分数 操作
${student.id } ${student.name } ${student.javaScore } ${student.htmlScore } ${student.cssScore } 删除|编辑

前三名

排名 id 姓名 总分数
第${i.index+1 }名 ${student.id } ${student.name } ${student.totalScore }
如不显示请:点此刷新

查找学生

添加学生

编辑学生


2. login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>




Insert title here


进入主页

5. 详细文件配置

1. applicationContext.xml

这是spring的ioc容器的配置文件,用来实现依赖注入,下面是具体代码:



    
    
      
      
      
      
      
      
      
      
    
    
    
      
      
    
    
    
      
    
    
    
    
    
    
    
      
    


 

2. springMVC-servlet.xml,spring mvc配置类,

为我们实现了servlet的大部分代码,我们只需要写业务实现即可。下面是具体代码



  
  

3. web.xml

这是web工程的配置文件,下面是主要代码:





  encodingFilter
  org.springframework.web.filter.CharacterEncodingFilter
  
    encoding
    utf-8
  



  /all
  index.html
  index.htm



  springMVC
  org.springframework.web.servlet.DispatcherServlet
  1


  springMVC
  /



6.项目总结及附录

这个项目是个我的日常练习项目,为了更加熟练,我把完整的过程又回顾了一遍,又熟悉了很多,

项目用的jar包附录:

除了spring的包外,还有mysql-jbdc的jar包和jstl的jar包

下载地址:

spring框架jar包(可选版本):spring官网

mysql-jdbc.jar(可选版本):MySQL官网

jstl.jar(可选版本):maven官方地址

以上就是本文关于Spring MVC实现mysql数据库增删改查完整实例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:

Spring之WEB模块配置详解

springmvc Rest风格介绍及实现代码示例

SpringMVC拦截器实现单点登录

如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

你可能感兴趣的:(Spring MVC实现mysql数据库增删改查完整实例)