Vue+SSM+Element-Ui实现前后端分离(2)
前言:后台使用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>
pom.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: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>
applicationContext.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: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
这里我当时有一个疑问,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>
sqlMapConfig.xml
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
log4j.properties
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
db.properties
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>
web.xml
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 }
SysAccessLogAspect.java
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 }
UserController.java
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 }
UserMapper.java
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>
UserMapper.xml
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 }
User.java
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 }
UserServiceImpl.java
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 }
IUserService.java
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;
tbUser.sql
三、测试
1、Tomcat配置
若没有此工具栏,直接点击视图(View),勾选工具栏(Toolbar)即可
点击配置,添加本地Tomcat
点击Deployment,选择+ Artifact 选择war,或者 war exploded(热部署配置选择的,)
应用,确定即可
至此,就可以进行测试了(成功返回了数据)
控制台情况,测试没问题
至此,完成了ssm搭建,有不足之处,老铁们多多指正,谢谢<-_->
Vue+SSM+Element-Ui实现前后端分离(2)的更多相关文章
- go-admin基于Gin + Vue + Element UI的前后端分离权限管理系统
✨ 特性 遵循 RESTful API 设计规范 基于 GIN WEB API 框架,提供了丰富的中间件支持(用户认证.跨域.访问日志.追踪ID等) 基于Casbin的 RBAC 访问控制模型 JWT ...
- nodeJS(express4.x)+vue(vue-cli)构建前后端分离详细教程(带跨域)
好想再回到大学宿舍,当时床虽小,房随小,但是心确是满的 ----致 西安工程大学a-114舍友们 转载请注明出处:水车:http://www.cnblogs.com/xuange306/p/6185 ...
- vue + spring boot + spring security 前后端分离 携带 Cookie 登录实现 只写了个登录
最近想弄一下vue 所以就自己给自己找坑入 结果弄的满身是伤 哈哈哈 首先我说下 前后端分离 跨域请求 我在网上找了一些 可是都是针对于 spring boot 的 我自己还有 securi ...
- Vue+Django2.0 restframework打造前后端分离的生鲜电商项目(2)
1.restful api介绍 1.前后端分离的优缺点 1.为什么要用前后端分离 1.pc.app.pad多端适应 2.SPA(单页面应用)开发模式开始流行 3.前后端分离职责不清 4.开发效率问题, ...
- SSM框架中的前后端分离
认识前后端分离 在传统的web应用开发中,大多数的程序员会将浏览器作为前后端的分界线.将浏览器中为用户进行页面展示的部分称之为前端,而将运行在服务器,为前端提供业务逻辑和数据准备的所有代码统称为后端. ...
- Yii框架和Vue的完美结合完成前后端分离项目
背景说明 本文假设你对Yii和Vue都比较熟悉,至少都在项目里用过,另外笔者新人,以后不定时放一些干货,欢迎程序媛关注 Yii是一个PHP全端框架,典型的mvc的项目结构,后端接口都是一个控制器里放了 ...
- @vue/cli 4.0+express 前后端分离实践
之前总结过一篇vue-cli 2.x+express+json-server实现前后端分离的帖子,@vue/cli3.0及4.0搭建的项目与vue-cli2.x的项目结构有很大的不同.这里对@vue/ ...
- 空气质量管理系统+SSM(Spring+SpringMVC+Mybatis)+前后端分离总结
作者:故事我忘了¢个人微信公众号:程序猿的月光宝盒 点我进SSM演示地址 1.目录结构: 2.需要注意的地方 2.1在WEB-INFO下新建 2.1.1 springMVC-servlet.xml & ...
- vue+egg.js+mysql一个前后端分离留言板项目
一.前序 我相信每个人前端搬运工和我想法都是一样的,都有一个做全栈的梦,无奈面对众多的后台语言,却不从下手,今天由我来带你们潜入全栈的门槛,注意是门槛.能不能学的会后面的内容全靠坚持了. 我今天主要做 ...
- Vue+Django2.0 restframework打造前后端分离的生鲜电商项目(3)
1.drf前期准备 1.django-rest-framework官方文档 https://www.django-rest-framework.org/ #直接百度找到的djangorestframe ...
随机推荐
- vue html转pdf并打印
//文件名随便取一个如:htmlToPdf.js // 导出页面为PDF格式 import html2Canvas from 'html2canvas' import JsPDF from 'jspd ...
- 【Ubuntu】Ubuntu 技巧集锦
『Ubuntu 22.04 国内镜像 阿里云/163源/清华大学/中科大』 『各种 Proxy 设置 GUI/Terminal/APT』 『设置 wget Proxy』 『设置右键菜单-新建文档』 『 ...
- TP5--路由
路由定义采用\think\Route类,通常是在应用的路由配置文件application/route.php进行注册 use think\Route; //路由规则 // Route::rule('/ ...
- Xilinx-英文缩写
BEL: Basic Element of Logic, BEL是最底层的基本元素,也可以叫atomic unit(原子单位),BEL是FPGA中最小.不可分割的组件. ACP:Accelerator ...
- conda 备份与还原环境
文章目录 1.创建环境2.激活环境3.安装包(1)手动一个一个安装(2)批量安装4.卸载包(1)手动一个一个卸载(2)批量卸载5.查看当前环境中所有已安装的包6.退出当前环境方法1:激活base环境即 ...
- 08 安装虚拟机:Windows 10
08 安装虚拟机:Windows 10 在安装虚拟机之前,总是要有安装来源媒体(例如:ISO映像之类),方可顺利进行.在Proxmox VE中有几种将ISO档置入Proxmox VE的方式,本节介绍其 ...
- el-input 限制输入框只能输入数字和小数
方法一: oninput ="value=value.replace(/[^\d]/g,'')" //只能输入数字 oninput ="value=value.repla ...
- 洛谷 P4454 [CQOI2018]破解D-H协议
题目 https://www.luogu.com.cn/problem/P4454 杂题乱做ing... 思路 首先我们把式子列一下: \(g^a\equiv A(mod P)\) \(g^b\equ ...
- Lecture 2. Fundamental Concepts and ISA - Carnegie Mellon - Computer Architecture 2015 - Onur Mutlu
并不只有冯诺依曼模型,按照控制流顺序执行指令 还有 data flow 模型,按照数据流顺序执行指令 冯诺依曼模型和数据流模型的编程语言的一个对比 Control-driven 编程模型和 data- ...
- 图片转成gif 变成base64
html2canvas 截屏的插件 http://jnordberg.github.io/gif.js/ GIF.js官网 <script src='https://imgss.githu ...