SSM框架整合(Spring+SpringMVC+Mybatis)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: SSM框架整合超详细文件版,面向小白搭建,保姆级别,(Spring+SpringMVC+Mybatis)。

1、创建数据库

image.png

2、创建表

image-20220807091756884.png

3、创建maven工程

导入坐标

<dependencies><!--spring相关--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.0.5.RELEASE</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.7</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.0.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>5.0.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.0.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.0.5.RELEASE</version></dependency><!--servlet和jsp--><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.0</version></dependency><!--mybatis相关--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.5</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.1</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.6</version></dependency><dependency><groupId>c3p0</groupId><artifactId>c3p0</artifactId><version>0.9.1.2</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency></dependencies>

4、编写实体类

package com.xmp.domain;

public class Account {

   private Integer id;

   private String name;

   private Double money;

   public Integer getId() {

       return id;

   }

   public void setId(Integer id) {

       this.id = id;

   }

   public String getName() {

       return name;

   }

   public void setName(String name) {

       this.name = name;

   }

   public Double getMoney() {

       return money;

   }

   public void setMoney(Double money) {

       this.money = money;

   }

}

5、编写Mapper接口

packagecom.xmp.mapper;
importcom.xmp.domain.Account;
importjava.util.List;
publicinterfaceAccountMapper {
publicvoidsave(Accountaccount);
publicList<Account>findAll();
}

6、编写Service接口

packagecom.xmp.service;
importcom.xmp.domain.Account;
importjava.util.List;
publicinterfaceAccountService {
publicvoidsave(Accountaccount);
publicList<Account>findAll();
}

7、编写Service接口实现

package com.xmp.service.impl;

import com.xmp.domain.Account;

import com.xmp.mapper.AccountMapper;

import com.xmp.service.AccountService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import java.util.List;

@Service("accountService")

public class AccountServiceImpl implements AccountService {

   @Autowired

   private AccountMapper accountMapper;

   @Override

   public void save(Account account) {

       accountMapper.save(account);

   }

   @Override

   public List<Account> findAll() {

       return accountMapper.findAll();

   }

}

8、编写Controller

packagecom.xmp.controller;
importcom.xmp.domain.Account;
importcom.xmp.service.AccountService;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.stereotype.Controller;
importorg.springframework.web.bind.annotation.RequestMapping;
importorg.springframework.web.bind.annotation.ResponseBody;
importorg.springframework.web.servlet.ModelAndView;
importjava.util.List;
@Controller@RequestMapping("/account")
publicclassAccountController {
@AutowiredprivateAccountServiceaccountService;
//保存@RequestMapping(value="/save",produces="text/html;charset=UTF-8")
@ResponseBodypublicStringsave(Accountaccount){
accountService.save(account);
return"保存成功";
    }
//查询@RequestMapping("/findAll")
publicModelAndViewfindAll(){
List<Account>accountList=accountService.findAll();
ModelAndViewmodelAndView=newModelAndView();
modelAndView.addObject("accountList",accountList);
modelAndView.setViewName("accountList");
returnmodelAndView;
    }
}

9、编写添加页面

<%@pagecontentType="text/html;charset=UTF-8"language="java"%><html><head><title>Title</title></head><body><h1>添加账户信息表单</h1><formname="accountForm"action="${pageContext.request.contextPath}/account/save"method="post">账户名称:<inputtype="text"name="name"><br>账户金额:<inputtype="text"name="money"><br><inputtype="submit"value="保存"><br></form></body></html>

10、编写列表页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<html>

<head>

   <title>Title</title>

</head>

<body>

   <h1>展示账户数据列表</h1>

   <table border="1">

       <tr>

           <th>账户id</th>

           <th>账户名称</th>

           <th>账户金额</th>

       </tr>

       <c:forEach items="${accountList}" var="account">

           <tr>

               <td>${account.id}</td>

               <td>${account.name}</td>

               <td>${account.money}</td>

           </tr>

       </c:forEach>

   </table>

</body>

</html>

11、编写相应配置文件

  • Spring配置文件:applicationContext.xml
