博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
手把手教你整合SSM框架
阅读量:1888 次
发布时间:2019-04-26

本文共 7681 字,大约阅读时间需要 25 分钟。

文章目录

SSM框架整合

SSM框架(Spring+Spring MVC + MyBatis)框架是当前后端开发较为流行的框架集合,在整合时应该按照Spring整合其他框架的原则进行,在整合测试时,先测试每个框架单独是否配置成功,再测试整合是否成功。

整合示例

示例使用c3p0作为数据源

日志使用log4j

pom依赖

javax.servlet
javax.servlet-api
3.1.0
org.mybatis
mybatis
3.5.5
org.mybatis
mybatis-spring
2.0.5
log4j
log4j
1.2.17
mysql
mysql-connector-java
8.0.15
jstl
jstl
1.2
javax.servlet.jsp
jsp-api
2.0
javax.annotation
javax.annotation-api
1.3.1
org.springframework
spring-context
${spring-version}
org.springframework
spring-core
${spring-version}
org.springframework
spring-beans
${spring-version}
org.springframework
spring-aop
${spring-version}
org.springframework
spring-expression
${spring-version}
org.springframework
spring-jdbc
${spring-version}
org.springframework
spring-tx
${spring-version}
org.springframework
spring-test
${spring-version}
org.aspectj
aspectjweaver
1.8.7
org.springframework
spring-webmvc
${spring-version}
org.springframework
spring-web
${spring-version}
com.mchange
c3p0
0.9.5.2
commons-fileupload
commons-fileupload
1.3.1
commons-io
commons-io
2.5
junit
junit
4.12
test

配置文件

log4j

log4j.properties

### #配置根Logger ###log4j.rootLogger=debug,stdout### 输出到控制台 ###log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target=System.outlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=[%d{yyy-MM-dd HH\:mm\:ss}] [%5p] %c{1}\:%L - %m%n

mybatis

MyBatis的很多配置都在Spring配置文件中进行,只剩下不常用的配置在单独配置文件中进行

mybatis-config.xml

spring

spring配置文件中配置spring和mybatis相关配置

spring.xml

其中,和数据库有关的配置单独抽取出来

dbconfig.properties

jdbc.driver=com.mysql.cj.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8jdbc.username=rootjdbc.password=root

Spring MVC

spring-servlet.xml

web.xml

为了让web服务启时Spring容器可以跟随启动,需要在web.xml中配置

Archetype Created Web Application
contextConfigLocation
classpath:spring.xml
org.springframework.web.context.ContextLoaderListener
spring
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:spring-servlet.xml
1
spring
/
characterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
characterEncodingFilter
/*
/index.jsp

事务控制

在Spring配置文件中已经开启了Spring的事务控制器和基于注解的事务管理

在Service类中进行事务控制即可

AccountService.java

package com.console.service;import com.console.mybatis.bean.Account;import com.console.mybatis.mapper.AccountMapper;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import org.springframework.transaction.annotation.Transactional;import javax.management.RuntimeErrorException;@Service@Transactional(rollbackFor = Exception.class)public class AccountService {
@Autowired private AccountMapper accountMapper; /** * 转账 * @param from * @param to * @param money */ public void transfer(Account from,Account to,Double money){
if (from.getMoney() < money){
throw new RuntimeException("余额不足,无法转账"); } from.setMoney(from.getMoney() - money); to.setMoney(to.getMoney() + money); accountMapper.update(from); //假定这里发生异常,测试事务是否成功 int i = 1 / 0; accountMapper.update(to); } public Account getById(Integer id){
Account account = accountMapper.queryById(id); return account; }}

AccountServiceTest.java

package com.console.service;import com.console.mybatis.bean.Account;import org.junit.Before;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import static org.junit.Assert.*;@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations = "classpath:spring.xml")public class AccountServiceTest {
@Autowired private AccountService accountService; @Before public void setUp() throws Exception {
} @Test public void transfer() {
Account account1 = accountService.getById(2); Account account2 = accountService.getById(3); try {
double money = 500; System.out.println(account1); System.out.println(account2); accountService.transfer(account1, account2, money); System.out.println("------------"); System.out.println(account1); System.out.println(account2); }catch (Exception e){
account1=accountService.getById(2); account2=accountService.getById(3); System.out.println("发生错误,重新获取账户信息"); System.out.println(account1); System.out.println(account2); } }}

事务控制时,在业务层获取到的异常事务控制之后,调用业务方法的方法内同样可以获取到

示例项目

项目仓库地址 :https://gitee.com/ZhijianCao_admin/ssm.git

转载地址:http://nezdf.baihongyu.com/

你可能感兴趣的文章
走进数据科学:最好是通过比网课更好的方法
查看>>
【Python爬虫实战】知乎热榜数据采集,上班工作摸鱼两不误,知乎热门信息一网打尽
查看>>
10种算法一文打尽!基本图表算法的视觉化阐释
查看>>
未来属于人工智能工程师,但成功转型不容易
查看>>
科技界“挠头”:困扰科技界可持续发展的难题
查看>>
标准出现问题,人工智能正在走向错误的方向
查看>>
不论何时,互联网从业者一直幸福着~
查看>>
架构师知识体系全景图
查看>>
guava中EventBus(事件总线)源码分析与使用
查看>>
程序员成神之路文章目录
查看>>
最全架构设计实践方法论: 微服务
查看>>
linux入门--磁盘管理之分区、格式化与挂载
查看>>
开发必备:HTTP 及 TLS
查看>>
如何设计自己的第一个加密交易机器人?
查看>>
TKDE 2020 | 综述:基于知识图谱的推荐系统
查看>>
在后台的python:众多程序员无法攻克的难题
查看>>
国会大厦骚乱,与一家极不可靠的面部识别公司……
查看>>
电动汽车的“专属危险”:网络威胁问题不容小觑
查看>>
统治50年:为什么SQL在如今仍然很重要?
查看>>
测试是一场竞争,而数据每次都会获得胜利
查看>>