最新版的SSM框架spring5.0搭建教程(附源码)

<p>用SSM框架已经有一段时间了,但都没有完整地搭建过一次工程。前段时间比较有时间就自己试着搭建了一下,差不多都是用的最新的spring版本了,然后就在这个基础上做了很多的实验测试。最近想着还是记录一下整个搭建的过程,以便于自己日后参考。所以就重新翻新了一下,为了写得尽可能地详细点所以内容有点多。</p>

GitHub的源码地址:SSMDemo GitHub源码

我是用的idea这个软件搭建的,我也一直使用的这个软件,非常好用,很适合做Java的朋友。

1.创建一个maven的web工程。

为了方便我尽可能地上截图了。

创建maven的web工程

项目名称

配置maven

上面的操作就完成了创建工程的基本操作了。

2.创建工程的包结构

创建好各层的测试类和常规的配置文件

整个工程的包结构就创建完成了。

3.导包,这是非常重要的一步,需要将我们使用的spring、springMVC和MyBatis的相关包都导进来,直接使用maven依赖。

直接上pom.xml的源码:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <groupId>com.viking.SSDemo</groupId>
  6. <artifactId>SSMDemo</artifactId>
  7. <version>1.0-SNAPSHOT</version>
  8. <packaging>war</packaging>
  9. <name>SSMDemo Maven Webapp</name>
  10. <!-- FIXME change it to the project's website -->
  11. <url>http://www.example.com</url>
  12. <properties>
  13. <!--spring版本号,5.0.0RELEASE是2017年9月发布的新版本-->
  14. <spring.version>5.0.0.RELEASE</spring.version>
  15. <!--mybatis版本号,3.4.5是2017年8月发布的新版本-->
  16. <mybatis.version>3.4.5</mybatis.version>
  17. <!--<slf4j.version>1.7.25</slf4j.version>-->
  18. <slf4j.version>1.7.25</slf4j.version>
  19. <log4j.version>1.2.17</log4j.version>
  20. </properties>
  21. <dependencies>
  22. <dependency>
  23. <groupId>junit</groupId>
  24. <artifactId>junit</artifactId>
  25. <version>4.11</version>
  26. <scope>test</scope>
  27. </dependency>
  28. <!--spring核心包——Start-->
  29. <dependency>
  30. <groupId>org.springframework</groupId>
  31. <artifactId>spring-core</artifactId>
  32. <version>${spring.version}</version>
  33. </dependency>
  34. <dependency>
  35. <groupId>org.springframework</groupId>
  36. <artifactId>spring-web</artifactId>
  37. <version>${spring.version}</version>
  38. </dependency>
  39. <dependency>
  40. <groupId>org.springframework</groupId>
  41. <artifactId>spring-oxm</artifactId>
  42. <version>${spring.version}</version>
  43. </dependency>
  44. <dependency>
  45. <groupId>org.springframework</groupId>
  46. <artifactId>spring-tx</artifactId>
  47. <version>${spring.version}</version>
  48. </dependency>
  49. <dependency>
  50. <groupId>org.springframework</groupId>
  51. <artifactId>spring-jdbc</artifactId>
  52. <version>${spring.version}</version>
  53. </dependency>
  54. <dependency>
  55. <groupId>org.springframework</groupId>
  56. <artifactId>spring-webmvc</artifactId>
  57. <version>${spring.version}</version>
  58. </dependency>
  59. <dependency>
  60. <groupId>org.springframework</groupId>
  61. <artifactId>spring-aop</artifactId>
  62. <version>${spring.version}</version>
  63. </dependency>
  64. <dependency>
  65. <groupId>org.springframework</groupId>
  66. <artifactId>spring-context-support</artifactId>
  67. <version>${spring.version}</version>
  68. </dependency>
  69. <dependency>
  70. <groupId>org.springframework</groupId>
  71. <artifactId>spring-test</artifactId>
  72. <version>${spring.version}</version>
  73. <scope>test</scope>
  74. </dependency>
  75. <!--spring核心包——End-->
  76. <!--MyBatis核心包-->
  77. <dependency>
  78. <groupId>org.mybatis</groupId>
  79. <artifactId>mybatis</artifactId>
  80. <version>${mybatis.version}</version>
  81. </dependency>
  82. <dependency>
  83. <groupId>com.github.pagehelper</groupId>
  84. <artifactId>pagehelper</artifactId>
  85. <version>4.1.6</version>
  86. </dependency>
  87. <dependency>
  88. <groupId>tk.mybatis</groupId>
  89. <artifactId>mapper</artifactId>
  90. <version>3.3.8</version>
  91. </dependency>
  92. <!--mybatis/spring包-->
  93. <dependency>
  94. <groupId>org.mybatis</groupId>
  95. <artifactId>mybatis-spring</artifactId>
  96. <version>1.3.1</version>
  97. </dependency>
  98. <!--javaEE版本8.0-->
  99. <dependency>
  100. <groupId>javax</groupId>
  101. <artifactId>javaee-api</artifactId>
  102. <version>8.0</version>
  103. <scope>provided</scope>
  104. </dependency>
  105. <!--mysql数据库的jdbc连接包-->
  106. <dependency>
  107. <groupId>mysql</groupId>
  108. <artifactId>mysql-connector-java</artifactId>
  109. <!--新版本使用最多的是6.0.6 但在我的配置中无法使用该版本,报一个很无解的异常-->
  110. <version>5.1.39</version>
  111. </dependency>
  112. <!-- 导入dbcp的jar包,用来在applicationContext.xml中配置数据库 -->
  113. <dependency>
  114. <groupId>commons-dbcp</groupId>
  115. <artifactId>commons-dbcp</artifactId>
  116. <version>1.4</version>
  117. </dependency>
  118. <!--jstl标签包-->
  119. <dependency>
  120. <groupId>jstl</groupId>
  121. <artifactId>jstl</artifactId>
  122. <version>1.2</version>
  123. </dependency>
  124. <!--日志文件管理包——logStart-->
  125. <dependency>
  126. <groupId>log4j</groupId>
  127. <artifactId>log4j</artifactId>
  128. <version>${log4j.version}</version>
  129. </dependency>
  130. <dependency>
  131. <groupId>org.slf4j</groupId>
  132. <artifactId>slf4j-log4j12</artifactId>
  133. <version>${slf4j.version}</version>
  134. <!--<scope>test</scope>-->
  135. </dependency>
  136. <dependency>
  137. <groupId>org.slf4j</groupId>
  138. <artifactId>slf4j-api</artifactId>
  139. <version>${slf4j.version}</version>
  140. </dependency>
  141. <!--日志文件管理包——logEnd-->
  142. <!--格式化对象,方便输出日志-->
  143. <dependency>
  144. <groupId>com.alibaba</groupId>
  145. <artifactId>fastjson</artifactId>
  146. <version>1.2.42</version>
  147. </dependency>
  148. <dependency>
  149. <groupId>org.codehaus.jackson</groupId>
  150. <artifactId>jackson-mapper-asl</artifactId>
  151. <version>1.9.13</version>
  152. </dependency>
  153. <!--文件上传组件包-->
  154. <dependency>
  155. <groupId>commons-fileupload</groupId>
  156. <artifactId>commons-fileupload</artifactId>
  157. <version>1.3.3</version>
  158. </dependency>
  159. <dependency>
  160. <groupId>commons-io</groupId>
  161. <artifactId>commons-io</artifactId>
  162. <version>2.6</version>
  163. </dependency>
  164. <dependency>
  165. <groupId>commons-codec</groupId>
  166. <artifactId>commons-codec</artifactId>
  167. <version>1.11</version>
  168. </dependency>
  169. </dependencies>
  170. <build>
  171. <finalName>SSMDemo</finalName>
  172. <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
  173. <plugins>
  174. <plugin>
  175. <artifactId>maven-clean-plugin</artifactId>
  176. <version>3.0.0</version>
  177. </plugin>
  178. <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
  179. <plugin>
  180. <artifactId>maven-resources-plugin</artifactId>
  181. <version>3.0.2</version>
  182. </plugin>
  183. <plugin>
  184. <artifactId>maven-compiler-plugin</artifactId>
  185. <version>3.7.0</version>
  186. </plugin>
  187. <plugin>
  188. <artifactId>maven-surefire-plugin</artifactId>
  189. <version>2.20.1</version>
  190. </plugin>
  191. <plugin>
  192. <artifactId>maven-war-plugin</artifactId>
  193. <version>3.2.0</version>
  194. </plugin>
  195. <plugin>
  196. <artifactId>maven-install-plugin</artifactId>
  197. <version>2.5.2</version>
  198. </plugin>
  199. <plugin>
  200. <artifactId>maven-deploy-plugin</artifactId>
  201. <version>2.8.2</version>
  202. </plugin>
  203. </plugins>
  204. </pluginManagement>
  205. </build>
  206. </project>

