SpringMVC之CRUD(直接让你迅速完成部署)

一、项目创建

首先创建一个基于maven的项目部署,如果有些插件没有的话可以参考mybatis入门Idea搭建

二、配置依赖导入

依赖导入

1、pom.xml

需要根据自己的文件来进行导入,并不是原本照着导入


    4.0.0
    org.example
    tgqzyssm
    war
    1.0-SNAPSHOT
    tgqzyssm Maven Webapp
    http://maven.apache.org

    
        UTF-8
        1.8
        1.8
        3.7.0
        
        
        5.0.2.RELEASE
        
        3.4.5
        
        5.1.44
        
        5.1.2
        
        1.3.1
        
        2.1.1
        2.4.3
        
        2.9.1
        3.2.0
        1.7.13
        
        4.12
        4.0.0
        1.18.2

        1.1.0
        2.10.0

        2.9.0
        1.7.1.RELEASE
        2.9.3
        1.2
        1.1.2
        8.0.47
        1.3.3
        5.0.2.Final

        1.3.2
    



    
        
        
            org.springframework
            spring-core
            ${spring.version}
        
        
            org.springframework
            spring-beans
            ${spring.version}
        
        
            org.springframework
            spring-context
            ${spring.version}
        
        
            org.springframework
            spring-orm
            ${spring.version}
        
        
            org.springframework
            spring-tx
            ${spring.version}
        
        
            org.springframework
            spring-aspects
            ${spring.version}
        
        
            org.springframework
            spring-web
            ${spring.version}
        

        
            org.springframework
            spring-test
            ${spring.version}
        


        
        
            org.mybatis
            mybatis
            ${mybatis.version}
        
        
        
            mysql
            mysql-connector-java
            ${mysql.version}
        
        
        
            com.github.pagehelper
            pagehelper
            ${pagehelper.version}
        
        
        
            org.mybatis
            mybatis-spring
            ${mybatis.spring.version}
        

        
            org.springframework
            spring-context-support
            ${spring.version}
        

        
        
            org.mybatis.caches
            mybatis-ehcache
            ${mybatis.ehcache.version}
        
        
        
            net.sf.ehcache
            ehcache
            ${ehcache.version}
        

        
            redis.clients
            jedis
            ${redis.version}
        
        
            org.springframework.data
            spring-data-redis
            ${redis.spring.version}
        
        
            com.fasterxml.jackson.core
            jackson-databind
            ${jackson.version}
        
        
            com.fasterxml.jackson.core
            jackson-core
            ${jackson.version}
        
        
            com.fasterxml.jackson.core
            jackson-annotations
            ${jackson.version}
        

        
        
            org.apache.commons
            commons-dbcp2
            ${commons.dbcp2.version}
            
                
                    commons-pool2
                    org.apache.commons
                
            
        
        
            org.apache.commons
            commons-pool2
            ${commons.pool2.version}
        

        
        
            org.springframework
            spring-webmvc
            ${spring.version}
        

        

        
        
        
        
            org.slf4j
            slf4j-api
            ${slf4j.version}
        
        
            org.slf4j
            jcl-over-slf4j
            ${slf4j.version}
            runtime
        

        
        
            org.apache.logging.log4j
            log4j-api
            ${log4j2.version}
        
        
            org.apache.logging.log4j
            log4j-core
            ${log4j2.version}
        
        
        
            org.apache.logging.log4j
            log4j-slf4j-impl
            ${log4j2.version}
        
        
        
            org.apache.logging.log4j
            log4j-web
            ${log4j2.version}
            runtime
        

        
        
            com.lmax
            disruptor
            ${log4j2.disruptor.version}
        

        
        
            junit
            junit
            ${junit.version}
            
        
        
            javax.servlet
            javax.servlet-api
            ${servlet.version}
            provided
        
        
            org.projectlombok
            lombok
            ${lombok.version}
            provided
        
        
            jstl
            jstl
            ${jstl.version}
        
        
            taglibs
            standard
            ${standard.version}
        
        
            org.apache.tomcat
            tomcat-jsp-api
            ${tomcat-jsp-api.version}
        
        
            commons-fileupload
            commons-fileupload
            ${commons-fileupload.version}
        

        
            org.hibernate
            hibernate-validator
            ${hibernate-validator.version}
        

        
        
            org.apache.shiro
            shiro-core
            ${shiro.version}
        
        
            org.apache.shiro
            shiro-web
            ${shiro.version}
        
        
            org.apache.shiro
            shiro-spring
            ${shiro.version}
        
    
    
        tgqzyssm
        
            
            
                src/main/java
                
                    **/*.xml
                
            
            
            
                src/main/resources
                
                    *.properties
                    *.xml
                
            
        
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                ${maven.compiler.plugin.version}
                
                    ${maven.compiler.source}
                    ${maven.compiler.target}
                    ${project.build.sourceEncoding}
                
            
            
                org.mybatis.generator
                mybatis-generator-maven-plugin
                1.3.2
                
                    
                    
                        mysql
                        mysql-connector-java
                        ${mysql.version}
                    
                
                
                    true
                
            

            
                maven-clean-plugin
                3.1.0
            
            
            
                maven-resources-plugin
                3.0.2
            
            
                maven-compiler-plugin
                3.8.0
            
            
                maven-surefire-plugin
                2.22.1
            
            
                maven-war-plugin
                3.2.2
            
            
                maven-install-plugin
                2.5.2
            
            
                maven-deploy-plugin
                2.8.2
            
        
    

2、web.xml

web文件原本导入就行



    Archetype Created Web Application
    
    
    
        contextConfigLocation
        classpath:spring-context.xml
    
    
    
        org.springframework.web.context.ContextLoaderListener
    
    

    
    
        encodingFilter
        org.springframework.web.filter.CharacterEncodingFilter
        true
        
            encoding
            UTF-8
        
    
    
        encodingFilter
        /*
    

    
    
        SpringMVC
        org.springframework.web.servlet.DispatcherServlet
        
        
            contextConfigLocation
            classpath:spring-mvc.xml
        
        1
        
        true
    
    
        SpringMVC
        /
    

配置

1、generatorConfig.xml




    
    

    
    

    
    
        
        
            
             
        

        
        

        
        
            
            
        

        
        
        
        
            
            
            
            
            
            
            
            
        

        
        
            
            
        

        
        
        
        
        
            
            

        
    
选择你本地的 mysql-connector-java-5.1.44.jar地址

tableName属性里面写你的数据库表名

domainObjectName属性里面写你的要生成的类名

2、jdbc.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis_ssm?useUnicode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=123456

jdbc.username=root 数据库用户名
jdbc.password=123456 数据库用户名密码

3、log4j2.xml

新建一个日志文件,用来保存日志





    
        
        /root/workspace/lucenedemo/logs
        /root/workspace/lucenedemo/logs/error
        /root/workspace/lucenedemo/logs/warn
        %d{yyyy-MM-dd HH:mm:ss.SSS} [%t-%L] %-5level %logger{36} - %msg%n
    

    
        
        
            
            
            
            
            
        

        
        
        
            
        
        
        
            
            
            
            
                
                
                
                
                
                
            
        

        
            
            
            
                
                
            
            
            
        

        
            
            
            
                
                
                
            
        

    

    
    
        
        
        

        
        
        
        
        
        


        
        
            
            
            
            
        

    

4、spring-context.xml





    
    

5、spring-mvc.xml



    
    

    
    

    
    
        
        
        
        
    
    
    

    
    

6、spring-mybatis.xml



    
    
    
    
    

    

    
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
    

    
    
    
        
        
        
        
        
        
        
        
            
                
                    
                        
                            helperDialect=mysql
                        
                    
                
            
        
    

    
    
    
        
        
        
        
    

    
        
    
    
    


三、后端代码

1、逆向生成代码

右键

SpringMVC之CRUD(直接让你迅速完成部署)_第1张图片

会生成两个包

1)、实体类

当然可以根据自己的sql表来对比

package com.tgq.model;

import lombok.ToString;

@ToString
public class StrutsClas {
    private Integer cid;

    private String cname;

    private String cteacher;

    private String pic;

    public StrutsClas(Integer cid, String cname, String cteacher, String pic) {
        this.cid = cid;
        this.cname = cname;
        this.cteacher = cteacher;
        this.pic = pic;
    }

    public StrutsClas() {
        super();
    }

    public Integer getCid() {
        return cid;
    }

    public void setCid(Integer cid) {
        this.cid = cid;
    }

    public String getCname() {
        return cname;
    }

    public void setCname(String cname) {
        this.cname = cname;
    }

    public String getCteacher() {
        return cteacher;
    }

    public void setCteacher(String cteacher) {
        this.cteacher = cteacher;
    }

    public String getPic() {
        return pic;
    }

    public void setPic(String pic) {
        this.pic = pic;
    }
}

2)生成的xml文件

在生成好的sqlxml文件里面新添加一个

  

3)生成的接口类

根据上面的xml配置文件生成接口方法

List selectPager(StrutsClas strutsClas);

package com.tgq.mapper;

import com.tgq.model.StrutsClas;
import org.springframework.stereotype.Repository;

import java.util.List;
@Repository
public interface StrutsClasMapper {
    int deleteByPrimaryKey(Integer cid);

    int insert(StrutsClas record);

    int insertSelective(StrutsClas record);

    StrutsClas selectByPrimaryKey(Integer cid);

    int updateByPrimaryKeySelective(StrutsClas record);

    int updateByPrimaryKey(StrutsClas record);

    List selectPager(StrutsClas strutsClas);
}

2、导入资源

当然可以根据自己的学习成果来确认需不需要

1)、切面类

package com.tgq.aspect;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.tgq.utils.PageBean;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * @软件包名 com.tgq.aspect
 * @用户 tgq
 * @create 2023-08-25 下午9:26
 * @注释说明:
 */
