经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MyBatis » 查看文章
SSM整合配置(Spring+Spring MVC+Mybatis)
来源:cnblogs  作者:沁园春、宽  时间:2018/12/10 9:24:26  对本文有异议

一、配置准备

   通过Maven工程,在eclipse中整合SSM,并在Tomcat服务器上运行  

  在进行配置前,先理清楚要配置哪些文件,如图,除web.xml外,其余三个配置文件名称均可自定义:

   如图所示,一共有四个需要手动配置的文件:

  1、web.xml:配置servlet、filter、listener

  2、applicationContext.xml:配置相关的bean,与mybatis整合

  3、Spring-Servlet.xml:用于配置视图解析器、控制器等

  4、GenratorConfig.xml:用于生成Mybatis用到的实体类、Mapper接口、Map配置文件 

  新建一个Maven工程,工程结构如图:

 

二、配置过程

  大致了解所需配置文件后,开始配置

  1、Web.xml

  配置前首先导入依赖包

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>ssm</groupId>
  5. <artifactId>ssm</artifactId>
  6. <packaging>war</packaging>
  7. <version>0.0.1-SNAPSHOT</version>
  8. <name>ssm Maven Webapp</name>
  9. <url>http://maven.apache.org</url>
  10. <properties>
  11. <spring.version>5.0.0.RELEASE</spring.version>
  12. <!--mybatis版本号,3.4.5是2017年8月发布的新版本-->
  13. <mybatis.version>3.4.5</mybatis.version>
  14. <!--<slf4j.version>1.7.25</slf4j.version>-->
  15. <slf4j.version>1.7.25</slf4j.version>
  16. <log4j.version>1.2.17</log4j.version>
  17. </properties>
  18. <dependencies>
  19. <dependency>
  20. <groupId>junit</groupId>
  21. <artifactId>junit</artifactId>
  22. <version>4.11</version>
  23. <scope>test</scope>
  24. </dependency>
  25. <!--spring核心包——Start-->
  26. <dependency>
  27. <groupId>org.springframework</groupId>
  28. <artifactId>spring-core</artifactId>
  29. <version>${spring.version}</version>
  30. </dependency>
  31. <dependency>
  32. <groupId>org.springframework</groupId>
  33. <artifactId>spring-web</artifactId>
  34. <version>${spring.version}</version>
  35. </dependency>
  36. <dependency>
  37. <groupId>org.springframework</groupId>
  38. <artifactId>spring-oxm</artifactId>
  39. <version>${spring.version}</version>
  40. </dependency>
  41. <dependency>
  42. <groupId>org.springframework</groupId>
  43. <artifactId>spring-tx</artifactId>
  44. <version>${spring.version}</version>
  45. </dependency>
  46. <dependency>
  47. <groupId>org.springframework</groupId>
  48. <artifactId>spring-jdbc</artifactId>
  49. <version>${spring.version}</version>
  50. </dependency>
  51. <dependency>
  52. <groupId>org.springframework</groupId>
  53. <artifactId>spring-webmvc</artifactId>
  54. <version>${spring.version}</version>
  55. </dependency>
  56. <dependency>
  57. <groupId>org.springframework</groupId>
  58. <artifactId>spring-aop</artifactId>
  59. <version>${spring.version}</version>
  60. </dependency>
  61. <dependency>
  62. <groupId>org.springframework</groupId>
  63. <artifactId>spring-context-support</artifactId>
  64. <version>${spring.version}</version>
  65. </dependency>
  66. <dependency>
  67. <groupId>org.springframework</groupId>
  68. <artifactId>spring-test</artifactId>
  69. <version>${spring.version}</version>
  70. <scope>test</scope>
  71. </dependency>
  72. <dependency>
  73. <groupId>org.mybatis</groupId>
  74. <artifactId>mybatis</artifactId>
  75. <version>${mybatis.version}</version>
  76. </dependency>
  77. <dependency>
  78. <groupId>com.github.pagehelper</groupId>
  79. <artifactId>pagehelper</artifactId>
  80. <version>4.1.6</version>
  81. </dependency>
  82. <dependency>
  83. <groupId>tk.mybatis</groupId>
  84. <artifactId>mapper</artifactId>
  85. <version>3.3.8</version>
  86. </dependency>
  87. <!--mybatis/spring包-->
  88. <dependency>
  89. <groupId>org.mybatis</groupId>
  90. <artifactId>mybatis-spring</artifactId>
  91. <version>1.3.1</version>
  92. </dependency>
  93. <!--mysql数据库的jdbc连接包-->
  94. <dependency>
  95. <groupId>mysql</groupId>
  96. <artifactId>mysql-connector-java</artifactId>
  97. <!-- mysql-8 需要 Connector/J 8.0.9 or higher -->
  98. <version>8.0.13</version>
  99. </dependency>
  100. <!-- 导入dbcp的jar包,用来在applicationContext.xml中配置数据库 -->
  101. <dependency>
  102. <groupId>commons-dbcp</groupId>
  103. <artifactId>commons-dbcp</artifactId>
  104. <version>1.4</version>
  105. </dependency>
  106. </dependencies>
  107. <build>
  108. <finalName>ssm</finalName>
  109. <plugins>
  110. <plugin>
  111. <groupId>org.mybatis.generator</groupId>
  112. <artifactId>mybatis-generator-maven-plugin</artifactId>
  113. <version>1.3.2</version>
  114. <!-- 配置文件位置 -->
  115. <configuration>
  116. <configurationFile>
  117. src/main/resources/generatorConfig.xml
  118. </configurationFile>
  119. <verbose>true</verbose>
  120. <overwrite>true</overwrite>
  121. </configuration>
  122. <!-- 自动生成PO类的核心包 -->
  123. <dependencies>
  124. <dependency>
  125. <groupId>org.mybatis.generator</groupId>
  126. <artifactId>mybatis-generator-core</artifactId>
  127. <version>1.3.2</version>
  128. </dependency>
  129. <dependency>
  130. <groupId>mysql</groupId>
  131. <artifactId>mysql-connector-java</artifactId>
  132. <!-- mysql-8 需要 Connector/J 8.0.9 or higher -->
  133. <version>8.0.13</version>
  134. </dependency>
  135. </dependencies>
  136. </plugin>
  137. </plugins>
  138. </build>
  139. </project>

   spring mvc采用前置控制器的设计模式,由一个DispatcherServlet负责分派,因此要在web.xml中对这个Servlet进行配置,该Servlet在启动时便实例化,因此要配置load-on-startup属性,我们先了解一下Spring MVC中的Context Hierarchy,首先看一张来自官网的图

  WebApplicationContext是ApplicationContext的拓展,是用于生成Bean的工厂,每个DispatcherServlet都需要一个Servlet WebApplicationContext来进行自己的配置,多个DispatcherServlet共享一个Root WebApplicationContext的配置,通常,在Servlet WebApplicationContext中配置控制器、视图解析器,在Root WebApplicationContext配置需要被多个Servlet共享的业务逻辑以及数据访问的Bean。

  每个DispatcherServlet对应的Servlet WebApplicationContext,默认名称为[servlet-name]-servlet,如本例中web.xml中配置servlet-name为spring,那么默认的Servlet WebApplicationContext配置文件名称便为spring-servlet,其默认路径在WEB-INF下,当然,也可以通过在Servlet中配置init-param的contextConfigLocation来自定义配置路径以及配置名称,本例中不进行配置,采用默认的名称 spring-servlet

  

   对于Root WebApplicationContext的配置,首先要在web.xml中通过<context-param>标签,设置该标签中contextConfigLocation的值,指定Root WebApplicationContext的路径与名称,随后在通过配置一个名为org.springframework.web.context.ContextLoaderListener的监听器,在启动时读取contextConfigLocation指定的Root WebApplicationContext,这里指定的Root WebApplicationContext在src/main/resources/applicationContext.xml中。配置完毕后的web.xml如下所示

  1. <!DOCTYPE web-app PUBLIC
  2. "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
  3. "http://java.sun.com/dtd/web-app_2_3.dtd" >
  4. <web-app>
  5. <context-param>
  6. <param-name>contextConfigLocation</param-name>
  7. <param-value>classpath:applicationContext.xml</param-value>
  8. </context-param>
  9. <listener>
  10. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  11. </listener>
  12. <servlet>
  13. <servlet-name>spring</servlet-name>
  14. <servlet-class>
  15. org.springframework.web.servlet.DispatcherServlet
  16. </servlet-class>
  17. <load-on-startup>1</load-on-startup>
  18. </servlet>
  19. <servlet-mapping>
  20. <servlet-name>spring</servlet-name>
  21. <url-pattern>/</url-pattern>
  22. </servlet-mapping>
  23. </web-app>