然后等待idea自动下载一堆jar的包,如果没有自动下载的可以点这里:

所有的包下载完成后控制台会有提示的。

*4.配置spring、spring和MyBatis的整合配置文件,最重要的一步也是最麻烦的一步同样也是最难的一步。不过不要怕,我们一步一步慢慢来。

这里内容有点多,就不多说啥了,直接粘代码,需要的复制过去就OK了。

spring-mybatis.xml文件源码:

  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. <context:property-placeholder location="classpath:config/jdbc.properties"/>
  14. <!--配置数据源-->
  15. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
  16. <property name="driverClassName" value="${jdbc.driver}"/>
  17. <property name="url" value="${jdbc.url}"/>
  18. <property name="username" value="${jdbc.user}"/>
  19. <property name="password" value="${jdbc.password}"/>
  20. </bean>
  21. <!--spring和mybatis整合-->
  22. <bean id="SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  23. <property name="dataSource" ref="dataSource"/>
  24. <property name="typeAliasesPackage" value="com.**.model"/>
  25. <property name="mapperLocations" value="classpath*:mapper/UserMapper.xml"/>
  26. <!--<property name="configLocation" value="classpath:config/mybatis-config.xml"/>-->
  27. </bean>
  28. <!--扫描mapper接口包-->
  29. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  30. <property name="basePackage" value="com.**.mapper"/>
  31. <property name="sqlSessionFactoryBeanName" >
  32. <idref bean="SqlSessionFactory"/>
  33. </property>
  34. </bean>
  35. <!--service实现类扫描-->
  36. <context:component-scan base-package="com.**.service"/>
  37. <!--事务管理-->
  38. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  39. <property name="dataSource" ref="dataSource"/>
  40. </bean>
  41. <tx:annotation-driven transaction-manager="transactionManager"/>
  42. </beans>

