前言:后台使用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:component-scan> 20 <!--spring整合mybatis--> 21 <context:property-placeholder location="classpath:db.properties"/> 22 <!--配置连接池--> 23 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> 24 <property name="driverClass" value="${jdbc.driver}"/> 25 <property name="jdbcUrl" value="${jdbc.url}"/> 26 <property name="user" value="${jdbc.userName}"/> 27 <property name="password" value="${jdbc.password}"/> 28 <property name="initialPoolSize" value="${jdbc.c3p0.initialPoolSize}"/> 29 <property name="maxPoolSize" value="${jdbc.c3p0.maxPoolSize}"/> 30 <property name="minPoolSize" value="${jdbc.c3p0.minPoolSize}"/> 31 <property name="maxIdleTime" value="${jdbc.c3p0.maxIdleTime}"/> 32 </bean> 33 <!--配置SqlSessionFactory对象--> 34 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 35 <property name="dataSource" ref="dataSource"/> 36 <property name="configLocation" value="classpath:sqlMapConfig.xml"/> 37 <property name="mapperLocations" value="classpath:com/wzz/mapper/*.xml"/> 38 <!--配置mybatis分页插件--> 39 <property name="plugins"> 40 <array> 41 <bean class="com.github.pagehelper.PageInterceptor"> 42 <property name="properties"> 43 <props> 44 <prop key="helperDialect">mysql</prop> 45 <prop key="reasonable">true</prop> 46 </props> 47 </property> 48 </bean> 49 </array> 50 </property> 51 </bean> 52 <!--配置接口所在的包--> 53 <bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 54 <property name="basePackage" value="com.wzz.mapper"/> 55 </bean> 56 <!--配置spring框架声明式事务管理--> 57 <!--配置事务管理器--> 58 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 59 <property name="dataSource" ref="dataSource"/> 60 </bean> 61 <!--配置事务通知--> 62 <tx:advice id="txAdvice" transaction-manager="transactionManager"> 63 <!--事务的属性--> 64 <tx:attributes> 65 <!--SUPPORTS代表支持当前事务,如果当前没有事务,就以非事务方式执行。--> 66 <tx:method name="query*" propagation="SUPPORTS" read-only="true"/> 67 <!--DEFAULT代表以数据库的隔离级别--> 68 <tx:method name="*" isolation="DEFAULT"/> 69 </tx:attributes> 70 </tx:advice> 71 <!--配置Aop增强--> 72 <aop:config> 73 <!--配置切入点表达式--> 74 <!--* *..*.*(..) 修饰符(可省略) 返回类型 包.包....包.类.方法.(参数)--> 75 <aop:pointcut id="pt" expression="execution(* com.wzz.service.impl.*.*(..))"/> 76 <!--建立事务与切入点之间的关系--> 77 <aop:advisor advice-ref="txAdvice" pointcut-ref="pt"/> 78 </aop:config> 79 </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搭建,有不足之处,老铁们多多指正,谢谢<-_->
原文:https://www.cnblogs.com/supwang-learn-enjoy-success/p/11283734.html