SSM框架搭建以及简单增删改查以及分页功能的实现(前端bootstrap+css+jq)

一、项目结构截图:
![在这里插入图片描述](https://img-blo
在这里插入图片描述

二、配置文件介绍

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文件,在各种的官网上可以下载。
在这里插入图片描述

index.jsp: (首页,启动项目进入的页面)

在这里插入图片描述

<%@ 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: (数据列表页面)

在这里插入图片描述

<%@ 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: (数据编辑页面)

在这里插入图片描述

<%@ 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" "updateUser()" >编辑</button>
			    </div>
			</div>
		
	    </form>
	</div>
</body>
</html>

addUser.jsp: (数据添加页面)

在这里插入图片描述

<%@ 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" "addUser()" >添加</button>
					    </div>
					</div>
			    </form>
		    </div>
	    </div>
    </div>
</body>
</html>

以上就是ssm实现增删查改的全部过程。

猜你喜欢

转载自blog.csdn.net/qq_39188150/article/details/88929203