整合前需要了解:

spring和springmvc包扫描的注意事项

Spring applicationContext.xml (父容器),SpringMVC springmvc-servlet.xml (子容器)

此时项目中有两个工厂

  • DispatcherServlet 启动的springMVC工厂==负责生产C及springMVC自己的系统组件(Servlet)

  • ContextLoaderListener 启动的spring工厂==负责生产其他所有组件(Listener)

  • springMVC的工厂会被设置为spring工厂的子工厂,可以随意获取spring工厂中的组件

  • 整合过程,就是累加:代码+依赖+配置。然后将service注入给controller即可

两个工厂不能有彼此侵入,即,生产的组件不能有重合。

  • mvc.xml中只扫描controller包, 其他不管, 其他包交给spring框架

    1. <!-- 告知SpringMVC 哪些包中 存在 被注解的类
    2. use-default-filters=true 凡是被 @Controller @Service @Repository注解的类,都会被扫描
    3. use-default-filters=false 默认不扫描包内的任何类, 只扫描include-filter中指定的类
    4. 只扫描被@Controller注解的类
    5. -->
    6. <context:component-scan base-package="com.xx" use-default-filters="false">
    7. <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    8. </context:component-scan>
  • applicationContext.xml中不扫描controller包, 这个包交给springMvc框架, spring框架扫描非controller的其他包
    1. <!-- 告知Spring
    2. 唯独不扫描@Controller注解的类 -->
    3. <context:component-scan base-package="com.xx" use-default-filters="true">
    4. <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    5. </context:component-scan>

正式开始整合

一、准备测试用的数据库

  1. CREATE TABLE `t_user` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `username` varchar(255) DEFAULT NULL,
  4. `password` varchar(255) DEFAULT NULL,
  5. `gender` tinyint(255) DEFAULT NULL,
  6. `regist_time` datetime DEFAULT NULL,
  7. PRIMARY KEY (`id`)
  8. ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
  9.  
  10. -- ----------------------------
  11. -- Records of t_user
  12. -- ----------------------------
  13. INSERT INTO `t_user` VALUES ('1', '青龙', '123', '1', '2021-03-07 09:08:39');
  14. INSERT INTO `t_user` VALUES ('2', '白虎', '123', '0', '2021-03-01 09:08:56');
  15. INSERT INTO `t_user` VALUES ('3', '朱雀', '123', '0', '2021-03-01 09:09:10');
  16. INSERT INTO `t_user` VALUES ('4', '玄武', '123', '1', '2021-03-07 09:09:24');

