SSM框架——(SpringMVC + Spring + MyBatis + Maven多模块)整合


?

 为初学者而著!

Java基础是初学者的起点,是帮助你从小白入门到精通必学基础课程!

?

B站最新录制Java300集>>>   适合准备入行开发的零基础员学习Java,基于最新JDK13、IDEA平台讲解的,视频中穿插多个实战项目。每一个知识点都讲解的通俗易懂,由浅入深。不仅适用于零基础的初学者,有经验的程序员也可做巩固学习。

配套学习:?>>?" data-widget="csdnlink">2022年Java300集最新录制课程上线了>>>? 

 

SpringMVC + Spring + MyBatis + Maven多模块

SpringMVC + Spring + MyBatis

Maven多模块

什么是SSM框架?

SpringMVC:

1.客户端发送请求到DispacherServlet(分发器)

2.由DispacherServlet控制器查询HanderMapping,找到处理请求的Controller

3.Controller调用业务逻辑处理后,返回ModelAndView

4.DispacherSerclet查询视图解析器,找到ModelAndView指定的视图

5.视图负责将结果显示到客户端Spring:

?

1.Spring是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器架构,IOC容器包含并管理应用对象的配置和生命周期,你可以配置你的每个bean如何被创建,也可以配置每个bean是只有一个实例,还是每次需要时都生成一个新的实例,以及它们是如何相互关联的

2.IOC思想最核心的地方在于,资源不由使用资源的双方管理,而由不使用资源的第三方管理,这可以带来很多好处。第一,资源集中管理,实现资源的可配置和易管理。第二,降低了使用资源双方的依赖程度,也就是我们说的耦合度

3.容器提供了AOP技术,利用它很容易实现如权限拦截、运行期监控等功能

MyBatis:

1.MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录

2.MyBatis的操作都是围绕一个sqlSessionFactory实例展开的。MyBatis通过配置文件关联到各实体类的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的sql语句映射。在每次与数据库交互时,通过sqlSessionFactory拿到一个sqlSession,再执行sql命令

为什么使用Maven多模块?

JavaEE项目开发中为了便于后期的维护,一般会进行分层开发,分层之后,各个层之间的职责会比较明确,后期维护起来也相对比较容易

项目结构

?

创建Maven多模块项目

一、创建ssm-parent项目

创建 ssm-parent,用来给各个子模块继承

使用 cmd 或者 Terminal,进入命令行,输入以下命令:

mvn archetype:generate -DgroupId=com.ryan -DartifactId=ssm-parent -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

命令执行完成之后可以看到在当前目录生成了ssm-parent目录,里面有一个src目录和一个 pom.xml文件,如下图所示:

?

 将src文件夹删除,然后修改pom.xml文件,将jar修改为pom,pom表示它是一个被继承的模块,修改后的内容如下:

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
4.0.0
com.ryan
ssm-parent
pom
1.0-SNAPSHOT
ssm-parent
http://maven.apache.org


junit
junit
3.8.1
test


注:

archetype:maven工程的模板工具包

mvn archetype:generate:创建项目(在maven 3.02以下的版本,使用archetype:create 命令创建)

DgroupId:组织ID

DartifactId:项目ID

DarchetypeArtifactId:工程类型

DinteractiveMode:是否已交互模式进行,如果是false的话就会采用默认设置建立项目

二、创建ssm-domain模块

命令行进入创建好的ssm-parent目录,然后执行下列命令:

mvn archetype:generate -DgroupId=com.ryan -DartifactId=ssm-domain -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

命令执行完成之后可以看到在ssm-parent目录中生成了ssm-domain,里面包含src目录和pom.xml文件。如下图所示:

?

 修改ssm-domain目录中的pom.xml文件,把com.ryan1.0-SNAPSHOT去掉,加上jar,因为groupId和version会继承ssm-parent中的groupId和version,packaging设置打包方式为jar,修改过后的pom.xml文件如下:

<?xml version="1.0"?>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
4.0.0

com.ryan
ssm-parent
1.0-SNAPSHOT

ssm-domain
jar
ssm-domain
http://maven.apache.org


junit
junit
3.8.1
test


三、创建ssm-common模块

命令行进入创建好的ssm-parent目录,然后执行下列命令:

mvn archetype:generate -DgroupId=com.ryan -DartifactId=ssm-common -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

修改ssm-common目录中的pom.xml文件,把com.ryan1.0-SNAPSHOT去掉,加上jar,因为groupId和version会继承ssm-parent中的groupId和version,packaging设置打包方式为jar,修改后的内容如下:

<?xml version="1.0"?>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
4.0.0

com.ryan
ssm-parent
1.0-SNAPSHOT

