前言:后台使用ssm搭建,對以前學習知識的一個回顧,與此同時來發現自己不足。這里主要采用配置文件方式進行,有部分注解。
目標:搭建ssm框架,並測試成功;(其中也有aop切面的編寫)
一、開發工具
IDEA2018.2.4_X64,MYSQL8.0.11,TOMCAT9.0.22,MAVEN3.5.3,JDK1.8.0_144
二、ssm框架搭建
項目結構圖
1、配置文件(這里不多說,里面有詳細注釋)

1 <?xml version="1.0" encoding="UTF-8"?> 2 3 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 5 <modelVersion>4.0.0</modelVersion> 6 7 <groupId>com.wzz</groupId> 8 <artifactId>SSM</artifactId> 9 <version>1.0-SNAPSHOT</version> 10 <packaging>war</packaging> 11 12 <name>SSM Maven Webapp</name> 13 <!-- FIXME change it to the project's website --> 14 <url>http://www.example.com</url> 15 16 <properties> 17 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 18 <maven.compiler.source>1.8</maven.compiler.source> 19 <maven.compiler.target>1.8</maven.compiler.target> 20 <spring.version>5.0.2.RELEASE</spring.version> 21 <slf4j.version>1.6.6</slf4j.version> 22 <log4j.version>1.2.12</log4j.version> 23 <shiro.version>1.2.3</shiro.version> 24 <mysql.version>8.0.11</mysql.version> 25 <mybatis.version>3.4.5</mybatis.version> 26 </properties> 27 28 <dependencies> 29 <!--Spring提供的對AspectJ框架的整合--> 30 <dependency> 31 <groupId>org.aspectj</groupId> 32 <artifactId>aspectjweaver</artifactId> 33 <version>1.6.8</version> 34 </dependency> 35 <!--Spring的面向切面編程,提供AOP(面向切面編程)的實現--> 36 <dependency> 37 <groupId>org.springframework</groupId> 38 <artifactId>spring-aop</artifactId> 39 <version>${spring.version}</version> 40 </dependency> 41 42 <!--Spring IOC的基礎實現,包含訪問配置文件、創建和管理bean等--> 43 <dependency> 44 <groupId>org.springframework</groupId> 45 <artifactId>spring-beans</artifactId> 46 <version>${spring.version}</version> 47 </dependency> 48 <!--在基礎IOC功能上提供擴展服務,此外還提供許多企業級服務的支持, 49 有郵件服務、任務調度、JNDI定位,EJB集成、遠程訪問、緩存以及多種視圖層框架的支持--> 50 <dependency> 51 <groupId>org.springframework</groupId> 52 <artifactId>spring-context</artifactId> 53 <version>${spring.version}</version> 54 </dependency> 55 <!--Spring context的擴展支持,用於MVC方面--> 56 <dependency> 57 <groupId>org.springframework</groupId> 58 <artifactId>spring-context-support</artifactId> 59 <version>${spring.version}</version> 60 </dependency> 61 <!--Spring的核心工具包--> 62 <dependency> 63 <groupId>org.springframework</groupId> 64 <artifactId>spring-core</artifactId> 65 <version>${spring.version}</version> 66 </dependency> 67 <!--spring的jdbc包--> 68 <dependency> 69 <groupId>org.springframework</groupId> 70 <artifactId>spring-jdbc</artifactId> 71 <version>${spring.version}</version> 72 </dependency> 73 <!--為JDBC、Hibernate、JDO、JPA等提供的一致的聲明式和編程式事務管理--> 74 <dependency> 75 <groupId>org.springframework</groupId> 76 <artifactId>spring-tx</artifactId> 77 <version>${spring.version}</version> 78 </dependency> 79 80 <!--包含Web應用開發時,用到Spring框架時所需的核心類, 81 包括自動載入WebApplicationContext特性的類、Struts與JSF集成類、文件上傳的支持類、Filter類和大量工具輔助類--> 82 <dependency> 83 <groupId>org.springframework</groupId> 84 <artifactId>spring-web</artifactId> 85 <version>${spring.version}</version> 86 </dependency> 87 <!--包含SpringMVC框架相關的所有類。 88 包含國際化、標簽、Theme、視圖展現的FreeMarker、JasperReports、Tiles、Velocity、XSLT相關類。 89 當然,如果你的應用使用了獨立的MVC框架,則無需這個JAR文件里的任何類--> 90 <dependency> 91 <groupId>org.springframework</groupId> 92 <artifactId>spring-webmvc</artifactId> 93 <version>${spring.version}</version> 94 </dependency> 95 <!--對JUNIT等測試框架的簡單封裝--> 96 <dependency> 97 <groupId>org.springframework</groupId> 98 <artifactId>spring-test</artifactId> 99 <version>${spring.version}</version> 100 </dependency> 101 <!--servlet--> 102 <dependency> 103 <groupId>javax.servlet</groupId> 104 <artifactId>servlet-api</artifactId> 105 <version>2.5</version> 106 <scope>provided</scope> 107 </dependency> 108 109 <!--mysql驅動包--> 110 <dependency> 111 <groupId>mysql</groupId> 112 <artifactId>mysql-connector-java</artifactId> 113 <version>${mysql.version}</version> 114 </dependency> 115 <!--mybatis--> 116 <dependency> 117 <groupId>org.mybatis</groupId> 118 <artifactId>mybatis</artifactId> 119 <version>${mybatis.version}</version> 120 </dependency> 121 <!--mybatis與spring整合需要的包 --> 122 <dependency> 123 <groupId>org.mybatis</groupId> 124 <artifactId>mybatis-spring</artifactId> 125 <version>1.3.0</version> 126 </dependency> 127 128 <!--mybatis分頁插件--> 129 <dependency> 130 <groupId>com.github.pagehelper</groupId> 131 <artifactId>pagehelper</artifactId> 132 <version>5.1.10</version> 133 </dependency> 134 135 <!--c3p0--> 136 <dependency> 137 <groupId>c3p0</groupId> 138 <artifactId>c3p0</artifactId> 139 <version>0.9.1.2</version> 140 <type>jar</type> 141 <scope>compile</scope> 142 </dependency> 143 144 <!--spring推薦的json轉化包--> 145 <!--jackson--> 146 <dependency> 147 <groupId>com.fasterxml.jackson.core</groupId> 148 <artifactId>jackson-databind</artifactId> 149 <version>2.9.0</version> 150 </dependency> 151 <dependency> 152 <groupId>com.fasterxml.jackson.core</groupId> 153 <artifactId>jackson-core</artifactId> 154 <version>2.9.0</version> 155 </dependency> 156 <dependency> 157 <groupId>com.fasterxml.jackson.core</groupId> 158 <artifactId>jackson-annotations</artifactId> 159 <version>2.9.0</version> 160 </dependency> 161 162 <!--阿里巴巴的json轉化包--> 163 <!--fastjson--> 164 <dependency> 165 <groupId>com.alibaba</groupId> 166 <artifactId>fastjson</artifactId> 167 <version>1.1.37</version> 168 </dependency> 169 170 171 <!--瀏覽器工具類--> 172 <dependency> 173 <groupId>eu.bitwalker</groupId> 174 <artifactId>UserAgentUtils</artifactId> 175 <version>1.20</version> 176 </dependency> 177 178 <!-- 日志相關包 --> 179 <dependency> 180 <groupId>log4j</groupId> 181 <artifactId>log4j</artifactId> 182 <version>${log4j.version}</version> 183 </dependency> 184 <dependency> 185 <groupId>org.slf4j</groupId> 186 <artifactId>slf4j-api</artifactId> 187 <version>${slf4j.version}</version> 188 </dependency> 189 <dependency> 190 <groupId>org.slf4j</groupId> 191 <artifactId>slf4j-log4j12</artifactId> 192 <version>${slf4j.version}</version> 193 </dependency> 194 195 <dependency> 196 <groupId>junit</groupId> 197 <artifactId>junit</artifactId> 198 <version>4.11</version> 199 <scope>compile</scope> 200 </dependency> 201 </dependencies> 202 203 <build> 204 <finalName>SSM</finalName> 205 <!--編譯時,使得java包下的.properties和.xml文件包含在類路徑下,方便配置掃描mapper的xml文件--> 206 <resources> 207 <resource> 208 <directory>src/main/java</directory> 209 <includes> 210 <include>**/*.properties</include> 211 <include>**/*.xml</include> 212 </includes> 213 <filtering>false</filtering> 214 </resource> 215 </resources> 216 217 <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --> 218 <plugins> 219 <plugin> 220 <artifactId>maven-clean-plugin</artifactId> 221 <version>3.1.0</version> 222 </plugin> 223 <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging --> 224 <plugin> 225 <artifactId>maven-resources-plugin</artifactId> 226 <version>3.0.2</version> 227 </plugin> 228 <plugin> 229 <artifactId>maven-compiler-plugin</artifactId> 230 <version>3.8.0</version> 231 </plugin> 232 <plugin> 233 <artifactId>maven-surefire-plugin</artifactId> 234 <version>2.22.1</version> 235 </plugin> 236 <plugin> 237 <artifactId>maven-war-plugin</artifactId> 238 <version>3.2.2</version> 239 </plugin> 240 <plugin> 241 <artifactId>maven-install-plugin</artifactId> 242 <version>2.5.2</version> 243 </plugin> 244 <plugin> 245 <artifactId>maven-deploy-plugin</artifactId> 246 <version>2.8.2</version> 247 </plugin> 248 </plugins> 249 </pluginManagement> 250 </build> 251 </project>

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:aop="http://www.springframework.org/schema/aop" 5 xmlns:tx="http://www.springframework.org/schema/tx" 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/tx 10 http://www.springframework.org/schema/tx/spring-tx.xsd 11 http://www.springframework.org/schema/aop 12 http://www.springframework.org/schema/aop/spring-aop.xsd 13 http://www.springframework.org/schema/context 14 http://www.springframework.org/schema/context/spring-context.xsd"> 15 16 <!--開啟注解掃描,因為spring和springMVC是父子容器,但是它們有各自獨立性,這里排除Controller層,如果不排除,都全部掃描,就可能會出現Controller的方法無法攔截、Bean被多次加載等問題;--> 17 <context:component-scan base-package="com.wzz"> 18 <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> 19 <context:exclude-filter type="annotation" expression="org.springframework.web.bind.annotation.RestController"/> 20 </context:component-scan> 21 <!--spring整合mybatis--> 22 <context:property-placeholder location="classpath:db.properties"/> 23 <!--配置連接池--> 24 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> 25 <property name="driverClass" value="${jdbc.driver}"/> 26 <property name="jdbcUrl" value="${jdbc.url}"/> 27 <property name="user" value="${jdbc.userName}"/> 28 <property name="password" value="${jdbc.password}"/> 29 <property name="initialPoolSize" value="${jdbc.c3p0.initialPoolSize}"/> 30 <property name="maxPoolSize" value="${jdbc.c3p0.maxPoolSize}"/> 31 <property name="minPoolSize" value="${jdbc.c3p0.minPoolSize}"/> 32 <property name="maxIdleTime" value="${jdbc.c3p0.maxIdleTime}"/> 33 </bean> 34 <!--配置SqlSessionFactory對象--> 35 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 36 <property name="dataSource" ref="dataSource"/> 37 <property name="configLocation" value="classpath:sqlMapConfig.xml"/> 38 <property name="mapperLocations" value="classpath:com/wzz/mapper/*.xml"/> 39 <!--配置mybatis分頁插件--> 40 <property name="plugins"> 41 <array> 42 <bean class="com.github.pagehelper.PageInterceptor"> 43 <property name="properties"> 44 <props> 45 <prop key="helperDialect">mysql</prop> 46 <prop key="reasonable">true</prop> 47 </props> 48 </property> 49 </bean> 50 </array> 51 </property> 52 </bean> 53 <!--配置接口所在的包--> 54 <bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 55 <property name="basePackage" value="com.wzz.mapper"/> 56 </bean> 57 <!--配置spring框架聲明式事務管理--> 58 <!--配置事務管理器--> 59 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 60 <property name="dataSource" ref="dataSource"/> 61 </bean> 62 <!--配置事務通知--> 63 <tx:advice id="txAdvice" transaction-manager="transactionManager"> 64 <!--事務的屬性--> 65 <tx:attributes> 66 <!--SUPPORTS代表支持當前事務,如果當前沒有事務,就以非事務方式執行。--> 67 <tx:method name="query*" propagation="SUPPORTS" read-only="true"/> 68 <!--DEFAULT代表以數據庫的隔離級別--> 69 <tx:method name="*" isolation="DEFAULT"/> 70 </tx:attributes> 71 </tx:advice> 72 <!--配置Aop增強--> 73 <aop:config> 74 <!--配置切入點表達式--> 75 <!--* *..*.*(..) 修飾符(可省略) 返回類型 包.包....包.類.方法.(參數)--> 76 <aop:pointcut id="pt" expression="execution(* com.wzz.service.impl.*.*(..))"/> 77 <!--建立事務與切入點之間的關系--> 78 <aop:advisor advice-ref="txAdvice" pointcut-ref="pt"/> 79 </aop:config> 80 </beans>

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:aop="http://www.springframework.org/schema/aop" 5 xmlns:context="http://www.springframework.org/schema/context" 6 xmlns:mvc="http://www.springframework.org/schema/mvc" 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/mvc 10 http://www.springframework.org/schema/mvc/spring-mvc.xsd 11 http://www.springframework.org/schema/aop 12 http://www.springframework.org/schema/aop/spring-aop.xsd 13 http://www.springframework.org/schema/context 14 http://www.springframework.org/schema/context/spring-context.xsd"> 15 <!--springMVC值掃描controller--> 16 <context:component-scan base-package="com.wzz.controller"/> 17 18 <!--配置日志切面--> 19 <aop:config> 20 <aop:pointcut id="pt" expression="execution(* com.wzz.controller.*.*(..))"/> 21 <!--日志切面--> 22 <aop:aspect id="" ref="sysAccessLogAspect"> 23 <!--前置通知--> 24 <aop:before method="doBefore" pointcut-ref="pt"></aop:before> 25 <!--后置通知--> 26 <aop:after-returning method="doAfter" pointcut-ref="pt"></aop:after-returning> 27 </aop:aspect> 28 </aop:config> 29 30 <!--視圖解析器 31 這里不需要視圖解析器,因為不處理jsp,或者html,咱們是前后端分離,后端只負責返回數據即可--> 32 <!--<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">--> 33 <!--<property name="prefix" value="/WEB-INF/pages/"/>--> 34 <!--<property name="suffix" value=".jsp"/>--> 35 <!--</bean>--> 36 <!--<!–過濾靜態資源–>--> 37 <!--<mvc:resources mapping="/css/**" location="/css/"/>--> 38 <!--<mvc:resources mapping="/images/**" location="/images/"/>--> 39 <!--<mvc:resources mapping="/js/**" location="/js/"/>--> 40 41 <!--springMVC框架流程 42 1、 用戶發起請求到前端控制器(DispatcherServlet),前端控制器沒有能力處理業務邏輯; 43 2、 通過HandlerMapping查找模型(Controller、Handler); 44 3、 返回執行鏈,執行鏈包含了2部分內容,Handler對象以及攔截器(組); 45 4、 通過HandlerAdapter執行模型(Handler) 46 5、 適配器調用Handler對象處理業務邏輯; 47 6、 模型處理完業務邏輯,返回ModelAndView對象,view不是真正的視圖對象,而是視圖名稱; 48 7、 將ModelAndView對象返回給前端控制器; 49 8、 前端控制器通過視圖名稱經過視圖解析器查找視圖對象; 50 9、 返回視圖對象; 51 10、前端控制器渲染視圖; 52 11、返回給前端控制器; 53 12、前端控制器將視圖(html、json、xml、Excel)返回給用戶;--> 54 55 56 <!--開啟springMVC注解支持--> 57 <mvc:annotation-driven/> 58 </beans>
這里我當時有一個疑問,springMVC.xml為什么要配置注解驅動?現在我知道了,你知道嗎? <-_->
不錯的解釋 https://blog.csdn.net/weixin_42529699/article/details/88085405