spring-mvc.xml源码:

  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. <!--注册驱动-->
  15. <mvc:annotation-driven>
  16. <mvc:message-converters register-defaults="true">
  17. <!-- 配置Fastjson支持 -->
  18. <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
  19. <property name="supportedMediaTypes">
  20. <list>
  21. <value>application/json;charset=UTF-8</value>
  22. </list>
  23. </property>
  24. <property name="features">
  25. <list>
  26. <!--<value>WriteMapNullValue</value>-->
  27. <value>WriteDateUseDateFormat</value>
  28. <value>QuoteFieldNames</value>
  29. </list>
  30. </property>
  31. </bean>
  32. <bean class="org.springframework.http.converter.StringHttpMessageConverter">
  33. <property name="supportedMediaTypes">
  34. <list><value>text/html;charset=UTF-8</value></list>
  35. </property>
  36. </bean>
  37. </mvc:message-converters>
  38. </mvc:annotation-driven>
  39. <!--<mvc:default-servlet-handler/>-->
  40. <!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 -->
  41. <context:component-scan base-package="com.ssm.controller">
  42. <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
  43. </context:component-scan>
  44. <!--配置视图解析器-->
  45. <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  46. <property name="prefix" value="/WEB-INF/jsp/"/>
  47. <property name="suffix" value=".jsp"/>
  48. </bean>
  49. <mvc:resources mapping="/lib/**" location="/lib"/>
  50. <!-- 对模型视图名称的解析,即在模型视图名称添加前后缀(如果最后一个还是表示文件夹,则最后的斜杠不要漏了) 使用JSP-->
  51. <!-- 默认的视图解析器 在上边的解析错误时使用 (默认使用html)- -->
  52. <!--<bean id="defaultViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">-->
  53. <!--<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>-->
  54. <!--<property name="prefix" value="/WEB-INF/jsp/"/><!–设置JSP文件的目录位置–>-->
  55. <!--<property name="suffix" value=".jsp"/>-->
  56. <!--</bean>-->
  57. <!-- 配置文件上传,如果没有使用文件上传可以不用配置,当然如果不配,那么配置文件中也不必引入上传组件包 -->
  58. <bean id="multipartResolver"
  59. class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  60. <!-- 默认编码 -->
  61. <property name="defaultEncoding" value="utf-8"/>
  62. <!-- 文件大小最大值 -->
  63. <property name="maxUploadSize" value="10485760000"/>
  64. <!-- 内存中的最大值 -->
  65. <property name="maxInMemorySize" value="40960"/>
  66. </bean>
  67. </beans>