ssm-common
jar
ssm-common
http://maven.apache.org


junit
junit
3.8.1
test


四、创建ssm-dao模块

命令行进入创建好的ssm-parent目录,然后执行下列命令:

mvn archetype:generate -DgroupId=com.ryan -DartifactId=ssm-dao -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

修改ssm-dao目录中的pom.xml文件,把com.ryan1.0-SNAPSHOT去掉,加上jar,因为groupId和version会继承ssm-parent中的groupId和version,packaging设置打包方式为jar,同时添加对ssm-domain、ssm-common模块的依赖,修改后的内容如下:

<?xml version="1.0"?>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
4.0.0

com.ryan
ssm-parent
1.0-SNAPSHOT

ssm-dao
jar
ssm-dao
http://maven.apache.org


junit
junit
3.8.1
test


com.ryan
ssm-domain
${project.version}


com.ryan
ssm-common
${project.version}


五、创建ssm-service模块

命令行进入创建好的ssm-parent目录,然后执行下列命令:

mvn archetype:generate -DgroupId=com.ryan -DartifactId=ssm-service -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

修改ssm-service目录中的pom.xml文件,把com.ryan1.0-SNAPSHOT去掉,加上jar,因为groupId和version会继承ssm-parent中的groupId和version,packaging设置打包方式为jar,同时添加对ssm-dao模块的依赖,ssm-service依赖ssm-dao、ssm-domain和ssm-common,但是我们只需添加ssm-dao的依赖即可,因为ssm-dao已经依赖了ssm-domain、ssm-common。修改后的内容如下:

<?xml version="1.0"?>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
4.0.0

com.ryan
ssm-parent
1.0-SNAPSHOT

ssm-service
jar
ssm-service
http://maven.apache.org


junit
junit
3.8.1
test


com.ryan
ssm-dao
${project.version}


六、创建ssm-web模块

命令行进入创建好的ssm-parent目录,然后执行下列命令:

mvn archetype:generate -DgroupId=com.ryan -DartifactId=ssm-web -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

命令执行完成之后可以看到在ssm-parent目录中生成了ssm-web,里面包含src目录和pom.xml文件。如下图所示:

?

 修改ssm-web目录中的pom.xml文件,把com.ryan1.0-SNAPSHOT去掉,因为groupId和version会继承ssm-parent中的groupId和version,packaging设置打包方式为war,同时添加对ssm-service模块的依赖,修改后的内容如下:

<?xml version="1.0"?>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
4.0.0

com.ryan
ssm-parent
1.0-SNAPSHOT

ssm-web
war
ssm-web Maven Webapp
http://maven.apache.org


junit
junit
3.8.1
test


com.ryan
ssm-service
${project.version}



ssm-web

至此,Maven多模块项目已经搭建完成!

SSM框架整合配置

我们使用的是maven来管理的jar,所以只需要在pom.xml中加入相应的依赖,就能导入需要的jar包。这里把项目用到的jar贴在下面,可以自己调整版本号。因为是多模块项目,每个子模块下面都有pom.xml,这里只举例ssm-service下的pom.xml,当然所有模块的依赖也可以都放在ssm-parent下的pom.xml(即父项目的pom.xml),可按照需要自行调整

ssm-service pom.xml

<?xml version="1.0"?>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
4.0.0

com.ryan
ssm-parent
1.0-SNAPSHOT

ssm-service
jar
ssm-service
http://maven.apache.org

4.1.5.RELEASE





org.springframework
spring-web
${spring-version}




org.springframework
spring-jdbc
${spring-version}




org.springframework
spring-context
${spring-version}




org.springframework
spring-webmvc
${spring-version}




org.springframework
spring-aspects
${spring-version}




org.mybatis
mybatis
3.2.6




org.mybatis
mybatis-spring
1.2.2




mysql
mysql-connector-java
5.1.18




com.alibaba
druid
1.0.29




javax.websocket
javax.websocket-api
1.1
provided




javax
javaee-api
7.0
provided




junit
junit
4.12
test




commons-fileupload
commons-fileupload
1.3.1


com.ryan
ssm-dao
${project.version}


下面开始进行编写框架所需配置文件

参数配置文件

通常我们把数据库配置、redis等相关参数放到配置文件中,所以在ssm-web模块中的resources文件夹里新建applicationContext.properties文件,存放项目相关参数配置

#db
#jdbc.driver=oracle.jdbc.driver.OracleDriver
jdbc.driver=com.mysql.jdbc.Driver
#jdbc.url=jdbc:oracle:thin:@172.18.100.223:1521:duvet
jdbc.url=jdbc:mysql://mysql.lqiao.top:3306/student?useUnicode
=true&characterEncoding=utf8
jdbc.username=student
jdbc.password=Password@123456 

