Spring MVC实现MySQL增删改查项目

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

  • 系统:win10

  • 开发环境:eclipse Oxygen Release Candidate 3 (4.7)

  • jdk版本:java1.8(121)

  • mysql:5.7

  • spring:4.0

  • tomcat:8.5
    用到的技术:

  • spring mvc

  • spring

  • jsp

  • jdbc

  • javaBean

  • js

  • jstl

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

声明:我只是一个刚入门不久的新手,所写代码难免有出错之处,如发现欢迎各位指出
下面就贴上详细过程
##1. 首先创建一个web项目(Dynamic Web Project)
项目名字就自己写了,不再详细写
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官方地址


2017年6月27日15:51:19

你可能感兴趣的:(Spring,MVC,Spring,java,jquery,css,mysql,web,html,javascript,数据库,spring,mysql,mvc,eclipse)