web.xml文件也是需要配置的,源码如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://java.sun.com/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  5. http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  6. version="3.0">
  7. <display-name>Archetype Created Web Application</display-name>
  8. <!--spring和mybatis的配置文件-->
  9. <context-param>
  10. <param-name>contextConfigLocation</param-name>
  11. <param-value>classpath:/config/spring-mybatis.xml</param-value>
  12. </context-param>
  13. <!-- 日志记录 -->
  14. <context-param>
  15. <!-- 日志配置文件路径 -->
  16. <param-name>log4jConfigLocation</param-name>
  17. <param-value>classpath:config/log4j.properties</param-value>
  18. </context-param>
  19. <context-param>
  20. <param-name>log4jRefreshInterval</param-name>
  21. <param-value>60000</param-value>
  22. </context-param>
  23. <!-- Spring字符集过滤器 -->
  24. <filter>
  25. <filter-name>SpringEncodingFilter</filter-name>
  26. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  27. <init-param>
  28. <param-name>encoding</param-name>
  29. <param-value>UTF-8</param-value>
  30. </init-param>
  31. <init-param>
  32. <param-name>forceEncoding</param-name>
  33. <param-value>true</param-value>
  34. </init-param>
  35. </filter>
  36. <filter-mapping>
  37. <filter-name>SpringEncodingFilter</filter-name>
  38. <url-pattern>/*</url-pattern>
  39. </filter-mapping>
  40. <!--spring监听器-->
  41. <listener>
  42. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  43. </listener>
  44. <!--防止spring内存溢出监听器-->
  45. <listener>
  46. <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
  47. </listener>
  48. <!-- springMVC核心配置 -->
  49. <servlet>
  50. <servlet-name>spring</servlet-name>
  51. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  52. <init-param>
  53. <param-name>contextConfigLocation</param-name>
  54. <param-value>
  55. classpath:config/spring-mvc.xml
  56. </param-value>
  57. </init-param>
  58. <load-on-startup>1</load-on-startup>
  59. </servlet>
  60. <servlet-mapping>
  61. <servlet-name>spring</servlet-name>
  62. <url-pattern>/</url-pattern>
  63. </servlet-mapping>
  64. <!--需要访问js文件时使用-->
  65. <!--<servlet-mapping>-->
  66. <!--<servlet-name>default</servlet-name>-->
  67. <!--<url-pattern>*.js</url-pattern>-->
  68. <!--</servlet-mapping>-->
  69. </web-app>

log4j相信大家都不陌生,在项目中我们常常会用到日志,因此非常有必要配置一下日志信息。

log4j.properties源码如下:

  1. log4j.rootLogger = DEBUG,Console,File
  2. log4j.appender.Console = org.apache.log4j.ConsoleAppender
  3. #log4j.appender.Console.Target = System.out
  4. log4j.appender.Console.layout = org.apache.log4j.PatternLayout
  5. log4j.appender.Console.layout.ConversionPattern = %5p %d %C: %m%n
  6. #每天打印一个日志文件
  7. log4j.appender.File = org.apache.log4j.DailyRollingFileAppender
  8. log4j.appender.File.File=E:/logs/SSMDemo.log
  9. log4j.appender.File.Encoding=UTF-8
  10. #打印所有级别的日志信息
  11. log4j.appender.File.Threshold = ALL
  12. log4j.appender.File.layout = org.apache.log4j.PatternLayout
  13. log4j.appender.File.layout.ConversionPattern =%d{ABSOLUTE} %5p %c{1}\:%L - %m%n
  14. log4j.logger.com.opensymphony=ERROR
  15. log4j.logger.org.springframework=ERROR
  16. log4j.logger.org.apache=INFO
  17. log4j.logger.java.sql.Connection=INFO
  18. log4j.logger.java.sql.PreparedStatement=INFO
  19. log4j.logger.java.sql.ResultSet=INFO
  20. log4j.logger.java.sql.Statement=INFO

jdbc也是必不可少的一部分,毕竟数据都是来源于数据库的嘛。

jdbc.properties源码如下:

  1. #开发环境
  2. jdbc.driver=com.mysql.jdbc.Driver
  3. jdbc.url=jdbc:mysql://localhost:3306/mydatabase_test
  4. jdbc.user=your username
  5. jdbc.password=your password

到这里我们的配置文件就算说完了(当然这是最基础的需要,SSM的功能十分强大,还可以嵌入很多很多的功能...)

5.依葫芦画瓢,编写各层的功能类即可,controller层主要写http请求的接口方法,service主要写各种业务操作算法等,mapper层也可以称为dao层(我的习惯是写成mapper层)主要是写映射到数据库的方法接口,**Mapper.xml文件主要是写mapper层中的接口功能的SQL语句实现。这样的分层管理应该可以兼容各种大大小小的项目了。

下面也贴上我的工程中各层的测试代码。

model实体类:

  1. package com.ssm.model;
  2. /**
  3. * created by viking on 2018/07/04
  4. * user实体类
  5. */
  6. public class User {
  7. private int id;
  8. private String name;
  9. private int age;
  10. private String sex;
  11. public User() {
  12. }
  13. public int getId() {
  14. return id;
  15. }
  16. public void setId(int id) {
  17. this.id = id;
  18. }
  19. public String getName() {
  20. return name;
  21. }
  22. public void setName(String name) {
  23. this.name = name;
  24. }
  25. public int getAge() {
  26. return age;
  27. }
  28. public void setAge(int age) {
  29. this.age = age;
  30. }
  31. public String getSex() {
  32. return sex;
  33. }
  34. public void setSex(String sex) {
  35. this.sex = sex;
  36. }
  37. @Override
  38. public String toString() {
  39. return "User{" +
  40. "id=" + id +
  41. ", name='" + name + '\'' +
  42. ", age=" + age +
  43. ", sex='" + sex + '\'' +
  44. '}';
  45. }
  46. }

 