1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <configuration> 6 <!--別名配置 對model包下的所有起一個別名,默認是它的類名(不分大小寫)--> 7 <typeAliases> 8 <package name="com.wzz.model"/> 9 </typeAliases> 10 </configuration>

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=[%c] - %m%n 6 log4j.appender.File =org.apache.log4j.RollingFileAppender 7 log4j.appender.File.File = logs/SSM.log 8 log4j.appender.File.MaxFileSize = 10MB 9 log4j.appender.File.Threshold = ALL 10 log4j.appender.File.layout =org.apache.log4j.PatternLayout 11 log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-ddHH\\\:mm\\\:ss}][%c]%m%n 12 log4j.logger.java.sql.ResultSet=DEBUG 13 log4j.logger.java.sql.Connection=DEBUG 14 log4j.logger.java.sql.PreparedStatement=DEBUG

1 jdbc.driver=com.mysql.cj.jdbc.Driver 2 jdbc.url=jdbc:mysql://localhost:3306/ssm?serverTimezone=GMT%2B8&useSSL=false 3 jdbc.userName=wzz 4 jdbc.password=521125 5 #--------------------------------------------------------- 6 # c3p0反空閑設置,防止8小時失效問題28800 7 #--------------------------------------------------------- 8 #idleConnectionTestPeriod要小於MySQL的wait_timeout 9 #If true, an operation will be performed at every connection checkout to verify that the connection is valid. 10 jdbc.c3p0.testConnectionOnCheckout=false 11 #If true, an operation will be performed asynchronously at every connection checkin to verify that the connection is valid. 12 jdbc.c3p0.testConnectionOnCheckin=true 13 #If this is a number greater than 0, c3p0 will test all idle, pooled but unchecked-out connections, every this number of seconds. 14 jdbc.c3p0.idleConnectionTestPeriod=3600 15 #--------------------------------------------------------- 16 # c3p0連接池配置 17 #--------------------------------------------------------- 18 #initialPoolSize, minPoolSize, maxPoolSize define the number of Connections that will be pooled. 19 #Please ensure that minPoolSize <= maxPoolSize. 20 #Unreasonable values of initialPoolSize will be ignored, and minPoolSize will be used instead. 21 jdbc.c3p0.initialPoolSize=10 22 jdbc.c3p0.minPoolSize=10 23 jdbc.c3p0.maxPoolSize=50 24 #maxIdleTime defines how many seconds a Connection should be permitted to go unused before being culled from the pool. 25 jdbc.c3p0.maxIdleTime=3600

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 5 <web-app> 6 <display-name>Archetype Created Web Application</display-name> 7 <!--配置spring的監聽器,默認加載WEB-INF目錄下的applicationContext.xml配置文件--> 8 <listener> 9 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 10 </listener> 11 <!--設置配置文件的路徑--> 12 <context-param> 13 <param-name>contextConfigLocation</param-name> 14 <param-value>classpath:applicationContext.xml</param-value> 15 </context-param> 16 <!--配置前段控制器--> 17 <servlet> 18 <servlet-name>dispatcherServlet</servlet-name> 19 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 20 <!--加載springMVC.xml配置文件--> 21 <init-param> 22 <param-name>contextConfigLocation</param-name> 23 <param-value>classpath:springMVC.xml</param-value> 24 </init-param> 25 <!--contextLoaderListener監聽器初始化完畢后,開始初始化web.xml中配置的Servlet,servlet可以配置多個,加載順序按照load-on-startup的值,值越小,servlet的優先級越高,就越先被加載--> 26 <load-on-startup>1</load-on-startup> 27 </servlet> 28 <servlet-mapping> 29 <servlet-name>dispatcherServlet</servlet-name> 30 <url-pattern>/</url-pattern> 31 </servlet-mapping> 32 <!--解決中文亂碼過濾器--> 33 <filter> 34 <filter-name>characterEncodingFilter</filter-name> 35 <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 36 <init-param> 37 <param-name>encoding</param-name> 38 <param-value>UTF-8</param-value> 39 </init-param> 40 </filter> 41 <filter-mapping> 42 <filter-name>characterEncodingFilter</filter-name> 43 <url-pattern>/*</url-pattern> 44 </filter-mapping> 45 </web-app>
2、源碼文件(按結構圖,從上往下出場)

1 package com.wzz.aspect; 2 3 import org.aspectj.lang.JoinPoint; 4 import org.springframework.stereotype.Component; 5 6 /** 7 * @ClassName SysAccessLogAspect 8 * @Description TODO 系統訪問日志切面類 9 * @Author wangZhenZhong 10 * Version 1.0 11 **/ 12 @Component 13 public class SysAccessLogAspect { 14 15 public void doBefore(JoinPoint jp){ 16 System.out.println("前置通知執行啦"); 17 } 18 19 public void doAfter(JoinPoint jp){ 20 System.out.println("后置通知執行啦"); 21 } 22 }

