Java学习笔记————SSM框架(Spring+SpringMVC+MyBatis)初学带源码
最近加入公司的新项目组,项目主要是一个web系统,具体实现为Java的SSM框架加Mysql加公司密码设备。之前一直做的C++方面工作,现在要开始学习Java的SSM框架。
首先,在网上找到了一位大佬写的SSM整合框架介绍,很详细,一层层的将框架从spring到springMVC再到MyBatis逐步整合为一个项目,感觉比其他将这三个框架一起写完再讲解整个项目的文章来说要对我们新手更加友好,可以让新手更直观的看清每个框架的依赖加入项目后复制的是哪一部分的功能。
史上最详细的IDEA优雅整合Maven+SSM框架(详细思路+附带源码)
唯一美中不足的是我按照这篇教程逐步写下来之后发现项目运行不成功,文章自带的源码也过期了下载不了,就很难受。
不过后面我发现项目的错误信息主要是java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout()Ljava/lang/Integer; 和另一个NullPointer的空指针问题,主要原因在于项目依赖包的版本问题,后来我也自己解决了。
这里记录一下整合SSM框架的基本流程和各层package的用法。
第一步:创建Maven项目:
Maven配置主要步骤就是下载maven,设置环境变量,设置本地仓库,整合到IDEA。
创建Maven项目:
IDEA-》create new project -》Maven -》create from archetype -》
org.apache.maven.archetypes:maven-archetype-webapp
注意在选择type时不要选错,我一开始创建项目时没仔细看,以为选择webapp就可以,结果选择了上面的cocoon-22的webapp,创建后的项目结构与教程不一致,排查了好久才发现是type选错了。
选好archetype后设置项目名称,保存目录以及maven版本,项目创建完成。
创建后等一会maven自动加载数据包,加载成功后结构如上,会自带一个maven的项目依赖控制文件pom.xml,项目需要加载的包和插件过会就写在这个pom文件中。
然后在IDEA界面的右上角找到带蓝色方块的文件夹型键project structure,
进入project structure -》Modules,在右侧的文件管理中创建如下几个文件夹,顺便按照颜色和类型将其Mark as一下。
target文件夹不用创建,在src.main下创建java和resources文件夹并将其Mark as 为Sources和Resources即可。
首先展示一下项目最后的文件结构:
这个结构也是按照博客教程来创建的。
第二步,依赖文件pom.xml:
依赖文件用于控制maven项目中的依赖数据包和插件的导入和版本信息。
pom.xml文件可以像上面博客文章中按整合顺序依次加入数据包和插件依赖语句,也可以直接一次性将需要的依赖语句写入文件。
我的pom.xml是从别的项目里扒过来的,会有一些类似fastjson的与SSM框架无关的数据包,介意的可以自己照着教程博客里的pom.xml把多余的依赖删掉,对整体SSM框架无影响。
我的pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.fasp</groupId>
<artifactId>SSMDemo</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>SSMDemo</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<javax-activation.version>1.1</javax-activation.version>
<!-- 4.3.7 ApplicationContext-mvc.xml误报红叉,但不影响正常运行 -->
<spring.version>4.3.7.RELEASE</spring.version>
<!--<spring.version>4.2.9.RELEASE</spring.version>-->
<mysql-connector-java.version>5.1.34</mysql-connector-java.version>
</properties>
<repositories>
<repository>
<id>central</id>
<url>https://maven.aliyun.com/nexus/content/repositories/central/</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>https://maven.aliyun.com/nexus/content/repositories/central/</url>
</pluginRepository>
</pluginRepositories>
<dependencies>
<!-- spring start -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${
spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${
spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${
spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${
spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${
spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${
spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-dao</artifactId>
<version>2.0.8</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>${
spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${
spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-mock</artifactId>
<version>2.0.8</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${
spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${
spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${
spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${
spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${
spring.version}</version>
</dependency>
<!-- spring end -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${
mysql-connector-java.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.apache.james</groupId>
<artifactId>apache-mime4j</artifactId>
<version>0.6.1</version>
</dependency>
<dependency>
<groupId>asm</groupId>
<artifactId>asm</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>org.apache.axis</groupId>
<artifactId>axis</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib-nodep</artifactId>
<version>3.1</version>
</dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>