pool.maxPoolSize=10
pool.removeAbandonedTimeout=180000
pool.maxWait=10000
pool.timeBetweenEvictionRunsMillis=60000
pool.minEvictableIdleTimeMillis=300000
pool.validationQuery=select 1

注:

配置中的数据库信息为测试库,只有select权限

连接池数据源配置文件

在ssm-web模块中的resources文件夹里新建dataSource.xml文件,配置连接池数据源

数据库连接信息

配置数据库连接池

声明式事务

配置SqlSessionFactory对象

扫描dao层接口,动态实现dao接口

dataSource.xml

<?xml version="1.0" encoding="UTF-8"?>
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org
/schema/beans
http://www.springframework.org/schema/beans/
spring-beans-4.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">

















"${pool.validationQuery} " />







class=
"org.springframework.jdbc.datasource.
DataSourceTransactionManager">



"transactionManager" proxy-target-class="true"
order="10"/>





value="classpath:mybatis-config.xml" />



classpath*:com/ryan/mapper/**/*Mapper.xml






mysql










value="sqlSessionFactory" />


MyBatis配置文件

项目使用MyBatis持久层框架,所以需要配置MyBatis核心文件,在ssm-web模块中recources文件夹里新建mybatis-config.xml文件

指定日志格式

是否开启自动驼峰命名规则

延迟加载

按需加载对象

分页插件

mybatis-config.xml

<?xml version="1.0" encoding="UTF-8"?>
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">





















业务集成配置

处理业务相关,在ssm-service的recources文件夹里新建applicationContext-service.xml文件

扫描注解

applicationContext-service.xml

<?xml version="1.0" encoding="UTF-8"?>
xmlns:context="http://www.springframework.org
/schema/context"
xmlns:aop="http://www.springframework.org
/schema/aop"
xmlns:xsi="http://www.w3.org/2001
/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/
schema/beans
http://www.springframework.org/schema/beans
/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/
context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/
spring-aop-4.0.xsd"> 







Web应用程序配置文件

开启SpringMVC注解模式

视图解析器

rest-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/mvc 
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"
>

"org.springframework.web.accept.
ContentNegotiationManagerFactoryBean">







"org.springframework.web.servlet.view.
ContentNegotiatingViewResolver">
ref="contentNegotiationManager"/>



"org.springframework.web.servlet.view.
UrlBasedViewResolver">







web.xml

字符编码过滤器

配置Spring需要加载的配置文件

配置DispatcherServlet分发器

<?xml version="1.0" encoding="UTF-8"?>
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_3_0.xsd" version="3.0">


characterEncodingFilter
org.springframework.web.filter.
CharacterEncodingFilter


encoding
UTF-8


forceRequestEncoding
true


forceResponseEncoding
true



characterEncodingFilter
/*


contextfilter
com.ryan.filter.WebContextFilter



contextfilter
/*




contextConfigLocation
classpath:applicationContext.xml



org.springframework.web.context.
ContextLoaderListener




rest
org.springframework.web.servlet.
DispatcherServlet



rest
/





ssm-parent

其他配置

项目中还配置了日志、事务、线程池及Spring跳转配置,可根据实际情况斟酌增删配置

数据库脚本

这里贴上demo的数据库,并为student表初始化一些数据

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for t_student_info
-- ----------------------------
DROP TABLE IF EXISTS `t_student_info`;
CREATE TABLE `t_student_info` (
`stu_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '编号',
`stu_number` int(11) NULL DEFAULT NULL COMMENT '学号',
`stu_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '姓名',
`stu_gender` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '性别',
`stu_age` int(3) NULL DEFAULT NULL COMMENT '年龄',
PRIMARY KEY (`stu_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 10004 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of t_student_info
-- ----------------------------
INSERT INTO `t_student_info` VALUES (10001, 95001, '张三', '男', 20);
INSERT INTO `t_student_info` VALUES (10002, 95002, '李四', '男', 21);
INSERT INTO `t_student_info` VALUES (10003, 95003, '王五', '女', 22);
SET FOREIGN_KEY_CHECKS = 1;

看到这里,其实我们的ssm框架与maven多模块的整合配置已经完成了,demo里也已经实现了简单的增删改查,只不过缺少页面而已,后台处理的数据返回到页面上是一串json,不过这些已经足够展示了,需要的同学可以去下载,感觉还不错就给个star吧!

      ?>>?" data-widget="csdnlink">?2022年Java300集最新录制课程上线了>>>??

?

小伙伴如果想要学习更多的知识,学习材料可以,工众号:编程领域

Java初学者学习教程:>>" data-widget="csdnlink">Java初学者入门教程>>>

?