1 package com.wzz.controller; 2 3 import com.wzz.service.IUserService; 4 import org.springframework.beans.factory.annotation.Autowired; 5 import org.springframework.stereotype.Controller; 6 import org.springframework.web.bind.annotation.RequestMapping; 7 import org.springframework.web.bind.annotation.ResponseBody; 8 9 import java.util.Map; 10 11 /** 12 * @ClassName UserController 13 * @Description TODO 用戶控制層 14 * @Author AZhen 15 * Version 1.0 16 **/ 17 @Controller 18 public class UserController { 19 @Autowired 20 private IUserService userService; 21 22 @RequestMapping("/test") 23 @ResponseBody 24 public Map queryUserList(){ 25 System.out.println("controller層執行啦"); 26 Map<String, Object> resultMap = userService.queryUserList(); 27 return resultMap; 28 } 29 }

1 package com.wzz.mapper; 2 3 import com.wzz.model.User; 4 5 import java.util.List; 6 7 /** 8 * @ClassName UserMapper 9 * @Description TODO 用戶持久層接口 10 * @Author AZhen 11 * Version 1.0 12 **/ 13 public interface UserMapper { 14 List<User> queryUserList(); 15 }

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.wzz.mapper.UserMapper"> 6 <!--因為在sqlMapConfig.xml中配置了別名,所以直接寫user就可以--> 7 <select id="queryUserList" resultType="user"> 8 select * from tbUser 9 </select> 10 </mapper>