controller层:

 

  1. package com.ssm.controller;
  2. import com.ssm.model.User;
  3. import com.ssm.service.UserService;
  4. import org.apache.log4j.Logger;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.web.bind.annotation.RequestMapping;
  7. import org.springframework.web.bind.annotation.ResponseBody;
  8. import org.springframework.web.bind.annotation.RestController;
  9. import java.util.List;
  10. /**
  11. * created by viking on 2018/07/04
  12. * controller层接口类
  13. */
  14. @RestController
  15. @RequestMapping("user")
  16. public class UserController {
  17. @Autowired
  18. private UserService userService;
  19. Logger log = Logger.getLogger(UserController.class);
  20. @RequestMapping("select")
  21. @ResponseBody
  22. public Object userTest(int id){
  23. System.out.println("测试成功~~"+id);
  24. List<User> user = userService.getUser(id);
  25. System.out.println(user.toString());
  26. log.info(user);
  27. return user;
  28. }
  29. @RequestMapping("addUser")
  30. public Object insertUser(int id,String name,int age,String sex){
  31. userService.insertUser(id,name,age,sex);
  32. return "OK";
  33. }
  34. @RequestMapping("selectAll")
  35. public Object selectAll(){
  36. return userService.selectAll();
  37. }
  38. @RequestMapping("update")
  39. public Object update(){
  40. return userService.update();
  41. }
  42. }

service层(service层一般都是比较复杂的,因此我习惯分成接口和实现类两部分)接口:

  1. package com.ssm.service;
  2. import com.ssm.model.User;
  3. import java.util.List;
  4. /**
  5. * created by viking on 2018/07/04
  6. * 业务层接口
  7. */
  8. public interface UserService {
  9. List<User> getUser(int id);
  10. void insertUser(int id, String name, int age, String sex);
  11. List<User> selectAll();
  12. Object update();
  13. }