@Aspect //代表当前类为切面类
@Component //代表该类交给spring进行管理
public class PagerAspect {
    /**
     * * *..*biz.*Pager(..)
     * * : 任意返回值
     * *..: 任意版本 不限层级
     * *biz :以biz结尾的接口/类
     * *Pager :以pager结尾的方法
     * .. :任意参数
     * 

* 符合条件,就是目标或者目标方法 * * @param args * @return * @throws Throwable */ @Around("execution(* *..*Biz.*Pager(..))") public Object invoke(ProceedingJoinPoint args) throws Throwable { // 获取目标方法中的所有参数 Object[] params = args.getArgs(); PageBean pageBean = null; for (Object param : params) { if (param instanceof PageBean) { // 强转 pageBean = (PageBean) param; break; } } if (pageBean != null && pageBean.isPagination()) PageHelper.startPage(pageBean.getPage(), pageBean.getRows()); //执行目标方法 Object list = args.proceed(params); if (null != pageBean && pageBean.isPagination()) { PageInfo pageInfo = new PageInfo((List) list); pageBean.setTotal((int) pageInfo.getTotal()); } return list; } }

2)、分页类

package com.tgq.tag;

import com.tgq.utils.PageBean;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;
import java.io.IOException;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class PageTag extends BodyTagSupport {
    private PageBean pageBean;// 包含了所有分页相关的元素

    public PageBean getPageBean() {
        return pageBean;
    }

    public void setPageBean(PageBean pageBean) {
        this.pageBean = pageBean;
    }

    @Override
    public int doStartTag() throws JspException {
//		没有标签体,要输出内容
        JspWriter out = pageContext.getOut();
        try {
            out.print(toHTML());
        } catch (IOException e) {
            e.printStackTrace();
        }
        return super.doStartTag();
    }

    private String toHTML() {
        StringBuffer sb = new StringBuffer();
//		隐藏的form表单---这个就是上一次请求下次重新发的奥义所在
//		上一次请求的URL
        sb.append("
"); sb.append(" "); // 上一次请求的参数 Map paramMap = pageBean.getMap(); if (paramMap != null && paramMap.size() > 0) { Set> entrySet = paramMap.entrySet(); for (Entry entry : entrySet) { // 参数名 String key = entry.getKey(); // 参数值 for (String value : entry.getValue()) { // 上一次请求的参数,再一次组装成了新的Form表单 // 注意:page参数每次都会提交,我们需要避免 if (!"page".equals(key)) { sb.append(" "); } } } } sb.append(""); // 分页条 sb.append("
    "); sb.append("
  • 首页
  • "); sb.append("
  • <
  • ");// less than 小于号 // sb.append("
  • 1
  • "); // sb.append("
  • 2
  • "); sb.append("
  • " + pageBean.getPage() + "
  • "); sb.append("
  • >
  • "); sb.append("
  • 尾页
  • "); sb.append("
  • 到第
  • "); sb.append("
  • 确定
  • "); sb.append("
  • 共" + pageBean.getTotal() + "条
  • "); sb.append("
"); // 分页执行的JS代码 sb.append(""); return sb.toString(); } }

3)、分页实现类

package com.tgq.utils;

import javax.servlet.http.HttpServletRequest;
import java.io.Serializable;
import java.util.Map;

public class PageBean implements Serializable {

	private static final long serialVersionUID = 2422581023658455731L;

	//页码
	private int page=1;
	//每页显示记录数
	private int rows=10;
	//总记录数
	private int total=0;
	//是否分页
	private boolean isPagination=true;
	//上一次的请求路径
	private String url;
	//获取所有的请求参数
	private Map map;
	
	public PageBean() {
		super();
	}
	
	//设置请求参数
	public void setRequest(HttpServletRequest req) {
		String page=req.getParameter("page");
		String rows=req.getParameter("rows");
		String pagination=req.getParameter("pagination");
		this.setPage(page);
		this.setRows(rows);
		this.setPagination(pagination);
		this.url=req.getContextPath()+req.getServletPath();
		this.map=req.getParameterMap();
	}
	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}

	public Map getMap() {
		return map;
	}

	public void setMap(Map map) {
		this.map = map;
	}

	public int getPage() {
		return page;
	}

	public void setPage(int page) {
		this.page = page;
	}
	
	public void setPage(String page) {
		if(null!=page&&!"".equals(page.trim()))
			this.page = Integer.parseInt(page);
	}

	public int getRows() {
		return rows;
	}

	public void setRows(int rows) {
		this.rows = rows;
	}
	
	public void setRows(String rows) {
		if(null!=rows&&!"".equals(rows.trim()))
			this.rows = Integer.parseInt(rows);
	}

	public int getTotal() {
		return total;
	}

	public void setTotal(int total) {
		this.total = total;
	}
	
	public void setTotal(String total) {
		this.total = Integer.parseInt(total);
	}

	public boolean isPagination() {
		return isPagination;
	}
	
	public void setPagination(boolean isPagination) {
		this.isPagination = isPagination;
	}
	
	public void setPagination(String isPagination) {
		if(null!=isPagination&&!"".equals(isPagination.trim()))
			this.isPagination = Boolean.parseBoolean(isPagination);
	}
	
	/**
	 * 获取分页起始标记位置
	 * @return
	 */
	public int getStartIndex() {
		//(当前页码-1)*显示记录数
		return (this.getPage()-1)*this.rows;
	}
	
	/**
	 * 末页
	 * @return
	 */
	public int getMaxPage() {
		int totalpage=this.total/this.rows;
		if(this.total%this.rows!=0)
			totalpage++;
		return totalpage;
	}
	
	/**
	 * 下一页
	 * @return
	 */
	public int getNextPage() {
		int nextPage=this.page+1;
		if(this.page>=this.getMaxPage())
			nextPage=this.getMaxPage();
		return nextPage;
	}
	
	/**
	 * 上一页
	 * @return
	 */
	public int getPreivousPage() {
		int previousPage=this.page-1;
		if(previousPage<1)
			previousPage=1;
		return previousPage;
	}

	@Override
	public String toString() {
		return "PageBean [page=" + page + ", rows=" + rows + ", total=" + total + ", isPagination=" + isPagination
				+ "]";
	}
}

3、配置tld文件

用来管理分页的标签文件





    tgq 1.1 core library
    tgq core
    1.1
    tgq
    http://jsp.veryedu.cn


    
        page
        com.tgq.tag.PageTag
        JSP
        
            pageBean
            true
            true
        
    


4、编写biz、impl层

package com.tgq.biz;

import com.tgq.model.StrutsClas;
import com.tgq.utils.PageBean;

import java.util.List;

/**
 * @软件包名 com.tgq.biz.impl
 * @用户 tgq
 * @create 2023-09-08 下午5:59
 * @注释说明:
 */
public interface StrutsClasBiz {
    int deleteByPrimaryKey(Integer cid);

    int insert(StrutsClas record);

    int insertSelective(StrutsClas record);

    StrutsClas selectByPrimaryKey(Integer cid);

    int updateByPrimaryKeySelective(StrutsClas record);

    int updateByPrimaryKey(StrutsClas record);

    List selectPager(StrutsClas clas, PageBean pageBean);

}
package com.tgq.biz.impl;

import com.tgq.biz.StrutsClasBiz;
import com.tgq.mapper.StrutsClasMapper;
import com.tgq.model.StrutsClas;
import com.tgq.utils.PageBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @软件包名 com.tgq.biz.impl
 * @用户 tgq
 * @create 2023-09-08 下午8:23
 * @注释说明:
 */
@Service
public class StrutsClasBizImpl implements StrutsClasBiz {

    @Autowired
    private StrutsClasMapper strutsClasMapper;

    @Override
    public int deleteByPrimaryKey(Integer cid) {
        return strutsClasMapper.deleteByPrimaryKey(cid);
    }

    @Override
    public int insert(StrutsClas record) {
        return strutsClasMapper.insert(record);
    }

    @Override
    public int insertSelective(StrutsClas record) {
        return strutsClasMapper.insertSelective(record);
    }

    @Override
    public StrutsClas selectByPrimaryKey(Integer cid) {
        return strutsClasMapper.selectByPrimaryKey(cid);
    }

    @Override
    public int updateByPrimaryKeySelective(StrutsClas record) {
        return strutsClasMapper.updateByPrimaryKeySelective(record);
    }

    @Override
    public int updateByPrimaryKey(StrutsClas record) {
        return strutsClasMapper.updateByPrimaryKey(record);
    }

    @Override
    public List selectPager(StrutsClas clas, PageBean pageBean) {
        return strutsClasMapper.selectPager(clas);
    }

}

5、web层

添加

@Controller :需要实现接口
@RequestMapping("/sc") :里面的路径根据自己的习惯来进行

@Autowired : 实例化biz层需要用到的

编写五个方法:增上改查 数据回显

package com.tgq.web;

import com.tgq.biz.StrutsClasBiz;
import com.tgq.model.StrutsClas;
import com.tgq.utils.PageBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * @软件包名 com.tgq.web
 * @用户 tgq
 * @create 2023-09-08 下午8:58
 * @注释说明:
 */
@Controller
@RequestMapping("/sc")
public class StrutsClasController {

    @Autowired
    private StrutsClasBiz strutsClasBiz;

    /**
     * 增加
     *
     * @param strutsClas
     * @return
     */
    @RequestMapping("/add")
    public String insertSelective(StrutsClas strutsClas) {
        strutsClasBiz.insertSelective(strutsClas);
        return "redirect:list";
    }

//    @DeleteMapping("/del/{cid}")
//    public String deleteByPrimaryKey(@PathVariable Integer cid) {

    /**
     * 删除
     *
     * @param strutsClas
     * @return
     */
    @RequestMapping("/del")
    public String deleteByPrimaryKey(StrutsClas strutsClas) {
        strutsClasBiz.deleteByPrimaryKey(strutsClas.getCid());
        return "redirect:list";
    }

    /**
     * 修改
     *
     * @param strutsClas
     * @return
     */
    @RequestMapping("/edit")
    public String updateByPrimaryKeySelective(StrutsClas strutsClas) {
        strutsClasBiz.updateByPrimaryKeySelective(strutsClas);
        return "redirect:list";
    }


    @RequestMapping("/list")
    public String list(StrutsClas strutsClas, HttpServletRequest request) {
        PageBean pageBean = new PageBean();
        pageBean.setRequest(request);
        List strutsClas1 = strutsClasBiz.selectPager(strutsClas, pageBean);
        request.setAttribute("list", strutsClas1);
        request.setAttribute("pageBean", pageBean);
        return "sc/list";
    }

    /**
     * 数据回显
     *
     * @param strutsClas
     * @param model
     * @return
     */
    @RequestMapping("/save")
    public String save(StrutsClas strutsClas, Model model) {
        if (strutsClas != null && strutsClas.getCid() != null && strutsClas.getCid() != 0) {
            StrutsClas strutsClas1 = strutsClasBiz.selectByPrimaryKey(strutsClas.getCid());
            model.addAttribute("s", strutsClas1);
        }

        return "sc/edit";
    }


}

四、前端代码

根据自己的习惯来进行一个地方的修改

SpringMVC之CRUD(直接让你迅速完成部署)_第2张图片

1、首页数据访问

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



    
    
    
    列表
    


新增
编号 班级名 教师 Logo 操作
${b.cid } ${b.cname } ${b.cteacher } ${b.pic } 修改 删除

需要修改的地方就是一个自己表里面的属性名称和一个访问路径

2、edit前端

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



    
    编辑界面


编辑编号:
班级名:
教师:

五、测试结果

1、数据回显

SpringMVC之CRUD(直接让你迅速完成部署)_第3张图片

SpringMVC之CRUD(直接让你迅速完成部署)_第4张图片

2、edit

SpringMVC之CRUD(直接让你迅速完成部署)_第5张图片SpringMVC之CRUD(直接让你迅速完成部署)_第6张图片

你可能感兴趣的:(mybatis,spring,mvc,html5,jsp,后端,前端)