一、项目结构截图:
![!\[在这里插入图片描述\](https://img-blo](https://img-blog.csdnimg.cn/20190309205353843.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zODQ4NDc0MA==,size_16,color_FFFFFF,t_70)![在这里插入图片描述](https://img-blog.csdnimg.cn/20190309205537363.png)二、配置文件介绍
POM文件配置:
<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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.ssm</groupId> <artifactId>blog</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>blog Maven Webapp</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target> <!-- spring版本号 --> <spring.version>4.2.5.RELEASE</spring.version> <!-- mybatis版本号 --> <mybatis.version>3.2.8</mybatis.version> <!-- mysql驱动版本号 --> <mysql-driver.version>5.1.29</mysql-driver.version> <!-- log4j日志包版本号 --> <slf4j.version>1.7.18</slf4j.version> <log4j.version>1.2.17</log4j.version> <!--spring-security版本号--> <spring-security.version>4.1.3.RELEASE</spring-security.version> <!--spring-data-redis版本号--> <spring.data.redis.version>1.7.1.RELEASE</spring.data.redis.version> </properties> <dependencies> <!-- 添加jstl依赖 --> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>7.0</version> </dependency> <!-- 添加spring核心依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-oxm</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency> <!-- 添加mybatis依赖 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> <!-- 添加mybatis/spring整合包依赖 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.2.2</version> </dependency> <!-- 添加mysql驱动依赖 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql-driver.version}</version> </dependency> <!-- 添加数据库连接池依赖 --> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.2.2</version> </dependency> <!-- 添加日志相关jar包 --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slf4j.version}</version> </dependency> <!-- log end --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jms</artifactId> <version>${spring.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.xbean/xbean-spring --> <dependency> <groupId>org.apache.xbean</groupId> <artifactId>xbean-spring</artifactId> <version>4.0</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-beanutils/commons-beanutils --> <dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> <version>1.9.3</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> <!-- 引入Mybatis分页插件 --> <!-- 引入5.0版本在测试的时候会报错 4.2版本也会报错 4.2版本总是出现String无法转换为某个对象的错误 --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.1.1</version> </dependency> <!-- 通用mapper --> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper</artifactId> <version>3.1.2</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.1.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.1.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.1.0</version> </dependency> </dependencies> <build> <finalName>blog</finalName> </build> </project>
(1)、jdbc.properties:
概念: jdbc.properties文件主要是配置了数据库连接信息(JDBC 加载驱动类、数据库地址URL、数据库账号密码、初始连接数、最大连接数等),主要是为了方便后面spring和mybatis整合时引入数据源,为了连接数据库而配置。 配置: #数据库驱动 driverClasss=com.mysql.jdbc.Driver #数据库地址 jdbcUrl=jdbc:mysql://localhost:3306/dream_db?useUnicode=true &characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull #数据库账号 username=root #数据库密码 password=137972zc #定义初始连接数 initialSize=0 #定义最大连接数 maxActive=20 #定义最大空闲 maxIdle=20 #定义最小空闲 minIdle=1 #定义最长等待时间 maxWait=60000(2)、log4j.properties文件配置
概念:
log4j.properties主要是为了设置日志信息,主要将程序运行中的日志信息输出到控制台和保存到文件.可以通过设置日志文件的输出级别来控制输出那些信息。 ERROR > WARN > INFO > DEBUG 设置级别为 ERROR 只会打印出 ERROR 日志; 设置级别为 WARN 会打印出 ERROR 和 WRAN 日志; 设置级别为 INFO 会打印出 ERROR、WARN 和 INFO 日志; 设置级别为 DEBUG会打印出 ERROR、WARN 、 INFO和 DEBUG日志;配置:
#指定输出级别为DEBUG,输出到Console,和File变量指定的地方 log4j.rootLogger=DEBUG,Console,File log4j.logger.org.springframework=ERROR,Console #设置Console变量,日志输出到控制台 log4j.appender.Console=org.apache.log4j.ConsoleAppender #指定SYSTEM_OUT 或 SYSTEM_ERR,默认是SYSTEM_OUT log4j.appender.Console.Target=System.out #设置为自定义布局 log4j.appender.Console.layout=org.apache.log4j.PatternLayout #日志输出格式设置,翻译为 [DEBUG][线程名][2019-02-01 12:01:54][类名]-输出信息-\n log4j.appender.Console.layout.ConversionPattern=[%p][%t][%d{yyyy-MM-dd HH\:mm\:ss}][%C] - %m%n #日志输出到文件,当文件到达设定大小时产生一个新的文件 log4j.appender.File=org.apache.log4j.RollingFileAppender #日志存放位置 log4j.appender.File.File=G:/javaWorkspace/blog/log4j/run.log #单个日志文件大小设置 log4j.appender.File.MaxFileSize=10MB #输出日志,如果换成DEBUG表示输出DEBUG以上级别日志 log4j.appender.File.Threshold=ALL log4j.appender.File.layout=org.apache.log4j.PatternLayout #[ALL][线程名][2019-03-01 12:01:42]-输出信息-\n log4j.appender.File.layout.ConversionPattern=[%p][%t][%d{yyyy-MM-dd HH\:mm\:ss}][%C] - %m%n(3)、mybatis-config.xml 文件配置
概念:
mybatis-config.xml 是mybatis的核心配置文件,主要是配置分页插件、设置实体别名、设置控制台打印sql语句等。 配置: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <settings> <!-- 开启驼峰匹配,配置后查询出的数据库字段自动转为对应的驼峰命名实体字段 --> <setting name="mapUnderscoreToCamelCase" value="true"/> <!-- 打印sql语句 --> <setting name="logImpl" value="LOG4J" /> </settings> <!-- 别名 --> <typeAliases> <!--扫描包,默认别名为:javabean 的首字母小写的非限定类名来作为它的别名--> <package name="com.base.entity" /> </typeAliases> <!-- mybatis分页插件 --> <plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin> </plugins> </configuration>(4)、spring-mybatis.xml文件配置
概念:
spring-mybatis.xml这个文件主要是用来整合spring和mybatis框架的,主要是做了以下设置: 1、自动扫描包,扫描范围内的java文件,只要带有spring注解,就把这些类交给spring容器管理,以下是几个常见的spring注解: @controller 控制器(注入服务) 用于标注控制层,相当于struts中的action层 @service 服务(注入dao) 用于标注服务层,主要用来进行业务的逻辑处理 @repository(实现dao访问) 用于标注数据访问层,也可以说用于标注数据访问组件,即DAO组件. @component (把普通pojo实例化到spring容器中,相当于配置文件中的 <bean id=" " class=" "/>) 当组件不好归类的时候,我们可以使用这个注解进行标注。 2、引入配置文件(jdbc.properties),引入后,当前xml就可以使用jdbc.properties里面设置的参数和属性,用于声明数据源 3、声明数据源 4、声明事务管理器,将数据源注入事务管理器 5、声明通知,将事务管理器注入通知,设置通知属性(事务管理模式,方法是否只读等等) 6、aop切入事务(声明切点,切面,切入通知) 7、声明sqlSessionFactory(sql会话工厂),注入mybatis核心配置文件、数据源,自动扫描mapping.xml文件路径。(声明sqlSessionFactory,设置dataSource,configLocation,mapperLocations三个属性) dataSource:数据库 configLocation:配置路径 mapperLocations:映射路径 8、声明MapperScannerConfigurer(mapping扫描配置器),扫描DAO接口,注入sqlSessionFactory(sql会话工厂),从而完成DAO接口和mapping.xml文件的映射。(设置basePackage和sqlSessionFactoryBeanName) basePackage:要扫描的DAO接口所在的包 sqlSessionFactoryBeanName:前面声明sqlSessionFactory的id(把sql会话注入到这些自动扫描到的DAO接口里面去)配置:
<?xml version="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:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <!-- 自动扫描,自动扫描这些包下的java文件,如果带有spring注解 (@Service,@Component,@Repository,@Controller等), 就把这些类注册为bean,由spring管理 --> <context:component-scan base-package="com.base"/> <!--加载多个properties文件,加载后,当前xml就可以使用加载文件的属性--> <bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> <property name="locations"> <list> <value>classpath:system/jdbc.properties</value> </list> </property> <property name="fileEncoding" value="UTF-8"/> </bean> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer"> <property name="properties" ref="configProperties"/> </bean> <!-- 配置数据源 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${driverClasss}"/> <property name="url" value="${jdbcUrl}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> <!-- 初始化连接大小 --> <property name="initialSize" value="${initialSize}"></property> <!-- 连接池最大数量 --> <property name="maxActive" value="${maxActive}"></property> <!-- 连接池最大空闲 --> <property name="maxIdle" value="${maxIdle}"></property> <!-- 连接池最小空闲 --> <property name="minIdle" value="${minIdle}"></property> <!-- 获取连接最大等待时间 --> <property name="maxWait" value="${maxWait}"></property> </bean> <!-- mybatis和spring完美整合,不需要mybatis的配置映射文件, 声明sqlSessionFactory,注入数据源和mybatis核心配置文件, 配置扫描路径configLocation(扫描xml --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <!-- 配置Mybati的核心配置文件 --> <property name="configLocation" value="classpath:mybatis/mybatis-config.xml" /> <!-- 自动扫描mapping.xml文件--> <property name="mapperLocations" value="classpath:**/dao/mapping/*.xml"></property> </bean> <!-- DAO接口所在包名,Spring会自动查找其下的类,扫描dao接口 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.base.dao"/> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> </bean> <!-- 事务管理--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <tx:annotation-driven transaction-manager="transactionManager"/> </beans>
(5)、spring-mvc.xml文件配置
概念: spring-mvc.xml文件是springMVC的核心配置文件,主要是配置了一下几点: 1、<mvc:default-servlet-handler />:启动自动检测机制,判断是否是静态资源,如果是静态资源就交给Servlet容器处理,否则就交给DispatcherServlet继续处理 2、开启自动扫描,将@Controller标注的类,交给spring容器管理 3、设置自动将对象转换成Json格式数据(JSON自动转换器) 4、启用注解驱动 5、视图模式配置(跳转路径的前后缀) 6、文件上传配置配置:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> <!-- 检查,如果是静态资源,就交给就将该请求转由Web应用服务器默认的Servlet处理, 如果不是静态资源的请求,才由DispatcherServlet继续处理。 --> <mvc:default-servlet-handler /> <!-- 自动扫描, 扫描包下的java文件, 如果带有@Component,@Repository,@Service,@Controller, 就会将这个对象作为Bean注册进Spring容器。 --> <context:component-scan base-package="com.base.controller"/> <!--自动将对象转换成Json格式数据,避免IE执行AJAX时,返回JSON出现下载文件 --> <bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> </list> </property> </bean> <!-- 启用注解驱动 --> <mvc:annotation-driven /> <!-- 定义跳转的文件的前后缀 ,视图模式配置 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/page" /> <property name="suffix" value=".jsp"/> </bean> <!-- 文件上传配置 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 默认编码 --> <property name="defaultEncoding" value="UTF-8"/> <!-- 上传文件大小限制为31M,31*1024*1024 --> <property name="maxUploadSize" value="32505856"/> <!-- 内存中的最大值 --> <property name="maxInMemorySize" value="4096"/> </bean> <!-- 对静态资源文件的访问--> <mvc:resources mapping="/images/**" location="/images/" cache-period="31556926"/> <mvc:resources mapping="/js/**" location="/js/" cache-period="31556926"/> <mvc:resources mapping="/css/**" location="/css/" cache-period="31556926"/> </beans>(6)、web.xml 配置
概念:
web.xml 是web程序启动时,tomcat要加载的文件,主要是设置以下初始化配置: 1、Web 应用的名字、描述(display-name 和 description 标签); 2、应用范围的初始化参数,定义要装配的文件(context-param 标签); 3、过滤器配置(filter 标签); 4、监听器配置(listener 标签); 5、servlet 配置(servlet 标签,如前端控制器和验证码); 6、欢迎页面(welcome-file-list 标签,如 index.jsp 页面); 7、session失效时间(session-config 标签); 8、错误页面配置(error-page 标签,如 404、500错误页面等)。配置:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <display-name>Archetype Created Web Application</display-name> <display-name>blog-web</display-name> <!-- 配置应用级参数contextConfigLocation, 定义了要装入的 Spring 配置文件。 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath:spring/spring-mybatis.xml </param-value> </context-param> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>classpath:system/log4j.properties</param-value> </context-param><context-param>
<param-name>log4jRefreshInterval</param-name > <param-value> 600000 </param-value > </context-param><!--log4j配置监听-->
<listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener> <!-- 编码过滤器 解决POST乱码问题--> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <!-- 设置过滤器encodingFilter扫描范围,/*--> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- spring监听器 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 防止spring内存溢出监听器,比如quartz --> <listener> <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class> </listener> <!-- spring mvc servlet--> <servlet> <servlet-name>SpringMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springMvc/spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> <async-supported>true</async-supported> </servlet> <!-- servlet-mapping --> <servlet-mapping> <servlet-name>SpringMVC</servlet-name> <!-- 此处也可以配置成 *.do 形式 --> <url-pattern>/</url-pattern> </servlet-mapping> <!-- 指明对于如下资源文件不采用spring的过滤器, 对客户端请求的静态资源如图片、JS文件等的请求交由默认的servlet进行处理 --> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.xml</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.css</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>page/index.jsp</welcome-file> <welcome-file>page/index.html</welcome-file> </welcome-file-list> <!-- session配置 --> <session-config> <session-timeout>15</session-timeout> </session-config> </web-app>
(7)、对于整合SSM框架我的总结:
主要步骤:
<1>:配置jdbc.properties文件,为了连接数据库 <2>:配置log4j文件,为了记录和输出日志信息。 <3>:配置mybatis.xml文件,为了指定mybatis的基本设置(别名\方言\分页插件等等) <4> : 配置spring-mybatis文件,为了整合spring和mybatis,让spring管理mybatis。其中分为这样几步: (1):<context:component-scan base-package="com.base"/> 设置自动扫描,扫描包下的java文件,如果带有spring注解,就交给spring来管理(@Service,@Component,@Repository,@Controller等) (2):加载多个properties文件,加载后,当前xml就可以使用加载文件的属性 (3):配置数据源 (4):声明"sqlSessionFactory"(sql会话),注入数据源和mybatis核心配置文件(mybatis.xml文件),配置扫描路径configLocation(也就是mapper映射文件的路径) (5):扫描dao接口,指定basePackage,Spring会自动查找其下的类,扫描dao接口,再将sqlSessionFactory注入进去。完成dao接口和mapper映射文件的映射。 (6):事务管理,声明事务管理器,将数据源注入到事务管理器,再设置通知(事务管理模式,方法是否只读等等),然后再设置aop,用aop的方式来管理事务(切点和切面(管理的范围就是切面),再通过动态代理的方法,把切点和通知联系起来,从而完成aop管理事务. <5> : 配置spring-MVC文件,为了设置Controller 层的包扫描、视图模式配置(跳转路径的前后缀)、文件上传配置、静态资源处理等 (1): <context:component-scan base-package="com.base.controller"/> 自动扫描, 扫描包下的java文件, 如果带有@Component,@Repository,@Service,@Controller, 就会将这个对象作为Bean注册进Spring容器。 (2):mappingJacksonHttpMessageConverter 设置json转换器 (3):启动注解驱动 <mvc:annotation-driven /> (4):定义跳转的文件的前后缀 ,视图模式配置 (5):文件上传配置 (6):设置对静态资源文件的访问 <6> : 配置web.xml文件,用来初始化配置信息(项目启动时,要加载那些东西) (1):配置应用级参数contextConfigLocation,定义要装入的配置文件。 (2):配置编码过滤器 解决POST乱码问题 (3):配置spring监听器 (4):配置spring mvc servlet,也就是DispatcherServlet(前端控制器) ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------三、开始增删改查功能
(1)、DAO层:UserMapper.xml:<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <!--namespace就是与此文件对应的Dao接口的全路径--> <mapper namespace="com.base.dao.IUserDao" > <!--根据id查询user实体--> <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultType="userEntity"> SELECT ID as id, NAME as name, AGE as age FROM USER WHERE ID = #{userId} </select> <!--插入user实体数据到数据库--> <insert id="saveUser" parameterType="userEntity"> INSERT INTO USER( NAME, AGE ) VALUES ( #{name}, #{age} ); </insert> <!--根据id删除user信息--> <delete id="deleteUser" parameterType="java.lang.Integer"> DELETE FROM USER WHERE ID IN (#{ids}) </delete> <!--根据id更新user信息--> <update id="updateUserEntity" parameterType="userEntity"> UPDATE USER SET NAME=#{name}, AGE=#{age} WHERE ID=#{id} </update> <!--查询所有user数据集合--> <select id="getUserList" parameterType="java.util.HashMap" resultType="java.util.HashMap"> SELECT ID AS id, NAME AS name, AGE AS age FROM USER WHERE 1=1 <if test="id !=null"> AND ID=#{id} </if> </select> </mapper> IUserDao:/**
* Copyright © 2019 eSunny Info. Tech Ltd. All rights reserved. * * 功能描述: * @Package: com.base.dao * @author: zhangCheng * @date: 2019年3月3日 下午1:00:19 */ package com.base.dao; import java.util.HashMap; import java.util.List; import org.springframework.stereotype.Repository; import com.base.entity.UserEntity; /** * Copyright: Copyright (c) 2019 LanRu-Caifu * * @ClassName: IUserDao.java * @Description: 用户模块dao接口 * * @version: v1.0.0 * @author: zhangCheng * @date: 2019年3月3日 下午1:00:19 * * Modification History: * Date Author Version Description *---------------------------------------------------------* * 2019年3月3日 zhangCheng v1.0.0 修改原因 */ @Repository("userDao") public interface IUserDao { /** * @Function: IUserDao.java * @Description: 根据id查询用户实体 * * @param:userId: userID * @return: * @throws:异常描述 * * @version: v1.0.0 * @author: zhangCheng * @date: 2019年3月3日 下午1:03:01 * * Modification History: * Date Author Version Description *---------------------------------------------------------* * 2019年3月3日 zhangCheng v1.0.0 修改原因 */ public UserEntity selectByPrimaryKey(Integer userId); /** * * @Function: IUserDao.java * @Description: 添加user信息 * * @param:userEntity 实体 * @return:返回结果描述 * @throws:异常描述 * * @version: v1.0.0 * @author: Administrator * @date: 2019年3月8日 下午8:15:59 * * Modification History: * Date Author Version Description *---------------------------------------------------------* * 2019年3月8日 Administrator v1.0.0 修改原因 */ public void saveUser(UserEntity userEntity); /** * @Function: IUserDao.java * @Description: 更新user信息 * * @param:userEntity user实体 * @return:返回结果描述 * @throws:异常描述 * * @version: v1.0.0 * @author: zhangCheng * @date: 2019年3月8日 下午8:45:23 * * Modification History: * Date Author Version Description *---------------------------------------------------------* * 2019年3月8日 zhangCheng v1.0.0 修改原因 */ public void updateUserEntity(UserEntity userEntity); /** * * @Function: IUserDao.java * @Description: 根据ids删除user信息 * * @param:描述1描述 * @return:返回结果描述 * @throws:异常描述 * * @version: v1.0.0 * @author: zhangCheng * @date: 2019年3月8日 下午8:46:07 * * Modification History: * Date Author Version Description *---------------------------------------------------------* * 2019年3月8日 zhangCheng v1.0.0 修改原因 */ public void deleteUser(Integer ids); /** * * @Function: IUserDao.java * @Description: 该函数的功能描述 * * @param:描述1描述 * @return:返回结果描述 * @throws:异常描述 * * @version: v1.0.0 * @author: zhangCheng * @date: 2019年3月9日 上午10:55:24 * * Modification History: * Date Author Version Description *---------------------------------------------------------* * 2019年3月9日 zhangCheng v1.0.0 修改原因 */ public List<Object> getUserList(HashMap<String, Object> map); }
(2)、Service层
IUserService:
package com.base.service;
import java.util.HashMap; import java.util.List; import javax.xml.rpc.ServiceException; import com.base.entity.UserEntity; /** * * Copyright: Copyright (c) 2019 LanRu-Caifu * * @ClassName: IUserService.java * @Description: 用户模块Service接口 * * @version: v1.0.0 * @author: zhangCheng * @date: 2019年3月3日 上午10:33:13 * * Modification History: * Date Author Version Description *---------------------------------------------------------* * 2019年3月3日 zhangCheng v1.0.0 修改原因 */ public interface IUserService { /** * * @Function: IUserService.java * @Description: 根据id查询user信息 * * @param:根据id查询用户 * @return:用户实体 * @throws:异常描述 * * @version: v1.0.0 * @author: zhangCheng * @throws ServiceException * @date: 2019年3月3日 上午10:34:16 * * Modification History: * Date Author Version Description *---------------------------------------------------------* * 2019年3月3日 zhangCheng v1.0.0 修改原因 */ public UserEntity selectByPrimaryKey(int userId) throws ServiceException; /** * @Function: IUserService.java * @Description: 添加user信息 * * @param:userEntity * @return: void * @throws:ServiceException * * @version: v1.0.0 * @author: zhangCheng * @date: 2019年3月8日 下午8:25:30 * * Modification History: * Date Author Version Description *---------------------------------------------------------* * 2019年3月8日 Administrator v1.0.0 修改原因 */ public void saveUser(UserEntity userEntity) throws ServiceException; /** * * @Function: IUserService.java * @Description: 根据删除user信息 * * @param:描述1描述 * @return:返回结果描述 * @throws:异常描述 * * @version: v1.0.0 * @author: zhangCheng * @date: 2019年3月8日 下午8:28:12 * * Modification History: * Date Author Version Description *---------------------------------------------------------* * 2019年3月8日 zhangCheng v1.0.0 修改原因 */ public void deleteUser(Integer id) throws ServiceException; /** * @Function: IUserService.java * @Description: 更新user * * @param:userEntity 用户实体 * @return:返回结果描述 * @throws:异常描述 * * @version: v1.0.0 * @author: zhangCheng * @date: 2019年3月8日 下午8:31:55 * * Modification History: * Date Author Version Description *---------------------------------------------------------* * 2019年3月8日 zhangCheng v1.0.0 修改原因 */ public void updateUser(UserEntity userEntity) throws ServiceException; /** * * @Function: IUserService.java * @Description: 查询list信息 * * @param:描述1描述 * @return:返回结果描述 * @throws:异常描述 * * @version: v1.0.0 * @author: zhangCheng * @date: 2019年3月9日 上午10:52:26 * * Modification History: * Date Author Version Description *---------------------------------------------------------* * 2019年3月9日 zhangCheng v1.0.0 修改原因 */ public List<Object> getUserList(HashMap<String, Object> map)throws ServiceException; }UserServiceImpl:
/**
* Copyright © 2019 eSunny Info. Tech Ltd. All rights reserved. * * 功能描述:用户模块Service接口实现 * @Package: com.base.service.impl * @author: zhangCheng * @date: 2019年3月3日 上午10:38:42 */ package com.base.service.impl; import java.util.HashMap; import java.util.List; import javax.annotation.Resource; import javax.xml.rpc.ServiceException; import org.springframework.stereotype.Service; import com.base.dao.IUserDao; import com.base.entity.UserEntity; import com.base.service.IUserService; /** * Copyright: Copyright (c) 2019 LanRu-Caifu * * @ClassName: UserServiceImpl.java * @Description: 用户模块Service接口实现类 * * @version: v1.0.0 * @author: zhangCheng * @date: 2019年3月3日 上午10:38:42 * * Modification History: * Date Author Version Description *---------------------------------------------------------* * 2019年3月3日 zhangCheng v1.0.0 修改原因 */ @Service("userService") public class UserServiceImpl implements IUserService { @Resource(name = "userDao") private IUserDao userDao; /** * @see com.base.service.IUserService#getUserById(int) * @Function: UserServiceImpl.java * @Description: 根据id查询user信息 * * @param: userId * @return:返回结果描述 * @throws:异常描述 * * @version: v1.0.0 * @author: zhangCheng * @throws ServiceException * @date: 2019年3月3日 上午10:40:04 * * Modification History: * Date Author Version Description *---------------------------------------------------------* * 2019年3月3日 zhangCheng v1.0.0 修改原因 */ @Override public UserEntity selectByPrimaryKey(int userId) throws ServiceException { UserEntity userEntity = null; try { userEntity=userDao.selectByPrimaryKey(userId); } catch (Exception e) { e.printStackTrace(); throw new ServiceException("错误信息:"+e.getMessage()); } return userEntity; } /** * @see com.base.service.IUserService#saveUser(com.base.entity.UserEntity) * @Function: UserServiceImpl.java * @Description: 添加user信息 * * @param: userId * @return:返回结果描述 * @throws:异常描述 * * @version: v1.0.0 * @author: zhangCheng * @throws ServiceException * @date: 2019年3月8日 下午8:32:45 * * Modification History: * Date Author Version Description *---------------------------------------------------------* * 2019年3月8日 zhangCheng v1.0.0 修改原因 */ @Override public void saveUser(UserEntity userEntity) throws ServiceException { try { userDao.saveUser(userEntity); } catch (Exception e) { e.printStackTrace(); throw new ServiceException("错误信息:"+e.getMessage()); } } /** * @see com.base.service.IUserService#deleteUser(java.lang.Integer) * @Function: UserServiceImpl.java * @Description: 根据id删除user信息 * * @param:userId * @return:返回结果描述 * @throws:异常描述 * * @version: v1.0.0 * @author: zhangCheng * @throws ServiceException * @date: 2019年3月8日 下午8:32:45 * * Modification History: * Date Author Version Description *---------------------------------------------------------* * 2019年3月8日 zhangCheng v1.0.0 修改原因 */ @Override public void deleteUser(Integer ids) throws ServiceException { try { userDao.deleteUser(ids); } catch (Exception e) { e.printStackTrace(); throw new ServiceException("错误信息:"+e.getMessage()); } } /** * @see com.base.service.IUserService#updateUser(com.base.entity.UserEntity) * @Function: UserServiceImpl.java * @Description: 更新user * * @param: userId * @return:返回结果描述 * @throws:异常描述 * * @version: v1.0.0 * @author: zhangCheng * @throws ServiceException * @date: 2019年3月8日 下午8:32:45 * * Modification History: * Date Author Version Description *---------------------------------------------------------* * 2019年3月8日 zhangCheng v1.0.0 修改原因 */ @Override public void updateUser(UserEntity userEntity) throws ServiceException { try { userDao.updateUserEntity(userEntity); } catch (Exception e) { e.printStackTrace(); throw new ServiceException("错误信息:"+e.getMessage()); } } /** * @see com.base.service.IUserService#getUserList(java.util.HashMap) * @Function: UserServiceImpl.java * @Description: 查询list信息 * * @param:描述1描述 * @return:返回结果描述 * @throws:异常描述 * * @version: v1.0.0 * @author: zhangCheng * @date: 2019年3月9日 上午10:53:13 * * Modification History: * Date Author Version Description *---------------------------------------------------------* * 2019年3月9日 zhangCheng v1.0.0 修改原因 */ @Override public List<Object> getUserList(HashMap<String, Object> map) throws ServiceException { List<Object> list=null; try { list=userDao.getUserList(map); } catch (Exception e) { e.printStackTrace(); throw new ServiceException("错误信息:"+e.getMessage()); } return list; } }(3)、UserController层
UserController:/**
* Copyright © 2019 eSunny Info. Tech Ltd. All rights reserved. * * 功能描述: * @Package: com.base.controller * @author: zhangCheng * @date: 2019年3月3日 下午1:18:14 */ package com.base.controller; import java.util.HashMap; import javax.xml.rpc.ServiceException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.ModelAndView; import com.base.entity.UserEntity; import com.base.service.IUserService; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; /** * Copyright: Copyright (c) 2019 LanRu-Caifu * * @ClassName: UserController.java * @Description: 用户模块Controller层 * * @version: v1.0.0 * @author: zhangCheng * @date: 2019年3月3日 下午1:18:14 * * Modification History: * Date Author Version Description *---------------------------------------------------------* * 2019年3月3日 zhangCheng v1.0.0 修改原因 */ @Controller @RequestMapping(value = "/user") public class UserController { //注入userService @Autowired IUserService userService; /** * * @Function: UserController.java * @Description: 根据id查询user信息 * * @param: id:用户id * @return:返回结果描述 * @throws:异常描述 * * @version: v1.0.0 * @author: zhangCheng * @date: 2019年3月8日 下午8:56:17 * * Modification History: * Date Author Version Description *---------------------------------------------------------* * 2019年3月8日 zhangCheng v1.0.0 修改原因 */ @RequestMapping(value="selectByPrimaryKey") public ModelAndView selectByPrimaryKey(Integer id) throws ServiceException { //声明ModelAndView对象 ModelAndView mv=new ModelAndView(); try { //加入属性"user",设置值为查询出来的user实体 mv.addObject("user",userService.selectByPrimaryKey(id)); //为了跳转到editUser.jsp页面 mv.setViewName("/user/editUser"); } catch (Exception e) { e.printStackTrace(); throw new ServiceException("错误信息:"+e.getMessage()); } return mv; } /** * * @Function: UserController.java * @Description: 添加用户信息 * * @param:userEntity 用户信息 * @return:返回结果描述 * @throws:异常描述 * * @version: v1.0.0 * @author: zhangCheng * @throws ServiceException * @date: 2019年3月8日 下午9:14:32 * * Modification History: * Date Author Version Description *---------------------------------------------------------* * 2019年3月8日 zhangCheng v1.0.0 修改原因 */ @RequestMapping("saveUser") public String saveUser(UserEntity userEntity) throws ServiceException { try { if(userEntity!=null); userService.saveUser(userEntity); } catch (Exception e) { e.printStackTrace(); throw new ServiceException("错误信息:"+e.getMessage()); } //重定向到getUserList方法 return "redirect:/user/getUserList"; }; /** * * @Function: UserController.java * @Description: 跳转到用户添加页面 * * @param:描述1描述 * @return:返回结果描述 * @throws:异常描述 * * @version: v1.0.0 * @author: zhangCheng * @date: 2019年3月9日 上午10:34:16 * * Modification History: * Date Author Version Description *---------------------------------------------------------* * 2019年3月9日 zhangCheng v1.0.0 修改原因 */ @RequestMapping("toAdduser") public String toAdduser() { //转发到addUser.jsp页面 return "/user/addUser"; } /** * * @Function: UserController.java * @Description: 删除user信息 * * @param: ids: id字符串 * @return:返回结果描述 * @throws:异常描述 * * @version: v1.0.0 * @author: zhangCheng * @date: 2019年3月8日 下午9:24:33 * * Modification History: * Date Author Version Description *---------------------------------------------------------* * 2019年3月8日 zhangCheng v1.0.0 修改原因 */ @RequestMapping("/deleteUser") public String deleteUser(Integer ids) throws ServiceException { try { userService.deleteUser(ids); } catch (Exception e) { e.printStackTrace(); throw new ServiceException("错误信息:"+e.getMessage()); } //重定向到getUserList方法 return "redirect:/user/getUserList"; }; /** * * @Function: UserController.java * @Description: 更新user实体 * * @param:描述1描述 * @return:返回结果描述 * @throws:异常描述 * * @version: v1.0.0 * @author: zhangCheng * @date: 2019年3月10日 下午12:32:26 * * Modification History: * Date Author Version Description *---------------------------------------------------------* * 2019年3月10日 zhangCheng v1.0.0 修改原因 */ @RequestMapping("updateUser") public String updateUser(UserEntity userEntity) throws ServiceException { try { userService.updateUser(userEntity); } catch (Exception e) { e.printStackTrace(); throw new ServiceException("错误信息:"+e.getMessage()); } //重定向到getUserList方法 return "redirect:/user/getUserList"; }; /** * * @Function: UserController.java * @Description: 跳转到首页 * * @param:描述1描述 * @return:返回结果描述 * @throws:异常描述 * * @version: v1.0.0 * @author: zhangCheng * @throws ServiceException * @date: 2019年3月9日 上午10:01:21 * * Modification History: * Date Author Version Description *---------------------------------------------------------* * 2019年3月9日 zhangCheng v1.0.0 修改原因 */ @RequestMapping("getUserList") public ModelAndView getUserList(@RequestParam(value="pn",defaultValue="1")Integer pn,ModelAndView mav) throws ServiceException{ PageHelper.startPage(pn, 5); mav.setViewName("/user/userInfo"); HashMap<String, Object> paramMap=new HashMap<String, Object>(); //将用户信息放入PageInfo对象里 PageInfo page = new PageInfo(userService.getUserList(paramMap),5); mav.addObject("pageInfo",page); return mav; }; /*public String getUserList(HttpServletRequest request) throws ServiceException{ HashMap<String, Object> paramMap=new HashMap<String, Object>(); request.setAttribute("userList", userService.getUserList(paramMap)); return "/user/userInfo"; }*/ }
(4)、页面:
先在网上下载,把静态资源放入项目里面: bootstrap和layui文件,在各种的官网上可以下载。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190310130419195.png)index.jsp: (首页,启动项目进入的页面)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190310130037259.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zODQ4NDc0MA==,size_16,color_FFFFFF,t_70)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%> <% pageContext.setAttribute("path", request.getContextPath()); %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>首页</title> <style type="text/css"> a { text-decoration: none; color: #fff; font-size: 14px; } h3 { width: 180px; height: 38px; margin: 100px auto; text-align: center; line-height: 38px; background: #5BC0DE; border-radius: 4px; } </style> </head> <body> <h3> <a href="${path}/user/getUserList">进入用户管理页</a> </h3> </body> </html> in.jsp:公共页面(定义一些公共变量或者方法,引入公共js\css)<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <c:set var="path" scope="session" value="${pageContext.request.contextPath}"/> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>in.jsp</title> <link href="${path}/static/bootstrap-3.3.7-dist/css/bootstrap.min.css" rel="stylesheet"> <script type="text/javascript" src="${path}/static/bootstrap-3.3.7-dist/js/jquery-1.10.1.min.js"></script> <script type="text/javascript" src="${path}/static/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script> <script type="text/javascript" src="${path}/static/layui/layui.all.js"></script> <script type="text/javascript"> //弹出框 function alert(text) { layer.open({ type: 1, skin: 'layui-layer-rim', //加上边框 area: ['300px', '220px'], //宽高 shadeClose: true, shade: 0.8, content: text }); }; </script> </head> <body> </body> </html>userInfo.jsp: (数据列表页面)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190311204348136.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zODQ4NDc0MA==,size_16,color_FFFFFF,t_70)
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <jsp:include page="../in.jsp" flush="true"/> <!DOCTYPE HTML> <html> <head> <title>用户列表</title> </head> <body> <div class="container"> <!-- 标题 --> <div class="row"> <div class="col-md-12"> <h1>用户管理</h1> </div> </div> <!-- 按钮 --> <div class="row"> <div class="col-md-4 col-md-offset-8"> <a class="btn btn-primary" href="${path}/user/toAdduser">新增</a> </div> </div> <!-- 表格 --> <div class="row"> <div class="col-md-12"> <table class="table table-hover"> <tr> <th>id</th> <th>用户名</th> <th>年龄</th> <th>操作</th> </tr> <c:forEach items="${pageInfo.list}" var="user"> <tr> <td>${user.id}</td> <td>${user.name }</td> <td>${user.age }</td> <td> <a type="button" href="${path}/user/selectByPrimaryKey?id=${user.id}" class="btn btn-info btn-sm"> <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span> 编辑</a> <a type="button" href="${path}/user/deleteUser?ids=${user.id}" class="btn btn-danger btn-sm"> <span class="glyphicon glyphicon-trash" aria-hidden="true" ></span> 删除</a> </td> </tr> </c:forEach> </table> </div> </div> <hr style="height:1px;border:none;border-top:1px solid #ccc;" /> <!-- 分页导航栏 --> <!-- 分页信息 --> <div class="row"> <!-- 分页文字信息,其中分页信息都封装在pageInfo中 --> <div class="col-md-6"> 当前第:${pageInfo.pageNum}页,总共:${pageInfo.pages}页,总共:${pageInfo.total}条记录 </div> <!-- 分页条 --> <div class="col-md-6"> <nav aria-label="Page navigation"> <ul class="pagination"> <li><a href="${path}/user/getUserList?pn=1">首页</a></li> <!-- 如果还有上一页,则显示 --> <c:if test="${pageInfo.hasPreviousPage }"> <li> <a href="${path}/user/getUserList?pn=${pageInfo.pageNum-1}" aria-label="Previous"> <span aria-hidden="true">«</span> </a> </li> </c:if> <!-- 循环所有页码 --> <c:forEach items="${pageInfo.navigatepageNums }" var="page_Num"> <!-- 如果等于当前页 --> <c:if test="${page_Num == pageInfo.pageNum }"> <li class="active"><a href="#">${ page_Num}</a></li> </c:if> <c:if test="${page_Num != pageInfo.pageNum }"> <li><a href="${path}/user/getUserList?pn=${ page_Num}">${ page_Num}</a></li> </c:if> </c:forEach> <c:if test="${pageInfo.hasNextPage }"> <li> <a href="${path}/user/getUserList?pn=${pageInfo.pageNum+1}" aria-label="Next"> <span aria-hidden="true">»</span> </a> </li> </c:if> </ul> </nav> </div> </div> </div> </body> </html>editUser.jsp: (数据编辑页面)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190310130106379.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zODQ4NDc0MA==,size_16,color_FFFFFF,t_70)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <jsp:include page="../in.jsp" flush="true"/> <!DOCTYPE html> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <html> <head> <title>编辑用户</title> <script type="text/javascript"> function updateUser() { var form = document.forms[0]; form.action = "${path}/user/updateUser"; form.method = "post"; form.submit(); } </script> </head> <body> <div class="container"> <!-- 标题 --> <div class="row"> <div class="col-md-12"> <h1>编辑用户</h1> </div> </div> <!-- 表单 --> <form class="form-horizontal" action="" name="userForm"> <input type="hidden" type="text" name="id" value="${user.id }"> <div class="form-group"> <label for="inputEmail3" class="col-md-2 control-label">姓名:</label> <div class="col-md-4"> <input class="form-control" type="text" name="name" value="${user.name }"> </div> </div> <div class="form-group"> <label for="inputEmail3" class="col-md-2 control-label">年龄:</label> <div class="col-md-4"> <input class="form-control" type="text" name="age" value="${user.age }"> </div> </div> <div class="form-group"> <label class="col-md-2 control-label"></label> <div class="col-md-4"> <button type="submit" class="btn btn-primary" οnclick="updateUser()" >编辑</button> </div> </div> </form> </div> </body> </html>addUser.jsp: (数据添加页面)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190310130131496.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zODQ4NDc0MA==,size_16,color_FFFFFF,t_70)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <jsp:include page="../in.jsp" flush="true"/> <!DOCTYPE HTML> <html> <head> <title>添加用户</title> <script type="text/javascript"> function addUser() { var form = document.forms[0]; form.action = "${path}/user/saveUser"; form.method = "post"; form.submit(); }; </script> </head> <body> <div class="container"> <!-- 标题 --> <div class="row"> <div class="col-md-12"> <h1>添加用户</h1> </div> </div> <!-- 表单 --> <div class="row"> <div class="col-md-12"> <form class="form-horizontal" action="" name="userForm"> <div class="form-group"> <label for="inputEmail3" class="col-md-2 control-label">姓名:</label> <div class="col-md-4"> <input class="form-control" type="text" name="name" > </div> </div> <div class="form-group"> <label class="col-md-2 control-label">年龄:</label> <div class="col-md-4"> <input class="form-control" type="text" name="age" > </div> </div> <div class="form-group"> <label class="col-md-2 control-label"></label> <div class="col-md-4"> <button type="submit" class="btn btn-primary" οnclick="addUser()" >添加</button> </div> </div> </form> </div> </div> </div> </body> </html>以上就是ssm实现增删查改的全部过程。