2、spring-servlet.xml配置

  在该配置文件中,主要配置控制器与视图解析器,配置过程比较简单,先在工程中新建一个实现控制器的包,这里定义为ssm.controller,随后配置一个视图解析器的bean以及扫描控制器注解,配置完毕后如图所示

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:mvc="http://www.springframework.org/schema/mvc"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans.xsd
  8. http://www.springframework.org/schema/context
  9. http://www.springframework.org/schema/context/spring-context.xsd
  10. http://www.springframework.org/schema/mvc
  11. http://www.springframework.org/schema/mvc/spring-mvc.xsd">
  12. <!--启用spring的一些annotation -->
  13. <context:annotation-config/>
  14. <!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 -->
  15. <context:component-scan base-package="ssm.controller">
  16. <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
  17. </context:component-scan>
  18. <!--配置视图解析器-->
  19. <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  20. <property name="prefix" value="/WEB-INF/jsp/"/>
  21. <property name="suffix" value=".jsp"/>
  22. </bean>
  23. </beans>

3、generatorConfig.xml配置

  要在applicationContext.xml中整合spring与mybatis,至少要配置两样东西:一个 SqlSessionFactory 和至少一个数据映射器类,因此,我们要先通过generatorConfig.xml,帮助我们自动生成实体对象、Mapper接口,以及对应的Mapper.xml文件。generatorConfig.xml的路径由pom.xml中configurationFile指定

 

 

  在这个配置文件中:

  jdbcConnection指定数据连接

  javaModelGenerator指定要生成的实体对象的位置,

  sqlMapGenerator指定要生成的Map.xml文件的位置

  javaClientGenerator指定要生成的Mapper接口的位置

  table指定要生成的表,通过enable**ByExample属性,指定是否要生成example文件

  我们指定生成的数据表如下:

  

  最终配置文件如图

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE generatorConfiguration
  3. PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
  4. "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
  5. <generatorConfiguration>
  6. <context id="test" defaultModelType="flat">
  7. <commentGenerator>
  8. <property name="suppressDate" value="true"/>
  9. <!-- 是否去除自动生成的注释 true:是 : false:否 -->
  10. <property name="suppressAllComments" value="true"/>
  11. </commentGenerator>
  12. <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://127.0.0.1:3306/test?autoReconnect=true&amp;utoReconnectForPools=true&amp;
  13. useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=false&amp;
  14. serverTimezone=UTC"
  15. userId="root" password="wqk123">
  16. </jdbcConnection>
  17. <javaTypeResolver>
  18. <property name="forceBigDecimals" value="false"/>
  19. </javaTypeResolver>
  20. <!-- pojo -->
  21. <javaModelGenerator targetPackage="com.entity" targetProject="src/main/java">
  22. </javaModelGenerator>
  23. <!-- 创建mapxml -->
  24. <sqlMapGenerator targetPackage="map" targetProject="src/main/resources">
  25. <property name="enableSubPackages" value="true"/>
  26. </sqlMapGenerator>
  27. <!-- 创建map接口,作用等同于dao接口 -->
  28. <javaClientGenerator targetPackage="com.map" type="XMLMAPPER" targetProject="src/main/java">
  29. <property name="enableSubPackages" value="true"/>
  30. </javaClientGenerator>
  31. <table tableName="food_item" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false"
  32. enableSelectByExample="false" selectByExampleQueryId="false">
  33. <generatedKey column="food_id" sqlStatement="MySql" identity="true"/>
  34. </table>
  35. </context>
  36. </generatorConfiguration>

  配置完毕后,在项目上指定maven build,并设置Goalsmybatis-generator:generate -X,随后自动生成相应文件如图

 