1 package com.wzz.model; 2 3 import java.io.Serializable; 4 5 /** 6 * @ClassName User 7 * @Description TODO 用戶類 8 * @Author AZhen 9 * Version 1.0 10 **/ 11 public class User implements Serializable { 12 private String uid; //uid 13 private String userName; //用戶名 14 private String password; //密碼 15 private String name; //姓名 16 private Integer age; //年齡 17 private Integer sex; //性別 18 19 public String getUid() { 20 return uid; 21 } 22 23 public void setUid(String uid) { 24 this.uid = uid; 25 } 26 27 public String getUserName() { 28 return userName; 29 } 30 31 public void setUserName(String userName) { 32 this.userName = userName; 33 } 34 35 public String getPassword() { 36 return password; 37 } 38 39 public void setPassword(String password) { 40 this.password = password; 41 } 42 43 public String getName() { 44 return name; 45 } 46 47 public void setName(String name) { 48 this.name = name; 49 } 50 51 public Integer getAge() { 52 return age; 53 } 54 55 public void setAge(Integer age) { 56 this.age = age; 57 } 58 59 public Integer getSex() { 60 return sex; 61 } 62 63 public void setSex(Integer sex) { 64 this.sex = sex; 65 } 66 67 @Override 68 public String toString() { 69 return "User{" + 70 "uid='" + uid + '\'' + 71 ", userName='" + userName + '\'' + 72 ", password='" + password + '\'' + 73 ", name='" + name + '\'' + 74 ", age=" + age + 75 ", sex=" + sex + 76 '}'; 77 } 78 }

1 package com.wzz.service.impl; 2 3 import com.wzz.mapper.UserMapper; 4 import com.wzz.model.User; 5 import com.wzz.service.IUserService; 6 import org.springframework.beans.factory.annotation.Autowired; 7 import org.springframework.stereotype.Service; 8 9 import java.util.HashMap; 10 import java.util.List; 11 import java.util.Map; 12 13 /** 14 * @ClassName UserServiceImpl 15 * @Description TODO 用戶業務層實現類 16 * @Author AZhen 17 * Version 1.0 18 **/ 19 @Service 20 public class UserServiceImpl implements IUserService { 21 @Autowired 22 private UserMapper userMapper; 23 @Override 24 public Map<String,Object> queryUserList() { 25 System.out.println("service執行啦"); 26 List<User> userList = userMapper.queryUserList(); 27 System.out.println("調用了mapper層"); 28 Map<String,Object> resultMap=new HashMap<>(); 29 resultMap.put("userList",userList); 30 return resultMap; 31 } 32 }

1 package com.wzz.service; 2 3 import java.util.Map; 4 5 /** 6 * @ClassName IUserService 7 * @Description TODO 用戶業務層接口 8 * @Author AZhen 9 * Version 1.0 10 **/ 11 public interface IUserService { 12 Map<String,Object> queryUserList(); 13 }
sql腳本僅結構,沒有數據,自行添加

1 /* 2 Navicat Premium Data Transfer 3 4 Source Server : ssm 5 Source Server Type : MySQL 6 Source Server Version : 80011 7 Source Host : localhost:3306 8 Source Schema : ssm 9 10 Target Server Type : MySQL 11 Target Server Version : 80011 12 File Encoding : 65001 13 14 Date: 02/08/2019 08:24:19 15 */ 16 17 SET NAMES utf8mb4; 18 SET FOREIGN_KEY_CHECKS = 0; 19 20 -- ---------------------------- 21 -- Table structure for tbuser 22 -- ---------------------------- 23 DROP TABLE IF EXISTS `tbuser`; 24 CREATE TABLE `tbuser` ( 25 `id` int(11) NOT NULL AUTO_INCREMENT, 26 `uId` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, 27 `userName` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, 28 `password` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, 29 `uName` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, 30 `age` int(11) NULL DEFAULT NULL, 31 `sex` int(11) NULL DEFAULT NULL, 32 PRIMARY KEY (`id`) USING BTREE 33 ) ENGINE = InnoDB AUTO_INCREMENT = 19 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; 34 35 SET FOREIGN_KEY_CHECKS = 1;
三、測試
1、Tomcat配置
若沒有此工具欄,直接點擊視圖(View),勾選工具欄(Toolbar)即可
點擊配置,添加本地Tomcat
點擊Deployment,選擇+ Artifact 選擇war,或者 war exploded(熱部署配置選擇的,)
應用,確定即可
至此,就可以進行測試了(成功返回了數據)
控制台情況,測試沒問題
至此,完成了ssm搭建,有不足之處,老鐵們多多指正,謝謝<-_->