<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd">

   <!--组件扫描 扫描service和mapper-->

   <context:component-scan base-package="com.xmp">

       <!--排除controller的扫描-->

       <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"></context:exclude-filter>

   </context:component-scan>


   <!--加载propeties文件-->

   <context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>


   <!--配置数据源信息-->

   <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">

       <property name="driverClass" value="${jdbc.driver}"></property>

       <property name="jdbcUrl" value="${jdbc.url}"></property>

       <property name="user" value="${jdbc.username}"></property>

       <property name="password" value="${jdbc.password}"></property>

   </bean>


   <!--配置sessionFactory-->

   <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

       <property name="dataSource" ref="dataSource"></property>

       <!--加载mybatis核心文件-->

       <property name="configLocation" value="classpath:sqlMapConfig-spring.xml"></property>

   </bean>


   <!--扫描mapper所在的包 为mapper创建实现类-->

   <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">

       <property name="basePackage" value="com.xmp.mapper"></property>

   </bean>



   <!--声明式事务控制-->

   <!--平台事务管理器-->

   <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

       <property name="dataSource" ref="dataSource"></property>

   </bean>


   <!--配置事务增强-->

   <tx:advice id="txAdvice">

       <tx:attributes>

           <tx:method name="*"/>

       </tx:attributes>

   </tx:advice>


   <!--事务的aop织入-->

   <aop:config>

       <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.xmp.service.impl.*.*(..))"></aop:advisor>

   </aop:config>


</beans>

  • SprngMVC配置文件:spring-mvc.xml
<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!--组件扫描主要扫描controller--><context:component-scanbase-package="com.xmp.controller"></context:component-scan><!--配置mvc注解驱动--><mvc:annotation-driven></mvc:annotation-driven><!--内部资源视图解析器--><beanid="resourceViewResolver"class="org.springframework.web.servlet.view.InternalResourceViewResolver"><propertyname="prefix"value="/WEB-INF/pages/"></property><propertyname="suffix"value=".jsp"></property></bean><!--开发静态资源访问权限--><mvc:default-servlet-handler></mvc:default-servlet-handler></beans>
  • MyBatis映射文件:AccountMapper.xml
<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.xmp.mapper.AccountMapper"><insertid="save"parameterType="account">insertintoaccountvalues(#{id},#{name},#{money})
</insert><selectid="findAll"resultType="account">select*fromaccount</select></mapper>MyBatis核心文件:sqlMapConfig-spring.xml<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEconfigurationPUBLIC"-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><!--定义别名--><typeAliases><!--<typeAliastype="com.xmp.domain.Account"alias="account"></typeAlias>--><packagename="com.xmp.domain"></package></typeAliases></configuration>
  • 数据库连接信息文件:jdbc.properties
jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/ssmjdbc.username=rootjdbc.passwords=root
  • Web.xml文件:web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

        xmlns="http://java.sun.com/xml/ns/javaee"

        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">


   <!--spring 监听器-->

   <context-param>

       <param-name>contextConfigLocation</param-name>

       <param-value>classpath:applicationContext.xml</param-value>

   </context-param>

   <listener>

       <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

   </listener>


   <!--springmvc的前端控制器-->

   <servlet>

       <servlet-name>DispatcherServlet</servlet-name>

       <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

       <init-param>

           <param-name>contextConfigLocation</param-name>

           <param-value>classpath:spring-mvc.xml</param-value>

       </init-param>

       <load-on-startup>1</load-on-startup>

   </servlet>

   <servlet-mapping>

       <servlet-name>DispatcherServlet</servlet-name>

       <url-pattern>/</url-pattern>

   </servlet-mapping>


   <!--乱码过滤器-->

   <filter>

       <filter-name>CharacterEncodingFilter</filter-name>

       <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

       <init-param>

           <param-name>encoding</param-name>

           <param-value>UTF-8</param-value>

       </init-param>

   </filter>

   <filter-mapping>

       <filter-name>CharacterEncodingFilter</filter-name>

       <url-pattern>/*</url-pattern>

   </filter-mapping>


</web-app>


  • 日志文件:log4j.xml

#

# Hibernate, Relational Persistence for Idiomatic Java

#

# License: GNU Lesser General Public License (LGPL), version 2.1 or later.

# See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.

#


### direct log messages to stdout ###

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.Target=System.err

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n


### direct messages to file hibernate.log ###

#log4j.appender.file=org.apache.log4j.FileAppender

#log4j.appender.file.File=hibernate.log

#log4j.appender.file.layout=org.apache.log4j.PatternLayout

#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n


### set log levels - for more verbose logging change 'info' to 'debug' ###


log4j.rootLogger=all, stdout


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
26天前
|
XML 安全 Java
|
29天前
|
缓存 NoSQL Java
什么是缓存?如何在 Spring Boot 中使用缓存框架
什么是缓存?如何在 Spring Boot 中使用缓存框架
46 0
|
4天前
|
设计模式 XML Java
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
本文详细介绍了Spring框架的核心功能,并通过手写自定义Spring框架的方式,深入理解了Spring的IOC(控制反转)和DI(依赖注入)功能,并且学会实际运用设计模式到真实开发中。
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
|
11天前
|
IDE Java 测试技术
互联网应用主流框架整合之Spring Boot开发
通过本文的介绍,我们详细探讨了Spring Boot开发的核心概念和实践方法,包括项目结构、数据访问层、服务层、控制层、配置管理、单元测试以及部署与运行。Spring Boot通过简化配置和强大的生态系统,使得互联网应用的开发更加高效和可靠。希望本文能够帮助开发者快速掌握Spring Boot,并在实际项目中灵活应用。
28 5
|
11天前
|
设计模式 前端开发 Java
步步深入SpringMvc DispatcherServlet源码掌握springmvc全流程原理
通过对 `DispatcherServlet`源码的深入剖析,我们了解了SpringMVC请求处理的全流程。`DispatcherServlet`作为前端控制器,负责请求的接收和分发,处理器映射和适配负责将请求分派到具体的处理器方法,视图解析器负责生成和渲染视图。理解这些核心组件及其交互原理,有助于开发者更好地使用和扩展SpringMVC框架。
24 4
|
22天前
|
缓存 Java 数据库连接
Spring框架中的事件机制:深入理解与实践
Spring框架是一个广泛使用的Java企业级应用框架,提供了依赖注入、面向切面编程(AOP)、事务管理、Web应用程序开发等一系列功能。在Spring框架中,事件机制是一种重要的通信方式,它允许不同组件之间进行松耦合的通信,提高了应用程序的可维护性和可扩展性。本文将深入探讨Spring框架中的事件机制,包括不同类型的事件、底层原理、应用实践以及优缺点。
51 8
|
1月前
|
存储 Java 关系型数据库
在Spring Boot中整合Seata框架实现分布式事务
可以在 Spring Boot 中成功整合 Seata 框架,实现分布式事务的管理和处理。在实际应用中,还需要根据具体的业务需求和技术架构进行进一步的优化和调整。同时,要注意处理各种可能出现的问题,以保障分布式事务的顺利执行。
57 6
|
29天前
|
前端开发 Java 开发者
Spring MVC中的请求映射:@RequestMapping注解深度解析
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的关键,它将HTTP请求映射到相应的处理器方法上。本文将深入探讨`@RequestMapping`注解的工作原理、使用方法以及最佳实践,为开发者提供一份详尽的技术干货。
112 2
|
1月前
|
Java Kotlin 索引
学习Spring框架特性及jiar包下载
Spring 5作为最新版本,更新了JDK基线至8,修订了核心框架,增强了反射和接口功能,支持响应式编程及Kotlin语言,引入了函数式Web框架,并提升了测试功能。Spring框架可在其官网下载,包括文档、jar包和XML Schema文档,适用于Java SE和Java EE项目。
34 0
|
关系型数据库 Java MySQL
SSM-Spring-20:Spring中事务基础
  ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------       事务 事务是什么?   我记得当初的百度百科上讲,事务是执行的最小逻辑单元,它们要么都执行,要么都不执行   (同生共死) 事务解决什么问题?   简单的提一个小例子,...
1274 0