二、创建项目, 项目名为ssmDemo, 选择骨架为 maven-archetype-webapp, 创建后pom文件内容如下:

  1. <properties>
  2. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  3. <maven.compiler.source>1.8</maven.compiler.source>
  4. <maven.compiler.target>1.8</maven.compiler.target>
  5. </properties>
  6.  
  7. <dependencies>
  8. <!-- springMVC -->
  9. <dependency>
  10. <groupId>org.springframework</groupId>
  11. <artifactId>spring-webmvc</artifactId>
  12. <version>5.1.6.RELEASE</version>
  13. </dependency>
  14.  
  15. <dependency>
  16. <!-- jstl 支持 -->
  17. <groupId>javax.servlet</groupId>
  18. <artifactId>jstl</artifactId>
  19. <version>1.2</version>
  20. </dependency>
  21. <dependency>
  22. <!-- servlet编译环境 -->
  23. <groupId>javax.servlet</groupId>
  24. <artifactId>javax.servlet-api</artifactId>
  25. <version>3.1.0</version>
  26. <scope>provided</scope>
  27. </dependency>
  28. <dependency>
  29. <!-- jsp编译环境 -->
  30. <groupId>javax.servlet</groupId>
  31. <artifactId>jsp-api</artifactId>
  32. <version>2.0</version>
  33. <scope>provided</scope>
  34. </dependency>
  35.  
  36. <!-- FastJson -->
  37. <dependency>
  38. <groupId>com.alibaba</groupId>
  39. <artifactId>fastjson</artifactId>
  40. <version>1.2.54</version>
  41. </dependency>
  42.  
  43. <!-- Spring -->
  44. <dependency>
  45. <groupId>org.springframework</groupId>
  46. <artifactId>spring-context</artifactId>
  47. <version>5.1.6.RELEASE</version>
  48. </dependency>
  49. <dependency>
  50. <groupId>org.springframework</groupId>
  51. <artifactId>spring-aspects</artifactId>
  52. <version>5.1.6.RELEASE</version>
  53. </dependency>
  54. <dependency>
  55. <groupId>org.springframework</groupId>
  56. <artifactId>spring-test</artifactId>
  57. <version>5.1.6.RELEASE</version>
  58. </dependency>
  59. <dependency>
  60. <groupId>org.springframework</groupId>
  61. <artifactId>spring-jdbc</artifactId>
  62. <version>5.1.6.RELEASE</version>
  63. </dependency>
  64.  
  65. <!-- Spring整合mybatis -->
  66. <dependency>
  67. <groupId>org.mybatis</groupId>
  68. <artifactId>mybatis-spring</artifactId>
  69. <version>1.3.1</version>
  70. </dependency>
  71.  
  72. <!-- MyBatis -->
  73. <dependency>
  74. <groupId>org.mybatis</groupId>
  75. <artifactId>mybatis</artifactId>
  76. <version>3.4.5</version>
  77. </dependency>
  78.  
  79. <!-- mysql驱动 依赖 -->
  80. <dependency>
  81. <groupId>mysql</groupId>
  82. <artifactId>mysql-connector-java</artifactId>
  83. <version>5.1.25</version>
  84. <scope>runtime</scope>
  85. </dependency>
  86.  
  87. <!-- 连接池 -->
  88. <dependency>
  89. <groupId>com.alibaba</groupId>
  90. <artifactId>druid</artifactId>
  91. <version>1.1.12</version>
  92. </dependency>
  93.  
  94. <!-- Junit -->
  95. <dependency>
  96. <groupId>junit</groupId>
  97. <artifactId>junit</artifactId>
  98. <version>4.12</version>
  99. </dependency>
  100.  
  101. <!-- 分页插件 -->
  102. <dependency>
  103. <groupId>com.github.pagehelper</groupId>
  104. <artifactId>pagehelper</artifactId>
  105. <version>5.1.10</version>
  106. </dependency>
  107. </dependencies>

三、检查或创建项目结构

  • main目录下新建java目录放java源代码

    • java目录下创建包com.xx.controller 放控制层代码

    • java目录下创建包com.xx.dao 放持久层代码

    • java目录下创建包com.xx.service放业务层代码

    • java目录下创建包com.xx.pojo放实体类代码

    • java目录下创建包com.xx.utils 放工具类代码

    • java目录下创建包com.xx.config放初始化类代码

    • java目录下创建包com.xx.interceptor放拦截器代码

  • main目录下创建resources目录放配置文件

    • resources目录下创建com/xx/dao用于放置mybatis中对应的dao映射文件

  • webapp/WEB-INF/目录下创建 jsp目录放页面

  • webapp目录下创建js目录, img目录, css目录用于放置, js脚本, 图片, css样式