service层实现类:

  1. package com.ssm.service.impl;
  2. import com.ssm.mapper.UserMapper;
  3. import com.ssm.model.User;
  4. import com.ssm.service.UserService;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.stereotype.Service;
  7. import java.util.HashMap;
  8. import java.util.List;
  9. import java.util.Map;
  10. /**
  11. * created by viking on 2018/07/04
  12. * 业务层接口实现类
  13. */
  14. @Service
  15. public class UserServiceImpl implements UserService {
  16. @Autowired
  17. private UserMapper userMapper;
  18. public List<User> getUser(int id) {
  19. Map map = new HashMap();
  20. map.put("id",id);
  21. return userMapper.getUser(map);
  22. }
  23. public void insertUser(int id, String name, int age, String sex) {
  24. Map param = new HashMap();
  25. param.put("id",id);param.put("name",name);
  26. param.put("age",age);param.put("sex",sex);
  27. userMapper.insertUser(param);
  28. }
  29. public List<User> selectAll() {
  30. return userMapper.selectAll();
  31. }
  32. public Object update() {
  33. Map param = new HashMap();
  34. param.put("total",10);
  35. param.put("name","测试一");
  36. userMapper.update(param);
  37. return "OK";
  38. }
  39. }

mapper层(dao层)接口:

  1. package com.ssm.mapper;
  2. import com.ssm.model.User;
  3. import org.apache.ibatis.annotations.Param;
  4. import java.util.List;
  5. import java.util.Map;
  6. /**
  7. * created by viking on 2018/07/04
  8. * dao层接口
  9. */
  10. public interface UserMapper {
  11. List<User> getUser(@Param("param") Map map);
  12. void insertUser(@Param("param") Map param);
  13. List<User> selectAll();
  14. void update(@Param("param") Map param);
  15. }

