目录
2.4.6 处理controller层发送到biz的请求(配置spring-mvc.xml)
通过@PathVariable方式实现公共页面跳转。代码如下:
- package com.Kissship.web;
-
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.PathVariable;
- import org.springframework.web.bind.annotation.RequestMapping;
-
- /**
- * @author Kissship
- * @site www.Kissship.com
- * @company xxx公司
- * @create 2023-09-07-15:01
- *
- * 用来处理页面跳转
- */
- @Controller
- public class PageController {
-
- //新增 新增界面
- @RequestMapping("/page/{page}")
- public String toPage(@PathVariable("page") String page){
- return page;
- }
-
- @RequestMapping("/page/{dir}{page}")
- public String toDirPage(@PathVariable("dir") String dir,
- @PathVariable("page") String page){
- return dir + "/" + page;
- }
-
- }
pom.xml:
- "1.0" encoding="UTF-8"?>
- <project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0modelVersion>
-
- <groupId>org.examplegroupId>
- <artifactId>kissshipssmartifactId>
- <version>1.0-SNAPSHOTversion>
- <packaging>warpackaging>
-
- <name>kissshipssm Maven Webappname>
-
- <url>http://www.example.comurl>
- <properties>
- <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
- <maven.compiler.source>1.8maven.compiler.source>
- <maven.compiler.target>1.8maven.compiler.target>
- <maven.compiler.plugin.version>3.7.0maven.compiler.plugin.version>
-
-
-
- <spring.version>5.0.2.RELEASEspring.version>
-
- <mybatis.version>3.4.5mybatis.version>
-
- <mysql.version>5.1.44mysql.version>
-
- <pagehelper.version>5.1.2pagehelper.version>
-
- <mybatis.spring.version>1.3.1mybatis.spring.version>
-
- <commons.dbcp2.version>2.1.1commons.dbcp2.version>
- <commons.pool2.version>2.4.3commons.pool2.version>
-
- <log4j2.version>2.9.1log4j2.version>
- <log4j2.disruptor.version>3.2.0log4j2.disruptor.version>
- <slf4j.version>1.7.13slf4j.version>
-
- <junit.version>4.12junit.version>
- <servlet.version>4.0.0servlet.version>
- <lombok.version>1.18.2lombok.version>
-
- <mybatis.ehcache.version>1.1.0mybatis.ehcache.version>
- <ehcache.version>2.10.0ehcache.version>
-
- <redis.version>2.9.0redis.version>
- <redis.spring.version>1.7.1.RELEASEredis.spring.version>
- <jackson.version>2.9.3jackson.version>
- <jstl.version>1.2jstl.version>
- <standard.version>1.1.2standard.version>
- <tomcat-jsp-api.version>8.0.47tomcat-jsp-api.version>
- <commons-fileupload.version>1.3.3commons-fileupload.version>
- <hibernate-validator.version>5.0.2.Finalhibernate-validator.version>
-
- <shiro.version>1.3.2shiro.version>
- properties>
-
- <dependencies>
-
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-coreartifactId>
- <version>${spring.version}version>
- dependency>
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-beansartifactId>
- <version>${spring.version}version>
- dependency>
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-contextartifactId>
- <version>${spring.version}version>
- dependency>
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-ormartifactId>
- <version>${spring.version}version>
- dependency>
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-txartifactId>
- <version>${spring.version}version>
- dependency>
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-aspectsartifactId>
- <version>${spring.version}version>
- dependency>
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-webartifactId>
- <version>${spring.version}version>
- dependency>
-
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-testartifactId>
- <version>${spring.version}version>
- dependency>
-
-
-
- <dependency>
- <groupId>org.mybatisgroupId>
- <artifactId>mybatisartifactId>
- <version>${mybatis.version}version>
- dependency>
-
- <dependency>
- <groupId>mysqlgroupId>
- <artifactId>mysql-connector-javaartifactId>
- <version>${mysql.version}version>
- dependency>
-
- <dependency>
- <groupId>com.github.pagehelpergroupId>
- <artifactId>pagehelperartifactId>
- <version>${pagehelper.version}version>
- dependency>
-
- <dependency>
- <groupId>org.mybatisgroupId>
- <artifactId>mybatis-springartifactId>
- <version>${mybatis.spring.version}version>
- dependency>
-
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-context-supportartifactId>
- <version>${spring.version}version>
- dependency>
-
-
- <dependency>
- <groupId>org.mybatis.cachesgroupId>
- <artifactId>mybatis-ehcacheartifactId>
- <version>${mybatis.ehcache.version}version>
- dependency>
-
- <dependency>
- <groupId>net.sf.ehcachegroupId>
- <artifactId>ehcacheartifactId>
- <version>${ehcache.version}version>
- dependency>
-
- <dependency>
- <groupId>redis.clientsgroupId>
- <artifactId>jedisartifactId>
- <version>${redis.version}version>
- dependency>
- <dependency>
- <groupId>org.springframework.datagroupId>
- <artifactId>spring-data-redisartifactId>
- <version>${redis.spring.version}version>
- dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.coregroupId>
- <artifactId>jackson-databindartifactId>
- <version>${jackson.version}version>
- dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.coregroupId>
- <artifactId>jackson-coreartifactId>
- <version>${jackson.version}version>
- dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.coregroupId>
- <artifactId>jackson-annotationsartifactId>
- <version>${jackson.version}version>
- dependency>
-
-
- <dependency>
- <groupId>org.apache.commonsgroupId>
- <artifactId>commons-dbcp2artifactId>
- <version>${commons.dbcp2.version}version>
- <exclusions>
- <exclusion>
- <artifactId>commons-pool2artifactId>
- <groupId>org.apache.commonsgroupId>
- exclusion>
- exclusions>
- dependency>
- <dependency>
- <groupId>org.apache.commonsgroupId>
- <artifactId>commons-pool2artifactId>
- <version>${commons.pool2.version}version>
- dependency>
-
-
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-webmvcartifactId>
- <version>${spring.version}version>
- dependency>
-
-
-
-
-
-
- <dependency>
- <groupId>org.slf4jgroupId>
- <artifactId>slf4j-apiartifactId>
- <version>${slf4j.version}version>
- dependency>
- <dependency>
- <groupId>org.slf4jgroupId>
- <artifactId>jcl-over-slf4jartifactId>
- <version>${slf4j.version}version>
- <scope>runtimescope>
- dependency>
-
-
- <dependency>
- <groupId>org.apache.logging.log4jgroupId>
- <artifactId>log4j-apiartifactId>
- <version>${log4j2.version}version>
- dependency>
- <dependency>
- <groupId>org.apache.logging.log4jgroupId>
- <artifactId>log4j-coreartifactId>
- <version>${log4j2.version}version>
- dependency>
-
- <dependency>
- <groupId>org.apache.logging.log4jgroupId>
- <artifactId>log4j-slf4j-implartifactId>
- <version>${log4j2.version}version>
- dependency>
-
- <dependency>
- <groupId>org.apache.logging.log4jgroupId>
- <artifactId>log4j-webartifactId>
- <version>${log4j2.version}version>
- <scope>runtimescope>
- dependency>
-
-
- <dependency>
- <groupId>com.lmaxgroupId>
- <artifactId>disruptorartifactId>
- <version>${log4j2.disruptor.version}version>
- dependency>
-
-
- <dependency>
- <groupId>junitgroupId>
- <artifactId>junitartifactId>
- <version>${junit.version}version>
- <scope>testscope>
- dependency>
- <dependency>
- <groupId>javax.servletgroupId>
- <artifactId>javax.servlet-apiartifactId>
- <version>${servlet.version}version>
- <scope>providedscope>
- dependency>
- <dependency>
- <groupId>org.projectlombokgroupId>
- <artifactId>lombokartifactId>
- <version>${lombok.version}version>
- <scope>providedscope>
- dependency>
- <dependency>
- <groupId>jstlgroupId>
- <artifactId>jstlartifactId>
- <version>${jstl.version}version>
- dependency>
- <dependency>
- <groupId>taglibsgroupId>
- <artifactId>standardartifactId>
- <version>${standard.version}version>
- dependency>
- <dependency>
- <groupId>org.apache.tomcatgroupId>
- <artifactId>tomcat-jsp-apiartifactId>
- <version>${tomcat-jsp-api.version}version>
- dependency>
- <dependency>
- <groupId>commons-fileuploadgroupId>
- <artifactId>commons-fileuploadartifactId>
- <version>${commons-fileupload.version}version>
- dependency>
-
- <dependency>
- <groupId>org.hibernategroupId>
- <artifactId>hibernate-validatorartifactId>
- <version>${hibernate-validator.version}version>
- dependency>
-
-
- <dependency>
- <groupId>org.apache.shirogroupId>
- <artifactId>shiro-coreartifactId>
- <version>${shiro.version}version>
- dependency>
- <dependency>
- <groupId>org.apache.shirogroupId>
- <artifactId>shiro-webartifactId>
- <version>${shiro.version}version>
- dependency>
- <dependency>
- <groupId>org.apache.shirogroupId>
- <artifactId>shiro-springartifactId>
- <version>${shiro.version}version>
- dependency>
- <dependency>
- <groupId>org.examplegroupId>
- <artifactId>Spring-mybatisartifactId>
- <version>1.0-SNAPSHOTversion>
- <scope>compilescope>
- dependency>
- dependencies>
-
-
- <build>
- <finalName>kissshipssmfinalName>
- <resources>
-
- <resource>
- <directory>src/main/javadirectory>
- <includes>
- <include>**/*.xmlinclude>
- includes>
- resource>
-
- <resource>
- <directory>src/main/resourcesdirectory>
- <includes>
- <include>*.propertiesinclude>
- <include>*.xmlinclude>
- includes>
- resource>
- resources>
-
- <plugins>
-
- <plugin>
- <groupId>org.apache.maven.pluginsgroupId>
- <artifactId>maven-compiler-pluginartifactId>
- <version>${maven.compiler.plugin.version}version>
- <configuration>
- <source>${maven.compiler.source}source>
- <target>${maven.compiler.target}target>
- <encoding>${project.build.sourceEncoding}encoding>
- configuration>
- plugin>
- <plugin>
- <groupId>org.mybatis.generatorgroupId>
- <artifactId>mybatis-generator-maven-pluginartifactId>
- <version>1.3.2version>
- <dependencies>
-
- <dependency>
- <groupId>mysqlgroupId>
- <artifactId>mysql-connector-javaartifactId>
- <version>${mysql.version}version>
- dependency>
- dependencies>
- <configuration>
- <overwrite>trueoverwrite>
- configuration>
- plugin>
-
- <plugin>
- <artifactId>maven-clean-pluginartifactId>
- <version>3.1.0version>
- plugin>
-
- <plugin>
- <artifactId>maven-resources-pluginartifactId>
- <version>3.0.2version>
- plugin>
- <plugin>
- <artifactId>maven-compiler-pluginartifactId>
- <version>3.8.0version>
- plugin>
- <plugin>
- <artifactId>maven-surefire-pluginartifactId>
- <version>2.22.1version>
- plugin>
- <plugin>
- <artifactId>maven-war-pluginartifactId>
- <version>3.2.2version>
- plugin>
- <plugin>
- <artifactId>maven-install-pluginartifactId>
- <version>2.5.2version>
- plugin>
- <plugin>
- <artifactId>maven-deploy-pluginartifactId>
- <version>2.8.2version>
- plugin>
- plugins>
- build>
-
- project>
web.xml:
- "1.0" encoding="UTF-8"?>
- <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
- version="3.1">
- <display-name>Archetype Created Web Applicationdisplay-name>
-
-
- <context-param>
- <param-name>contextConfigLocationparam-name>
- <param-value>classpath:spring-context.xmlparam-value>
- context-param>
-
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
- listener>
-
-
-
- <filter>
- <filter-name>encodingFilterfilter-name>
- <filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>
- <async-supported>trueasync-supported>
- <init-param>
- <param-name>encodingparam-name>
- <param-value>UTF-8param-value>
- init-param>
- filter>
- <filter-mapping>
- <filter-name>encodingFilterfilter-name>
- <url-pattern>/*url-pattern>
- filter-mapping>
-
-
- <servlet>
- <servlet-name>SpringMVCservlet-name>
- <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
-
- <init-param>
- <param-name>contextConfigLocationparam-name>
- <param-value>classpath:spring-mvc.xmlparam-value>
- init-param>
- <load-on-startup>1load-on-startup>
-
- <async-supported>trueasync-supported>
- servlet>
- <servlet-mapping>
- <servlet-name>SpringMVCservlet-name>
- <url-pattern>/url-pattern>
- servlet-mapping>
- web-app>
生成后的对应目标目录如下:

在生成后的HBookMapper接口中,需要加上@Repository给Spring进行托管。
PagerAspect:
- package com.Kissship.aspect;
-
- import com.Kissship.utils.PageBean;
- import com.github.pagehelper.PageHelper;
- import com.github.pagehelper.PageInfo;
- 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;
-
- @Aspect
- @Component
- public class PagerAspect {
- @Around("execution(* *..*Biz.*Pager(..))")
- public Object invoke(ProceedingJoinPoint args) throws Throwable {
- PageBean pageBean=null;
- Object[] ags = args.getArgs();
- for (Object param:ags){
- if (param instanceof PageBean){
- pageBean=(PageBean)param;
- break;
- }
- }
-
- if (pageBean!=null&& pageBean.isPagination()){
- PageHelper.startPage(pageBean.getPage(),pageBean.getRows());
- }
- Object lst = args.proceed();
- if(pageBean!=null && pageBean.isPagination()){
- PageInfo pageInfo = new PageInfo((List) lst);
- pageBean.setTotal((int) pageInfo.getTotal());
- }
- return lst;
- }
- }
-
PageBean:
- package com.Kissship.utils;
-
- import javax.servlet.http.HttpServletRequest;
- import java.io.Serializable;
- import java.util.Map;
-
- /**
- * @author Kissship
- * @site www.Kissship.com
- * @company xxx公司
- * @create 2023-08-15-15:42
- */
- 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
- + "]";
- }
- }
- package com.Kissship.biz;
-
- import com.Kissship.model.Music;
- import com.Kissship.utils.PageBean;
-
- import java.util.List;
-
- public interface MusicBiz {
- int deleteByPrimaryKey(Integer mid);
-
- int insert(Music record);
-
- int insertSelective(Music record);
-
- Music selectByPrimaryKey(Integer mid);
-
- int updateByPrimaryKeySelective(Music record);
-
- int updateByPrimaryKey(Music record);
-
- List
listPager(Music music, PageBean pageBean); - }
注:
这个方法为查询返回列表方法,包含分页,因为切面类对其进行切面,所以在命名时,必须以Pager结尾。
- <select id="selectBycon" resultType="com.Kissship.model.Music" parameterType="com.Kissship.model.Music" >
- select
- <include refid="Base_Column_List" />
- from jay_music
- <where>
- <if test="mname != null">
- and mname like concat('%',#{mname},'%')
- if>
- where>
- select>
在自动生成的代码下添加以下:
List selectBycon(Music music);
代码如下:
- "1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xmlns:mvc="http://www.springframework.org/schema/mvc"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans.xsd
- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
- http://www.springframework.org/schema/aop
- http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
- http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
-
- <context:component-scan base-package="com.Kissship"/>
-
-
- <mvc:annotation-driven />
-
-
- <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
-
- <property name="viewClass"
- value="org.springframework.web.servlet.view.JstlView">property>
- <property name="prefix" value="/WEB-INF/jsp/"/>
- <property name="suffix" value=".jsp"/>
- bean>
-
-
-
- <mvc:resources location="/static/" mapping="/static/**"/>
-
- <aop:aspectj-autoproxy/>
- beans>
PageTag:
- package com.Kissship.tag;
-
- import com.Kissship.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(" href='javascript:gotoPage(1)'>首页");
- sb.append("
- );
- sb.append(" href='javascript:gotoPage("+pageBean.getPreivousPage()+")'><");// less than 小于号
- // sb.append("
- 1
"); - // sb.append("
- 2
"); - sb.append("
- "
+pageBean.getPage()+""); - sb.append("
- >
"); - sb.append("
- 尾页
"); - sb.append("
- 到第);
- sb.append(" type='text' id='skipPage' name='' />页");
- sb.append("
- );
- sb.append(" href='javascript:skipPage()'>确定");
- sb.append("
- 共"
+pageBean.getTotal()+"条"); - sb.append("");
-
- // 分页执行的JS代码
- sb.append("");
-
- return sb.toString();
- }
- }
kissship.tld:
- "1.0" encoding="UTF-8" ?>
-
"http://java.sun.com/xml/ns/j2ee" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
- version="2.0">
-
-
kissship 1.1 core library -
kissship core -
1.1 - <short-name>kissshipshort-name>
-
http://jsp.veryedu.cn -
-
-
-
page -
com.Kissship.tag.PageTag -
JSP -
-
pageBean -
true -
true -
-
-
MusicController:
- package com.Kissship.web;
-
- import com.Kissship.biz.MusicBiz;
- import com.Kissship.model.Music;
- import com.Kissship.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.PathVariable;
- import org.springframework.web.bind.annotation.RequestMapping;
-
- import javax.servlet.http.HttpServletRequest;
- import java.util.List;
-
- /**
- * @author Kissship
- * @site www.Kissship.com
- * @company xxx公司
- * @create 2023-09-08-15:15
- */
- @Controller
- @RequestMapping("/mic")
- public class MusicController {
- @Autowired
- private MusicBiz musicBiz;
-
- // 增
- @RequestMapping("/add")
- public String add(Music music, HttpServletRequest Request) {
- int i = musicBiz.insertSelective(music);
- return "redirect:list";
- }
-
- // 删
- @RequestMapping("/del/{bid}")
- public String del(@PathVariable("bid")Integer bid) {
- musicBiz.deleteByPrimaryKey(bid);
- return "redirect:/mic/list";
- }
-
- // 改
- @RequestMapping("/edit")
- public String edit(Music music, HttpServletRequest Request) {
- musicBiz.updateByPrimaryKeySelective(music);
- return "redirect:list";
- }
-
- // 查
- @RequestMapping("/list")
- public String list(Music music, HttpServletRequest Request) {
- //music是用来接受前台传递后台的参数
- PageBean pageBean = new PageBean();
- pageBean.setRequest(Request);
- List
music1 = musicBiz.listPager(music, pageBean); - Request.setAttribute("lst", music1);
- Request.setAttribute("pageBean", pageBean);
- //WEB-INF/jsp/mic/list.jsp
- return "mic/list";
- }
-
- //数据回显
- @RequestMapping("/preSave")
- public String preSave(Music music, Model model) {
- if (music != null && music.getMid() != null && music.getMid() != 0) {
- Music m = musicBiz.selectByPrimaryKey(music.getMid());
- model.addAttribute("c",m);
- }
- return "mic/edit";
- }
- }
到此我们的后台代码编写完成了,接下来就是前端代码的编写。
作用:展示数据进行一系列操作。
list.jsp:
- <%@ 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"%>
- html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <link
- href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/css/bootstrap.css"
- rel="stylesheet">
- <script
- src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/js/bootstrap.js">script>
- <title>JayChou歌单列表title>
- <style type="text/css">
- .page-item input {
- padding: 0;
- width: 40px;
- height: 100%;
- text-align: center;
- margin: 0 6px;
- }
-
- .page-item input, .page-item b {
- line-height: 38px;
- float: left;
- font-weight: 400;
- }
-
- .page-item.go-input {
- margin: 0 10px;
- }
- style>
- head>
- <body>
- <form class="form-inline"
- action="${pageContext.request.contextPath }/mic/list" method="post">
- <div class="form-group mb-2">
- <input type="text" class="form-control-plaintext" name="mname"
- placeholder="请输入歌曲名称">
-
-
- <%-- <input name="pagination" value="false" type="hidden">--%>
- div>
- <button type="submit" class="btn btn-primary mb-2">查询button>
- <a class="btn btn-primary mb-2" href="${pageContext.request.contextPath }/mic/preSave">新增a>
- form>
-
- <table class="table table-striped">
- <thead>
- <tr>
- <th scope="col">歌曲编号th>
- <th scope="col">歌曲名称th>
- <th scope="col">歌曲专辑th>
- <th scope="col">歌曲歌词th>
- <th scope="col">歌曲图片th>
- tr>
- thead>
- <tbody>
- <c:forEach var="b" items="${lst }">
- <tr>
- <td>${b.mid }td>
- <td>${b.mname }td>
- <td>${b.mtype }td>
- <td>${b.minfo }td>
- <td>${b.mpic }td>
- <td>
- <a href="${pageContext.request.contextPath }/mic/preSave?mid=${b.mid}">修改a>
- <a href="${pageContext.request.contextPath }/mic/del/${b.mid}">删除a>
- td>
- tr>
- c:forEach>
- tbody>
- table>
- <z:page pageBean="${pageBean }">z:page>
- ${pageBean }
- body>
- html>
作用:操作数据。
edit.jsp:
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
- <html>
- <head>
- <title>编辑歌单界面title>
- head>
- <body>
- <form action="${pageContext.request.contextPath }/${empty c ? 'mic/add' : 'mic/edit'}" method="post">
- 歌曲编号:<input type="text" name="mid" value="${c.mid }"><br>
- 歌曲名称:<input type="text" name="mname" value="${c.mname }"><br>
- 歌曲专辑:<input type="text" name="mtype" value="${c.mtype }"><br>
- 歌曲歌词:<input type="text" name="minfo" value="${c.minfo }"><br>
- 歌曲图片:<input type="text" name="mpic" value="${c.mpic }"><br>
- <input type="submit">
- form>
- body>
- html>
控制台效果:

主页增删改查展示效果:

熟悉SpringMVC框架:通过实践,可以更深入地理解SpringMVC框架的工作原理和核心概念,如控制器、视图解析器、数据绑定等。
掌握请求处理和数据交互:实践中的增删改查操作涉及到请求处理和数据库数据交互,可以加深对请求的处理方式和数据库操作的理解。
强化编程技能:实战中需要编写具体的代码实现增删改查功能,可以提高编程能力,尤其是对Java和SpringMVC的理解和熟练度。
学习最佳实践:通过实践,可以学习到SpringMVC增删改查的最佳实践,包括使用合适的设计模式、优化数据库查询性能、错误处理等方面的经验。
增加项目经验:实战增删改查可以让您在实际项目中积累经验,对项目的整体流程和开发周期有更深入的认识。
提升自信心:通过实际操作和实践,可以提高对SpringMVC增删改查功能的自信心,为日后更复杂的项目开发打下基础。
请注意,SpringMVC是一个开源框架,通过参与实战项目可以更好地理解和应用它。同时,实践中也会遇到挑战和问题,但通过解决问题和学习,可以不断进步和成长。
最后实战SpringMVC之CRUD就到这里,祝大家在敲代码的路上一路通畅!
