目录
2.1.3 配置代码生成器 generatorConfig.xml
2.1.4 spring与mybatis整合的配置文件 spring-mybatis.xml
2.1.5 spring-context.xml 上下文配置文件
2.1.6 spring-mvc-xml: 配置Spring框架的一些关键组件和功能
REST(Representational State Transfer),意思:表述性状态转换,它是一种软件架构风格(描述了一个架构样式的网络系统,比如web应用)。
当我们想表示一个网络资源的时候,可以使用两种方式:
传统风格资源描述形式:
REST风格描述形式:
一般是一个请求url对应一种操作,这样做不仅麻烦,也不安全,因为会程序的人读取了你的请求url地址,就大概知道该url实现的是一个什么样的操作。
隐藏资源的访问行为,无法通过地址得知对资源是何种操作;查看REST风格的描述,你会发现请求地址变的简单了;REST提供了对应的架构方式,按照这种架构设计项目可以降低开发的复杂性,提高系统的可伸缩性。
请求的方式比较多,但是比较常用的就4种,分别是GET,POST,PUT,DELETE。按照不同的请求方式代表不同的操作类型:
按照REST风格访问资源时使用行为动作区分对资源进行操作的示例:
注意:
清楚了什么是REST风格后,我们后期会经常提到一个概念叫RESTful,那什么又是RESTful呢?
根据REST风格对资源进行访问称为RESTful。后期我们在进行开发的过程中,大多是都是遵从REST风格来访问我们的后台服务,所以可以说以后都是基于RESTful来进行开发的。
"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/maven-v4_0_0.xsd">
-
4.0.0 -
org.example -
ycxw_zyssm -
war -
1.0-SNAPSHOT -
ycxw_zyssm 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} -
test -
-
-
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} -
-
-
-
-
ycxw_zyssm -
-
-
-
src/main/java -
-
**/*.xml -
-
-
-
-
src/main/resources -
-
jdbc.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 -
-
-
-
- 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
- "1.0" encoding="UTF-8" ?>
- "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
- "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
-
-
-
"jdbc.properties"/> -
-
-
"D:\\Tools\\MavenHouse\\mvn_repository\\mysql\\mysql-connector-java\\5.1.44\\mysql-connector-java-5.1.44.jar"/> -
-
-
"infoGuardian"> -
-
-
"suppressAllComments" value="true"/> -
"suppressDate" value="true"/> -
-
-
-
"${jdbc.driver}" - connectionURL="${jdbc.url}" userId="${jdbc.username}" password="${jdbc.password}">
-
-
-
-
-
-
-
"forceBigDecimals" value="false"/> -
-
-
-
-
-
"com.ycxw.model" - targetProject="src/main/java">
-
-
"enableSubPackages" value="false"/> -
-
"constructorBased" value="true"/> -
-
"trimStrings" value="false"/> -
-
"immutable" value="false"/> -
-
-
-
"com.ycxw.mapper" - targetProject="src/main/java">
-
-
"enableSubPackages" value="false"/> -
-
-
-
-
-
-
"com.ycxw.mapper" - targetProject="src/main/java" type="XMLMAPPER">
-
-
"enableSubPackages" value="false"/> -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
"" tableName="t_oa_user" domainObjectName="User"- enableCountByExample="false" enableDeleteByExample="false"
- enableSelectByExample="false" enableUpdateByExample="false">
-
-
-
-
-
-
-
- "1.0" encoding="UTF-8"?>
"http://www.springframework.org/schema/beans" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
- xmlns:aop="http://www.springframework.org/schema/aop"
- 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.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
-
-
-
-
-
package="com.ycxw"/> -
-
"classpath:jdbc.properties"/> -
-
"dataSource" class="org.apache.commons.dbcp2.BasicDataSource" - destroy-method="close">
-
"driverClassName" value="${jdbc.driver}"/> -
"url" value="${jdbc.url}"/> -
"username" value="${jdbc.username}"/> -
"password" value="${jdbc.password}"/> -
-
"initialSize" value="10"/> -
-
"maxTotal" value="100"/> -
-
"maxIdle" value="50"/> -
-
"minIdle" value="10"/> -
-
-
"maxWaitMillis" value="-1"/> -
-
-
-
-
"sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> -
-
"dataSource" ref="dataSource"/> -
-
"mapperLocations" value="classpath*:com/ycxw/**/mapper/*.xml"/> -
-
"typeAliasesPackage" value="com/ycxw/**/model"/> -
-
"plugins"> -
-
"com.github.pagehelper.PageInterceptor"> -
"properties"> -
- helperDialect=mysql
-
-
-
-
-
-
-
-
-
-
-
-
-
"/> -
" value=" sqlSessionFactory"/> -
-
" class=" org.springframework.jdbc.datasource.DataSourceTransactionManager"> -
" ref=" dataSource" /> -
-
" /> -
- "1.0" encoding="UTF-8"?>
"http://www.springframework.org/schema/beans" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
-
-
- <import resource="spring-mybatis.xml">import>
- "1.0" encoding="UTF-8"?>
"http://www.w3.org/2001/XMLSchema-instance" - xmlns:context="http://www.springframework.org/schema/context"
- xmlns:mvc="http://www.springframework.org/schema/mvc"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xmlns="http://www.springframework.org/schema/beans"
- 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/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
- http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
-
-
package="com.ycxw"/> -
-
-
-
-
-
"org.springframework.web.servlet.view.InternalResourceViewResolver"> -
-
"viewClass" - value="org.springframework.web.servlet.view.JstlView">
-
"prefix" value="/WEB-INF/jsp/"/> -
"suffix" value=".jsp"/> -
-
-
-
-
-
-
-
-
- "1.0" encoding="UTF-8"?>
"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">
-
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. PageBean,java:
- package com.ycxw.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
- + "]";
- }
- }
2. PageTag.java
- package com.ycxw.tag;
-
- import com.ycxw.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();
- }
- }
3. ycxw.tld
- "1.0" encoding="UTF-8" ?>
-
"http://www.w3.org/2001/XMLSchema-instance" - xmlns="http://java.sun.com/xml/ns/j2ee"
- xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
- version="2.0">
-
-
ycxw 1.1 core library -
ycxw core -
1.1 - <short-name>ycxwshort-name>
-
http://jsp.veryedu.cn -
-
-
page -
com.ycxw.tag.PageTag -
JSP -
-
pageBean -
true -
true -
-
-
最终的项目结构如下:

1. 在UserMapper.xml新建一条查询sql
-
- select
-
"Base_Column_List" /> - from t_oa_user
-
- <if test="name!=null">
- and name like concat('%',#{name},'%')
- if>
-
-
2. 编写UserMapper接口方法
List listPager(User user);
3. 编写业务逻辑层接口
- package com.ycxw.biz;
-
- import com.ycxw.model.User;
- import com.ycxw.utils.PageBean;
-
- import java.util.List;
-
- public interface UserBiz {
- int deleteByPrimaryKey(Long id);
-
- int insert(User record);
-
- int insertSelective(User record);
-
- User selectByPrimaryKey(Long id);
-
- int updateByPrimaryKeySelective(User record);
-
- int updateByPrimaryKey(User record);
-
- List
listPager(User user, PageBean page); - }
4. 实现接口
- package com.ycxw.biz.impl;
-
- import com.ycxw.biz.UserBiz;
- import com.ycxw.mapper.UserMapper;
- import com.ycxw.model.User;
- import com.ycxw.utils.PageBean;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
-
- import java.util.List;
-
- /**
- * @author 云村小威
- * @site blog.csdn.net/Justw320
- * @create 2023-09-08 11:44
- */
- @Service
- public class UserBizImpl implements UserBiz {
- @Autowired
- private UserMapper userMapper;
-
- @Override
- public int deleteByPrimaryKey(Long id) {
- return userMapper.deleteByPrimaryKey(id);
- }
-
- @Override
- public int insert(User record) {
- return userMapper.insert(record);
- }
-
- @Override
- public int insertSelective(User record) {
- return userMapper.insertSelective(record);
- }
-
- @Override
- public User selectByPrimaryKey(Long id) {
- return userMapper.selectByPrimaryKey(id);
- }
-
- @Override
- public int updateByPrimaryKeySelective(User record) {
- return userMapper.updateByPrimaryKeySelective(record);
- }
-
- @Override
- public int updateByPrimaryKey(User record) {
- return userMapper.updateByPrimaryKey(record);
- }
-
- @Override
- public List
listPager(User user, PageBean page) { - return userMapper.listPager(user);
- }
- }
5. 编写切面,如果需要分页则需进行代码,在spring-mvc-xml文件中已经配置了aop代理,如果注释掉将不会进行分页。
- package com.ycxw.aspect;
-
- import com.github.pagehelper.PageHelper;
- import com.github.pagehelper.PageInfo;
- import com.ycxw.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;
-
- /**
- * @author 云村小威
- * @site blog.csdn.net/Justw320
- * @create 2023-09-08 1:30
- */
- @Aspect //代表当前为切面类
- @Component //代表当前类交给spring进行管理
- public class PageAspect {
- @Around("execution(* *..*Biz.*Pager(..))")
- public Object invoke(ProceedingJoinPoint args) throws Throwable {
- PageBean pageBean = null;
- //获取目标方法的所有参数
- Object[] args1 = args.getArgs();
- for (Object param:args1) {
- if (param instanceof PageBean){
- pageBean = (PageBean) param;
- break;
- }
- }
-
- if(pageBean!=null && pageBean.isPagination())
- PageHelper.startPage(pageBean.getPage(),pageBean.getRows());
-
- //执行目标方法
- Object proceed = args.proceed();
- if(pageBean!=null && pageBean.isPagination()){
- PageInfo info = new PageInfo((List) proceed);
- pageBean.setTotal((int) info.getTotal());
- }
- return proceed;
- }
- }
6. 编写web层控制器
- package com.ycxw.web;
-
- import com.ycxw.biz.UserBiz;
- import com.ycxw.model.User;
- import com.ycxw.utils.PageBean;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.GetMapping;
- import org.springframework.web.bind.annotation.PathVariable;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.servlet.ModelAndView;
-
- import javax.servlet.http.HttpServletRequest;
- import java.util.List;
-
- /**
- * @author 云村小威
- * @site blog.csdn.net/Justw320
- * @create 2023-09-08 11:56
- */
- @Controller
- @RequestMapping("/users")
- public class UserController {
- @Autowired
- private UserBiz userBiz;
-
- /*新增方法*/
- @RequestMapping("/add")
- public String save(User user, HttpServletRequest request) {
- userBiz.insertSelective(user);
- return "redirect:list";
- }
-
- /*删除方法*/
- @RequestMapping("/del/{id}")
- public String del(@PathVariable("id") Long id, HttpServletRequest request) {
- userBiz.deleteByPrimaryKey(id);
- return "redirect:/users/list";
- }
-
- /*修改方法*/
- @RequestMapping("/edit")
- public String edit(User user, HttpServletRequest request) {
- userBiz.updateByPrimaryKeySelective(user);
- return "redirect:list";
- }
-
- /*查询方法*/
- @GetMapping("/list")
- public ModelAndView list(User user, HttpServletRequest request) {
- PageBean pageBean = new PageBean();
- pageBean.setRequest(request);
- List
users = userBiz.listPager(user, pageBean); - ModelAndView modelAndView = new ModelAndView();
- modelAndView.addObject("users", users);
- modelAndView.addObject("pageBean", pageBean);
- modelAndView.setViewName("user/list");
-
- return modelAndView;
- }
-
- /*数据回显*/
- @RequestMapping("/preSave")
- public String preSave(User user, HttpServletRequest request) {
- if (user != null && user.getId() != null && user.getId() != 0) {
- User u = userBiz.selectByPrimaryKey(user.getId());
- request.setAttribute("u", u);
- }
- return "user/edit";
- }
- }
目录结构:

1. list.jsp :这里简单的用了bootstrap框架搭建的页面,并且是网络资源路径,联网即可用。
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
- <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
- <%@ taglib prefix="z" uri="http://jsp.veryedu.cn" %>
- "Content-Type" content="text/html; charset=UTF-8">
-
- href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/css/bootstrap.css"
- rel="stylesheet">
-
- src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/js/bootstrap.js">
-
"${pageContext.request.contextPath }"> -
博客列表 -
- action="/users/list" method="post">
- "form-group mb-2">
- "text" class="form-control-plaintext" name="name"
- placeholder="请输入用户名称">
-
-
- <%--"pagination" value="false" type="hidden">--%>
-
-
-
"table table-striped">-
-
-
"col">用户ID -
"col">用户名 -
"col">账号 -
"col">密码 -
"col">权限 -
-
-
-
var="u" items="${users }"> -
-
${u.id } -
${u.name } -
${u.loginname } -
${u.pwd } -
${u.rid } -
-
-
"${pageBean }"> -
2. edit.jsp : 新增、修改公共界面
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
-
用户编辑、新增公共页面 - 用户id:"text" name="id" value="${u.id }">
- 用户名:"text" name="name" value="${u.name }">
- 账号:"text" name="loginname" value="${u.loginname }">
- 密码:"text" name="pwd" value="${u.pwd }">
- 权限:"text" name="rid" value="${u.rid }">
- "submit">
3.3 运行测试
1. 所有数据测试:

2. 查询测试

3. 新增测试
4. 修改测试

5. 删除测试
-
相关阅读:
http库requests
python机器人编程——差速机器人小车的控制,控制模型、轨迹跟踪,轨迹规划、自动泊车(上)
2022-08-24 AndroidR 实现长按按键打开一个app或者打开app的某个界面
词嵌入(Word2Vec)
计算机专业毕业设计项目推荐14-文档编辑平台(SpringBoot+Vue+Mysql)
Redis键值存储数据库(高性能缓存库)
区块链的使用场景和优势
23.2、Android -- OkHttp3 基础学习 自定义设置
build和compile
音视频技术开发周刊 | 316
-
原文地址:https://blog.csdn.net/Justw320/article/details/132740754