web.xml配置:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  5. version="4.0">
  6.  
  7. <!-- SpringMVC前端(核心)控制器
  8. 1. 前端,接收所有请求
  9. 2. 启动SpringMVC工厂 mvc.xml
  10. 3. springMVC流程调度
  11. -->
  12. <servlet>
  13. <servlet-name>mvc_shine</servlet-name>
  14. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  15. <init-param>
  16. <param-name>contextConfigLocation</param-name>
  17. <param-value>classpath:mvc.xml</param-value>
  18. </init-param>
  19. <!-- 懒 饿 可选-->
  20. <load-on-startup>1</load-on-startup>
  21. </servlet>
  22. <servlet-mapping>
  23. <servlet-name>mvc_shine</servlet-name>
  24. <url-pattern>/</url-pattern>
  25. </servlet-mapping>
  26.  
  27. <!-- 此过滤器会进行:request.setCharactorEncoding("utf-8"); -->
  28. <filter>
  29. <filter-name>encoding</filter-name>
  30. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  31. <init-param>
  32. <param-name>encoding</param-name>
  33. <param-value>utf-8</param-value>
  34. </init-param>
  35. </filter>
  36. <filter-mapping>
  37. <filter-name>encoding</filter-name>
  38. <url-pattern>/*</url-pattern>
  39. </filter-mapping>
  40.  
  41. <!-- 启动Spring工厂 -->
  42. <listener>
  43. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  44. </listener>
  45. <context-param>
  46. <param-name>contextConfigLocation</param-name>
  47. <param-value>classpath:applicationContext.xml</param-value>
  48. </context-param>
  49. </web-app>
applicationContext.xml配置
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:aop="http://www.springframework.org/schema/aop"
  4. xmlns:tx="http://www.springframework.org/schema/tx"
  5. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  6. xmlns:context="http://www.springframework.org/schema/context"
  7. xsi:schemaLocation="http://www.springframework.org/schema/beans
  8. http://www.springframework.org/schema/beans/spring-beans.xsd
  9. http://www.springframework.org/schema/aop
  10. http://www.springframework.org/schema/aop/spring-aop.xsd
  11. http://www.springframework.org/schema/tx
  12. http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
  13.  
  14. <!-- DataSource -->
  15. <context:property-placeholder location="classpath:jdbc.properties"/>
  16.  
  17. <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
  18. <!--基本配置-->
  19. <property name="driverClassName" value="${jdbc.driverClass}"/>
  20. <property name="url" value="${jdbc.url}"/>
  21. <property name="username" value="${jdbc.username}"/>
  22. <property name="password" value="${jdbc.password}"/>
  23.  
  24. <!-- 配置初始化大小、最小、最大 -->
  25. <property name="initialSize" value="${jdbc.init}"/>
  26. <property name="minIdle" value="${jdbc.minIdle}"/>
  27. <property name="maxActive" value="${jdbc.maxActive}"/>
  28.  
  29. <!-- 配置获取连接等待超时的时间 ms-->
  30. <property name="maxWait" value="60000"/>
  31.  
  32. <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
  33. <property name="timeBetweenEvictionRunsMillis" value="60000"/>
  34.  
  35. <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
  36. <property name="minEvictableIdleTimeMillis" value="300000"/>
  37. </bean>
  38.  
  39. <!-- SqlSessionFactory -->
  40. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  41. <!-- 注入连接池 -->
  42. <property name="dataSource" ref="dataSource"></property>
  43. <!-- 注入dao-mapper文件信息 ,如果映射文件和dao接口 同包且同名,则此配置可省略-->
  44. <property name="mapperLocations">
  45. <list>
  46. <value>classpath:com/xx/dao/*.xml</value>
  47. </list>
  48. </property>
  49. <!-- 为 dao-mapper文件中的实体 定义缺省包路径
  50. 如:<select id="queryAll" resultType="User"> 中 User类可以不定义包
  51. -->
  52. <property name="typeAliasesPackage" value="com.xx.pojo"></property>
  53.  
  54. <property name="plugins">
  55. <array>
  56. <bean class="com.github.pagehelper.PageInterceptor">
  57. <property name="properties">
  58. <props>
  59. <!-- 页号 调整到合理的值 0 max -->
  60. <prop key="reasonable">true</prop>
  61. </props>
  62. </property>
  63. </bean>
  64. </array>
  65. </property>
  66. </bean>
  67.  
  68. <!-- DAO MapperScannerConfigurer -->
  69. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  70. <!-- dao接口所在的包 如果有多个包,可以用逗号或分号分隔
  71. <property name="basePackage" value="com.a.dao,com.b.dao"></property>
  72. -->
  73. <property name="basePackage" value="com.xx.dao"></property>
  74. <!-- 如果工厂中只有一个SqlSessionFactory的bean,此配置可省略 -->
  75. <!--<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>-->
  76. </bean>
  77.  
  78. <!-- 扫描包,并排除Controller -->
  79. <context:component-scan base-package="com.xx" use-default-filters="true">
  80. <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
  81. </context:component-scan>
  82.  
  83. <!-- 引入一个事务管理器,其中依赖DataSource,借以获得连接,进而控制事务逻辑 -->
  84. <bean id="tx" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  85. <property name="dataSource" ref="dataSource"></property>
  86. </bean>
  87.  
  88. <!-- @Transactional -->
  89. <tx:annotation-driven transaction-manager="tx"/>
  90. </beans>

mvc.xml配置

  1. <beans xmlns="http://www.springframework.org/schema/beans"
  2. xmlns:context="http://www.springframework.org/schema/context"
  3. xmlns:mvc="http://www.springframework.org/schema/mvc"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans.xsd
  7. http://www.springframework.org/schema/context
  8. http://www.springframework.org/schema/context/spring-context.xsd
  9. http://www.springframework.org/schema/mvc
  10. http://www.springframework.org/schema/mvc/spring-mvc.xsd">
  11.  
  12. <!-- 注解扫描 -->
  13. <context:component-scan base-package="com.xx" use-default-filters="false">
  14. <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"></context:include-filter>
  15. </context:component-scan>
  16.  
  17. <!-- 注解驱动 -->
  18. <mvc:annotation-driven>
  19. <!-- 安装FastJson,转换器 -->
  20. <mvc:message-converters>
  21. <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
  22. <!-- 声明转换类型:json -->
  23. <property name="supportedMediaTypes">
  24. <list>
  25. <value>application/json</value>
  26. </list>
  27. </property>
  28. </bean>
  29. </mvc:message-converters>
  30. </mvc:annotation-driven>
  31.  
  32. <!-- 视图解析器
  33. 作用:1.捕获后端控制器的返回值="hello"
  34. 2.解析: 在返回值的前后 拼接 ==> "/hello.jsp"
  35. -->
  36. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  37. <!-- 前缀 -->
  38. <property name="prefix" value="/WEB-INF/jsp/"></property>
  39. <!-- 后缀 -->
  40. <property name="suffix" value=".jsp"></property>
  41. </bean>
  42.  
  43. <!--
  44. 额外的增加一个handler,且其requestMapping: "/**" 可以匹配所有请求,但是优先级最低
  45. 所以如果其他所有的handler都匹配不上,请求会转向 "/**" ,恰好,这个handler就是处理静态资源的
  46. 处理方式:将请求转会到tomcat中名为default的Servlet
  47.  
  48. RequestMapping /* /a /b /c /dxxxx /a/b
  49. /**
  50. -->
  51. <mvc:default-servlet-handler/>
  52. </beans>

jdbc.properties配置

  1. jdbc.driverClass=com.mysql.jdbc.Driver
  2. jdbc.url=jdbc:mysql://localhost:3306/mydb2?useUnicode=true&characterEncoding=UTF-8
  3. jdbc.username=root
  4. jdbc.password=123456
  5. jdbc.init=1
  6. jdbc.minIdle=1
  7. jdbc.maxActive=3

---测试用的页面---

/WEB-INF/jsp/ 目录下页面user.jsp

  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  3. <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
  4. <html lang="en">
  5. <head>
  6. <title>Hello, world!</title>
  7. </head>
  8. <body>
  9.  
  10. <table width="500px" align="center" border="1px">
  11. <thead>
  12. <tr>
  13. <th>id</th>
  14. <th>username</th>
  15. <th>password</th>
  16. <th>gender</th>
  17. <th>registTime</th>
  18. </tr>
  19. </thead>
  20. <tbody>
  21. <c:forEach items="${requestScope.users}" var="user">
  22. <tr>
  23. <td>${user.id}</td>
  24. <td>${user.username}</td>
  25. <td>${user.password}</td>
  26. <td>${user.gender}</td>
  27. <td>
  28. <fmt:formatDate value="${user.registTime}" pattern="yyyy-MM-dd"/>
  29. </td>
  30. </tr>
  31. </c:forEach>
  32. </tbody>
  33. </table>
  34. </body>
  35. </html>

/WEB-INF/jsp/ 目录下页面userPro.jsp

  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  3. <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
  4. <!doctype html>
  5. <html lang="en">
  6. <head>
  7. <title>Hello, world!</title>
  8. <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  9.  
  10. <!-- Bootstrap CSS -->
  11. <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.4.1/dist/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
  12. <!-- jQuery first, then Popper.js, then Bootstrap JS -->
  13. <script src="https://cdn.jsdelivr.net/npm/jquery@3.4.1/dist/jquery.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script>
  14. <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
  15. <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.4.1/dist/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1ixxktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>
  16.  
  17. </head>
  18. <body>
  19.  
  20. <table class="table table-bordered table-striped table-dark">
  21. <thead>
  22. <tr>
  23. <th>id</th>
  24. <th>username</th>
  25. <th>password</th>
  26. <th>gender</th>
  27. <th>registTime</th>
  28. </tr>
  29. </thead>
  30. <tbody>
  31. <c:forEach items="${requestScope.data.list}" var="user">
  32. <tr>
  33. <td>${user.id}</td>
  34. <td>${user.username}</td>
  35. <td>${user.password}</td>
  36. <td>${user.gender}</td>
  37. <td>
  38. <fmt:formatDate value="${user.registTime}" pattern="yyyy-MM-dd"/>
  39. </td>
  40. </tr>
  41. </c:forEach>
  42. </tbody>
  43. </table>
  44. <nav aria-label="...">
  45. <ul class="pagination justify-content-center" >
  46. <c:if test="${requestScope.data.hasPreviousPage}">
  47. <li class="page-item">
  48. <a class="page-link" href="${pageContext.request.contextPath}/users?pageNum=${requestScope.data.prePage}" tabindex="-1" aria-disabled="true">Previous</a>
  49. </li>
  50. </c:if>
  51. <c:if test="${!requestScope.data.hasPreviousPage}">
  52. <li class="page-item disabled">
  53. <a class="page-link" href="${pageContext.request.contextPath}/users?pageNum=${requestScope.data.prePage}" tabindex="-1" aria-disabled="true">Previous</a>
  54. </li>
  55. </c:if>
  56.  
  57. <%--<li class="page-item"><a class="page-link" href="#">1</a></li>
  58. <li class="page-item active" aria-current="page">
  59. <a class="page-link" href="#">2 <span class="sr-only">(current)</span></a>
  60. </li>
  61. <li class="page-item"><a class="page-link" href="#">3</a></li>--%>
  62.  
  63. <c:forEach begin="1" end="${requestScope.data.pages}" var="pageNum">
  64. <c:if test="${pageNum==requestScope.data.pageNum}">
  65. <li class="page-item active"><a class="page-link" href="${pageContext.request.contextPath}/users?pageNum=${pageNum}">${pageNum}</a></li>
  66. </c:if>
  67. <c:if test="${pageNum!=requestScope.data.pageNum}">
  68. <li class="page-item"><a class="page-link" href="${pageContext.request.contextPath}/users?pageNum=${pageNum}">${pageNum}</a></li>
  69. </c:if>
  70. </c:forEach>
  71.  
  72. <c:if test="${requestScope.data.hasNextPage}">
  73. <li class="page-item">
  74. <a class="page-link" href="${pageContext.request.contextPath}/users?pageNum=${requestScope.data.nextPage}">Next</a>
  75. </li>
  76. </c:if>
  77. <c:if test="${!requestScope.data.hasNextPage}">
  78. <li class="page-item disabled">
  79. <a class="page-link" href="${pageContext.request.contextPath}/users?pageNum=${requestScope.data.nextPage}">Next</a>
  80. </li>
  81. </c:if>
  82.  
  83. </ul>
  84. </nav>
  85. </body>
  86. </html>

准备实体类pojo

  1. package com.xx.pojo;
  2.  
  3. import java.util.Date;
  4.  
  5. public class User {
  6. private Integer id;
  7. private String username;
  8. private String password;
  9. private Boolean gender;
  10. private Date registTime;
  11.  
  12. public User(){}
  13. public User(Integer id, String username, String password, Boolean gender, Date registTime) {
  14. this.id = id;
  15. this.username = username;
  16. this.password = password;
  17. this.gender = gender;
  18. this.registTime = registTime;
  19. }
  20.  
  21. @Override
  22. public String toString() {
  23. return "User{" +
  24. "id=" + id +
  25. ", username='" + username + '\'' +
  26. ", password='" + password + '\'' +
  27. ", gender=" + gender +
  28. ", registTime=" + registTime +
  29. '}';
  30. }
  31.  
  32. // ....... get 和 set 方法......
  33.  
  34. }
  1. package com.xx.pojo;
  2.  
  3. public class Page {
  4. private Integer pageNum;
  5. private Integer pageSize=3;
  6.  
  7. public Page(){}
  8.  
  9. public Page(Integer pageNum, Integer pageSize) {
  10. this.pageNum = pageNum;
  11. this.pageSize = pageSize;
  12. }
  13.  
  14. @Override
  15. public String toString() {
  16. return "Page{" +
  17. "pageNum=" + pageNum +
  18. ", pageSize=" + pageSize +
  19. '}';
  20. }
  21.  
  22. // ....... get 和 set 方法......
  23.  
  24. }

dao接口

  1. package com.xx.dao;
  2.  
  3. import com.xx.pojo.User;
  4.  
  5. import java.util.List;
  6.  
  7. public interface UserDao {
  8.  
  9. List<User> queryUsers();
  10. }

dao映射文件

dao映射文件放在resources/com/xx/dao目录下必须叫做 UserDao.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  4.  
  5. <mapper namespace="com.xx.dao.UserDao">
  6.  
  7. <select id="queryUsers" resultType="User">
  8. select id,username,password,gender,regist_time registTime
  9. from t_user
  10. </select>
  11. </mapper>

service接口

  1. public interface UserService {
  2. PageInfo<User> queryUsers(Page page);
  3. }

service实现类

  1. @Service // userServiceImpl
  2. public class UserServiceImpl implements UserService {
  3.  
  4. @Autowired
  5. private UserDao userDAO;
  6.  
  7. @Override
  8. @Transactional(propagation = Propagation.SUPPORTS)
  9. public PageInfo<User> queryUsers(Page page) {
  10. PageHelper.startPage(page.getPageNum(),page.getPageSize());
  11. List<User> users = userDAO.queryUsers();
  12. return new PageInfo<User>(users);
  13. }
  14. }

controller类

  1. @Controller
  2. public class UserController {
  3.  
  4. @Autowired
  5. @Qualifier("userServiceImpl")
  6. private UserService userService;
  7.  
  8. @GetMapping("/users")
  9. public String queryUsers(Model model, Page page){
  10. System.out.println("queryUsers");
  11. PageInfo<User> pageInfo = userService.queryUsers(page);
  12. model.addAttribute("data",pageInfo);
  13. return "userPro";
  14. }
  15.  
  16. @RequestMapping("/users/{id}")
  17. public String queryOne(@PathVariable Integer id){
  18. System.out.println("query user id:"+id);
  19. return "index";
  20. }
  21.  
  22. @PostMapping(value = "/users")
  23. public String updateUser(User user){
  24. System.out.println("update User:"+user);
  25. return "index";
  26. }
  27. }

测试整合结果

启动tomcat, 访问地址如下:

http://localhost:8081/users?pageNum=1

 

SSM整合,快速新建javaWeb项目的更多相关文章

  1. [转]intellij 13新建javaweb项目并用tomcat 7启动

    来自:http://blog.csdn.net/little__zm/article/details/19570535 对intellij不熟,找了很多文章,只这篇最为顺利.其他都有各种各校的问题,先 ...

  2. IDEA新建javaWeb项目

    创建JavaWeb项目的步骤大致如下: 创建JavaWeb项目之前所需要的条件 - 安装jdk - 安装服务器(如:tomcat) - 安装idea 新建项目 New-->Project...

  3. Mac下intellij IDEA新建javaweb项目

    intellij IDEA可以说是非常好用的工具,本人用来开发java.比eclipse等好用太多了.谁用谁知道,当然只是开发工具而已,用什么都无所谓.大牛们都用记事本编程呢. 本文帮助新手创建一个j ...

  4. 基于Swagger+SpringBoot快速构建javaweb项目

    章节导航 SpringBoot&Swagger简介 数据模型和接口定义 项目框架生成 业务逻辑实现 项目源码地址 github项目路径:https://github.com/Vikezhu/s ...

  5. myeclipse新建javaweb项目,并部署到tomcat

    myeclipse使用的版本: 新建web项目: File-->New-->Web Project,输入项目名称,选择J2EE规范. 完成后: JRE System Library是只要做 ...

  6. ssm整合快速入门程序(二)

    下面我们配置serivce层到项目中 1.service包中创建ItemsService.java接口,和service.imp包中创建一个service实现类ItemsServiceImpl.jav ...

  7. ssm整合快速入门程序(一)

    整合基础说明 spring 是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用.Spring是于2003 年兴起的一个轻量级的Jav ...

  8. ubuntu eclipse 不能新建javaweb项目解决方案

    ubuntu下,通过sudo apt-get install eclipse 成功安装了eclipse,可它简洁的都让我不知如何新建web project.网上查了众多资料,终于找到了一系列简洁的方法 ...

  9. eclipse中新建javaweb项目,查看某些类的源码

    网上查到的大多说在项目下选择properties,在java Build Path下Add ExternalJAR Selection,加上Tomcat->lib下的servlet-api.ja ...

随机推荐

  1. Go微服务框架go-kratos实战04:kratos中服务注册和服务发现的使用

    一.简介 关于服务注册和服务发现介绍,我前面的文章有介绍过 - 服务注册和发现的文章. 作为服务中心的软件有很多,比如 etcd,consul,nacos,zookeeper 等都可以作为服务中心. ...

  2. 关于python导入数据库excel数据时出现102, b"Incorrect syntax near '.15562'.DB-Lib error message 20018, severity 1的问题总结

    1.对于在使用python导入sqlsever时,出现102, b"Incorrect syntax near '.15562'.DB-Lib error message 20018, se ...

  3. 面试突击55:delete、drop、truncate有什么区别?

    在 MySQL 中,删除的方法总共有 3 种:delete.truncate.drop,而三者的用法和使用场景又完全不同,接下来我们具体来看. 1.delete detele 可用于删除表的部分或所有 ...

  4. Docker-Compose实现Mysql主从

    1. 简介 通过使用docker-compose 搭建一个主从数据库,本示例为了解耦 将两个server拆分到了两个compose文件中,当然也可以放到一个compose文件中 演示mysql版本:5 ...

  5. 一文带你了解J.U.C的FutureTask、Fork/Join框架和BlockingQueue

    摘要: J.U.C是Java并发编程中非常重要的工具包,今天,我们就来着重讲讲J.U.C里面的FutureTask.Fork/Join框架和BlockingQueue. 本文分享自华为云社区<[ ...

  6. .NET Core 企业微信回调配置

    1.配置API接收 2.下载加密解密库 地址:https://developer.work.weixin.qq.com/devtool/introduce?id=36388,也可以复制下面的代码 2. ...

  7. 【前端面试】(二)JavaScript加法运算

    视频链接:JavaScript加法运算 - Web前端工程师面试题讲解 数值 + 数值 首先看菜鸟教程有关于数值对象的教程 JavaScript Number 对象 可以知道Infinity , -I ...

  8. Google Colab初次使用

    网页无法加载,出现HTTP ERROR 407 开启chrome时不要在最下面的固定栏打开,否则会出错.

  9. LeetCode. 812. 最大三角形面积

    812. 最大三角形面积 鞋带公式 鞋带公式,用于计算任意多边形的面积,可用于计算三角形的面积 已知 ΔABC 三个顶点的坐标 A:(x1,y1). B:(x2,y2). C:(x3,y3) 对应的矩 ...

  10. NC23036 华华听月月唱歌

    NC23036 华华听月月唱歌 题目 题目描述 月月唱歌超级好听的说!华华听说月月在某个网站发布了自己唱的歌曲,于是把完整的歌曲下载到了U盘里.然而华华不小心把U盘摔了一下,里面的文件摔碎了.月月的歌 ...