**Mapper.xml MaBatsis映射文件配置文件,相当于mapper层接口的实现类了:

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.ssm.mapper.UserMapper">
  6. <select id="getUser" parameterType="java.util.Map" resultType="com.ssm.model.User">
  7. SELECT *
  8. FROM user
  9. where id =#{param.id}
  10. </select>
  11. <insert id="insertUser" parameterType="java.util.Map">
  12. INSERT INTO user (id,name,age,sex) values(#{param.id},#{param.name},#{param.age},#{param.sex})
  13. </insert>
  14. <select id="selectAll" resultType="com.ssm.model.User">
  15. SELECT * FROM USER
  16. </select>
  17. <update id="update" parameterType="java.util.Map">
  18. UPDATE USER SET id=id-#{param.total},age=age+#{param.total}
  19. WHERE name=#{param.name}
  20. </update>
  21. </mapper>

为了方便大家拷下代码后可以直接启动,我把数据库的sql语句和数据也贴上,我用的是mysql数据库:

  1. /*
  2. Navicat MySQL Data Transfer
  3. Source Server : mysql
  4. Source Server Version : 50173
  5. Source Host : localhost:3306
  6. Source Database : mydatabase_test
  7. Target Server Type : MYSQL
  8. Target Server Version : 50173
  9. File Encoding : 65001
  10. Date: 2018-06-15 15:41:23
  11. */
  12. SET FOREIGN_KEY_CHECKS=0;
  13. -- ----------------------------
  14. -- Table structure for user
  15. -- ----------------------------
  16. DROP TABLE IF EXISTS `user`;
  17. CREATE TABLE `user` (
  18. `id` int(11) NOT NULL,
  19. `name` varchar(20) DEFAULT NULL,
  20. `age` int(11) DEFAULT NULL,
  21. `sex` varchar(10) DEFAULT NULL,
  22. PRIMARY KEY (`id`)
  23. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  24. -- ----------------------------
  25. -- Records of user
  26. -- ----------------------------
  27. INSERT INTO `user` VALUES ('2', '测试二', '22', '男');
  28. INSERT INTO `user` VALUES ('3', '小二郎', '18', '男');
  29. INSERT INTO `user` VALUES ('4', '二郎', '18', '男');
  30. INSERT INTO `user` VALUES ('5', '马英', '26', '女');
  31. INSERT INTO `user` VALUES ('6', '王尼玛', '30', '男');
  32. INSERT INTO `user` VALUES ('7', '张三疯', '109', '男');
  33. INSERT INTO `user` VALUES ('8', '欧阳翻天', '76', '女');
  34. INSERT INTO `user` VALUES ('9', '上官', '16', '女');
  35. INSERT INTO `user` VALUES ('10', '李响', '30', '男');
  36. INSERT INTO `user` VALUES ('11', '测试一', '0', '女');

我本地的数据库表结构截图:

到这里就完全结束了,整个工程就可以直接运行了。

6.顺带提一下在idea中配置tomcat的过程(懂的朋友可以直接忽略~)

配置好了之后再将tomcat添加到server中:

好了~tomcat的配置也完成了。

7.下面贴上我的本机运行效果图:

tomcat成功启动:

通过浏览器访问localhost:

再测试下我们的SSM工程里测试类的正常工作截图:

控制台的输出和日志信息:

该有的输出都是正常的,再看一下我们保存到本地的日志文件:

成功地保存了我们工程的输出日志。

一晚上坚持一口气写完整个日志,到这里终于完美地结束了,如果大家觉得在下写的记录有帮助,可以给下支持和订阅哦!

附上GitHub的源码地址:SSMDemo GitHub源码

如果有不对的地方,欢迎各位大佬指教,如果有不懂的地方,也欢迎大家留言,我们一起讨论。

转载:https://blog.csdn.net/Mr__Viking/article/details/80919340

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/575564.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

node.js 针对不同的请求路径(url) 做出不同的响应

边看这个边写的: http://wenku.baidu.com/link?urlC4yLe-TVH6060u_x4t34H3Ze8tjoL7HjJaKgH-TvHnEYl-T_gAMYwhmrCeM0Ji59WBPSkoEXPTWk8dPIZVpbFg_by_gN6DJNGYfjlFuYxE_ 上篇文章讲到了浏览器中访问 http://127.0.0.1:8888/ 输出 "hello world", 但是实际当中, 用户访…

MyBatis 为什么需要通用 Mapper ?

版权声明&#xff1a;版权归博主所有&#xff0c;转载请带上本文链接&#xff01;联系方式&#xff1a;abel533gmail.com https://blog.csdn.net/isea533/article/details/83045335 </div>在早期项目文档中有过类似主题的内容…

Oracle教程-安装、结构(一)

本文安装的是Oracle中的11G版本一、 将文件win32_11gR2_database_1of2.zip和win32_11gR2_database_2of2.zip解压。注意&#xff1a;这两个文件解压到同一个目录下&#xff0c;即&#xff1a;将Components目录合并到一起二、 双击“setup.exe”&#xff0c;弹出以下安装向导。去…

[041] 微信公众帐号开发教程第17篇-应用实例之智能翻译

内容概要 本篇文章为大家演示怎样在微信公众帐号上实现“智能翻译”&#xff0c;本例中翻译功能是通过调用“百度翻译API”实现的。智能翻译是指用户随意输入想要翻译的内容&#xff08;单词或句子&#xff09;&#xff0c;系统能自己主动识别用户採用的语言&#xff0c;并将其…

钉钉上手体会:阿里实用主义的野望

钉钉出自阿里之手&#xff0c;而阿里是电商出身&#xff0c;在移动办公和协同办公方面不算老司机&#xff0c;但钉钉却凭借阿里的背书声称拿下了这个市场的最大份额&#xff0c;甚至超过后面9名的总和&#xff08;数据来源为钉钉官网发布的《2018中国智能移动办公行业趋势报告》…

WAF与IPS的区别总结

谁是最佳选择&#xff1f; Web应用防护无疑是一个热门话题。由于技术的发展成熟和人们对便利性的期望越来越高&#xff0c;Web应用成为主流的业务系统载体。在Web上“安家”的关键业务系统中蕴藏的数据价值引起攻击者的青睐&#xff0c;网上流传的Web漏洞挖掘和攻击工具让攻击的…

企业微信:腾讯的“佛系”办公江湖

、 在协同办公领域&#xff0c;近几年来移动办公伴随着智能手机蓬勃发展起来&#xff0c;特别是腾讯和阿里的入场&#xff0c;改变了业内中小微市场群雄逐鹿的大混战态势&#xff0c;开启了楚汉争霸的局面。相比于钉钉强势的攻城略地&#xff0c;企业微信的“淡定”让人感觉很佛…

Eclipse安装STS插件

Eclipse安装STS插件 1、下载STS插件 地址&#xff1a;https://spring.io/tools/sts/all/ 最上面是已经安装好STS插件的Eclipse软件&#xff0c;可以点击上图红框中的“previous Spring Tool Suite™ versions”&#xff0c;查看其它版本的Eclipse。下面依次为更新文件、更新站…

TFS架构

转载http://www.biaodianfu.com/taobao-tfs.html&#xff0c;感谢原作者标点符。 一、淘宝网的困境 对于淘宝网这样的大型电子商务网站&#xff0c;对于图片服务的要求特别的高。而且对于卖家来说&#xff0c;图片远胜于文字描述&#xff0c;因此卖家也格外看重图片的显示质量、…

(转载)WebStorm 2018.3.2 激活方式(永久)亲测好用!!!!!!

转载链接&#xff1a;https://blog.csdn.net/qq_31279347/article/details/85225234 前言&#xff1a; 总觉的注册码很费事&#xff0c;过一会儿就失效了&#xff0c;博主觉得还是打补丁的方式一劳永逸&#xff0c;很简单&#xff0c;两分钟。 博主版本如下&#xff1a; 第一…

Qt 字符串QString arg()用法总结

原文&#xff1a;http://qimo601.iteye.com/blog/1420750 1、QString::arg()//用字符串变量参数依次替代字符串中最小数值 Cpp代码 QString i "iTest"; // current files number QString total "totalTest"; // number of files to pr…

SVN登录时不断弹出用户名密码输入

** svn换了地址&#xff0c;所以重新定位&#xff0c;在输入账号时&#xff0c;重复报下图&#xff0c;也没有报错&#xff0c;所以就一直无效尝试。期间什么setting clear数据&#xff0c;注册表动文件&#xff0c;搜到的差不多都试了。始终一直报图一的结果。 然后最终结果…

jqgrid 列表条件查询的几步关键操作

jqgrid列表条件查询 记录一下我自己老忘的几个点 这次记录一下使用jqgrid在列表查询时的关键点&#xff0c;过一段时间不用就是忘 1】在html页面用 v-model“q.xxx” xxx是在js处定义。 2】这是js里 在jqgrid查询列表时的模块使用postData 承载参数 3】 这是在定义vue对象时…

wireshark: there are no interfaces on which a capture can be done

权限问题&#xff0c;简单的直接sudo就行。 更安全的做法是&#xff1a; # chmod 4755 /usr/bin/dumpcap dumpcap的所在目录可用whereis命令查看。 转载于:https://www.cnblogs.com/duanguyuan/p/3628569.html

初识:windows下的免费 ssh 客户端工具

如果你的操作系统是 Windows&#xff0c;而你想要连接 Linux 服务器相互传送文件&#xff0c;那么你需要一个简称 SSH 的 Secure Shell 软件。实际上&#xff0c;SSH 是一个网络协议&#xff0c;它允许你通过网络连接到 Linux 和 Unix 服务器。SSH 使用公钥加密来认证远程的计算…

iOS开发之通知中心(NSNotificationCenter)

前言 面向对象的设计思想是把行为方法封装到每一个对象中&#xff0c;以用来增加代码的复用性。正是这种分散封装&#xff0c;增加了对象之间的相互关联&#xff0c;总是有很多的对象需要彼此了解以及相互操作&#xff01; 一个简单示例说明这种交互产生的对象之间的相互依赖&a…

基于AT89C51单片机的8位密码锁仿真与实物制作

点击链接获取Keil源码与Project Backups仿真图&#xff1a; https://download.csdn.net/download/qq_64505944/88657969?spm1001.2014.3001.5503 源码获取 C 源码仿真图毕业设计实物制作步骤01 摘要 在日常的生活和工作中, 住宅与部门的安全防范、单位的文件档案、财务报表…

PuTTY配置

目录 1、作用&#xff1f; 2、中文问题解决 &#xff1f; 3、GUI支持&#xff1f; 4、使用密钥对实现安全快捷的无密码登陆? 5、操作习惯&#xff08;AltEnter全屏以及字体配置&#xff09; 6、附录&#xff08;sshd服务器配置&#xff09; 1、作用&#xff1f;PuTTY是一个Tel…

从无到有开发连麦直播技术点整理

最近在跟老师手下的项目&#xff0c;碰到流媒体&#xff0c;流媒体服务器&#xff0c;视频编码技术&#xff0c;推流&#xff0c;拉流等概念&#xff0c;看到本篇博客整理的概念很全面&#xff0c;很自信&#xff0c;故转发留存&#xff0c;感谢原博主。 关键字 采集、前处理、…

从开发小白到音视频专家

音视频方面的技术博客&#xff0c;转发学习 作者&#xff1a;卢俊&#xff0c;七牛云客户端团队技术负责人。拥有丰富的音视频领域的开发和实战经验&#xff0c;先后开发过 Android 播放 SDK、Android 推流 SDK、短视频 SDK&#xff0c;并主导了七牛连麦系统的设计和实现。服务…