4、配置applicationContext.xml

  在配置generatorConfig.xml时提到了,如果要想在applicationContext.xml中实现Mybatis与spring的整合,那么至少需要配置两样东西:一个 SqlSessionFactory至少一个数据映射器类,此外,在applicationContext.xml中还要扫描实现业务逻辑的service包并配置数据库链接源  

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:tx="http://www.springframework.org/schema/tx"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans.xsd
  8. http://www.springframework.org/schema/context
  9. http://www.springframework.org/schema/context/spring-context.xsd
  10. http://www.springframework.org/schema/tx
  11. http://www.springframework.org/schema/tx/spring-tx.xsd">
  12. <!--配置连接池数据源-->
  13. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
  14. <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
  15. <property name="url" value="jdbc:mysql://127.0.0.1:3306/test?autoReconnect=true&amp;utoReconnectForPools=true&amp;
  16. useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=false&amp;
  17. serverTimezone=UTC"/>
  18. <property name="username" value="root"/>
  19. <property name="password" value="wqk123"/>
  20. </bean>
  21. <!--spring和mybatis整合-->
  22. <!--会话工厂bean SQLSessionFactory-->
  23. <bean id="SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  24. <!--数据源-->
  25. <property name="dataSource" ref="dataSource"/>
  26. <!--别名-->
  27. <property name="typeAliasesPackage" value="com.entity"/>
  28. <!-- 感觉这里不应该直接写:ToolTPOMapper.xml -->
  29. <!--sql映射文件-->
  30. <property name="mapperLocations" value="classpath:map/FoodItemMapper.xml"/>
  31. <!--<property name="configLocation" value="classpath:config/mybatis-config.xml"/>-->
  32. </bean>
  33. <!--扫描mapper接口包-->
  34. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  35. <!--指定要自动扫描接口的基础包,实现接口-->
  36. <property name="basePackage" value="com.map"/>
  37. <!--指定会话工厂,如果上下文中只有一个则可以省去-->
  38. <property name="sqlSessionFactoryBeanName" >
  39. <idref bean="SqlSessionFactory"/>
  40. </property>
  41. </bean>
  42. <!--service实现类扫描-->
  43. <context:component-scan base-package="com.service"/>
  44. <!--事务管理-->
  45. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  46. <property name="dataSource" ref="dataSource"/>
  47. </bean>
  48. <!--支持注解驱动的事务管理,指定事务管理器-->
  49. <tx:annotation-driven transaction-manager="transactionManager"/>
  50. </beans>

至此,配置以及完成

三、验证配置

  实现一个简单的功能,通过id参数读取相应食品的名称以及描述

1、定义业务逻辑的service接口并实现

2、定义控制器并实现

3、测试实际效果

 

 

 

 

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号