原创

SSM从零开始整合教学(一)

大家好,今天我们对 SSM进行整合。 本文是作者对bilibili的尚硅谷的SSM整合视频进行使用并记录流程进行发布。

工程创建

首先,我们使用的是eclipse的maven来搭建项目,当然也可以适套于idea,总的流程是差不多的。 那我们就开始吧! 1.首先是需要创建一个maven工程

在这里插入图片描述

2.然后点击Next,选上Create a simple project

在这里插入图片描述

3.将Packaging选项由Jar改为War,代表这是一个动态 web工程。然后Group Id一般是写公司或组的名称,Artifact Id写的是项目的名称。

在这里插入图片描述

4.然后我们创建好后就会发现报错,是因为缺少web.xml,在web项目中,web.xml可以说是一个项目的起始点,所以在这一块是必不可少的。 因为缺少web.xml ,需要去配置 ,右键点击项目的properties。然后找到Project Facetes,先将原来勾选的Dynamic Web Module这个选项勾选去掉,然后点击Apply,然后再将勾打上,下方就会弹出让我们配置web.xml。

在这里插入图片描述

5.这个时候下方就会弹出来Further configuration available....,我们点击进入。

在这里插入图片描述

6.进入后,这个是让我们选择web.xml位置的意思,我们选择将web.xml的位置放在src/main/webapp下。

在这里插入图片描述

然后再Apply一下。出去就会发现web.xml已经给我们补齐了。

在这里插入图片描述

引入依赖

这样一来Maven工程就建好了, 然后开始引入项目依赖的jar包。 首先是要引入SpringSpringMVCmybatis 以及数据库的驱动包相关的jar包。 先来到Pom文件 准备引入jar在这里插入图片描述

之后就开始引入依赖啦,所有的依赖都可以在该网址中下载:maven依赖 这里我就将代码直接贴出来了。显示SpringMVCjar包 注意这些要写在dependencies

在这里插入图片描述

<!-- spring springmvc 的包 -->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>4.3.7.RELEASE</version>
</dependency>

然后我们引入Spring事务控制的jdbc的jar包 需要与SpringMVC版本对应4.3.7

<!-- spring jdbc -->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>4.3.7.RELEASE</version>
</dependency>

然后再引入Spring面向切面编程的jar包 spring aspect同样4.3.7 版本对应

<!-- Spring 面向切面編程 -->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-aspects -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aspects</artifactId>
    <version>4.3.7.RELEASE</version>
</dependency>

至此Spring相关的包就全部引入进来了 之后我们引入mybatis的jar包。

<!-- mybatis -->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.2</version>
</dependency>

然后 mybatis需要和Spring整合 所以我们要引入mybatis整合Spring的jar包。

<!-- mybatis 整合spring的适配包 -->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>1.3.1</version>
</dependency>

之后呢我们就需要导入数据库连接池以及驱动的jar包。

	<!-- 数据库连接池驱动 -->
	<!-- https://mvnrepository.com/artifact/c3p0/c3p0 -->
<dependency>
    <groupId>c3p0</groupId>
    <artifactId>c3p0</artifactId>
    <version>0.9.1.2</version>
</dependency>
	<!-- 再引入mysql驱动 -->
	<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.48</version>
</dependency>

然后我们再引入一些比较有用的 jstlservlet-api 以及junit的jar包。 至此,我们最基本 jar包也就引入完毕了,剩下的jar包我们在项目创建的过程中,需要的时候再引入。

<!-- jstl  servlet-api  junit -->
<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mortbay.jetty/servlet-api 
这个包服务器中是有的 但是我们不引入就会报错,所以我们加一个scope表示这是提供的
项目被发布到服务器的时候就会被自动替换
-->
<dependency>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>servlet-api</artifactId>
    <version>3.0.20100224</version>
    <scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>

前端框架与组件引入

前端框架方面我们通过bootstrap来生成,毕竟都是写好的css,我们直接拿来用就可以了。它可以帮助我们做出一个比较好看的前端页面。 我们先去官方将bootstrap文件进行下载在这里下载

我们进入后可以选择最左边的选项进行下载,用于生产环境的 Bootstrap 大家解压出来以后里面有一些关于字体 css,js等信息 我们到时候只用按照网站的模板嵌套就能有网页的效果了 ! 好的!下载好以后我们专门建立一个文件夹来放bootstrap。在webapp下创建一个static文件夹。

在这里插入图片描述

然后将我们下载好的bootstrap文件夹直接扔进去就可以了!像下图这样:

在这里插入图片描述

然后我们来试一试我们引入的bootstrap有没有效果,我们先在webapp下创建一个index.jsp

在这里插入图片描述

然后将该index.jsp中的页面编码,以及内容显示的编码类型都改为utf-8,如图所示:

在这里插入图片描述

因为bootstrap在使用的时候需要使用jquery ,所以我们再引入jquery。 我们再在static中创建js文件夹 然后放入jqueryjquery直接百度一下就能下载啦!版本适中就可以,作者这里使用的是3.4.1的版本。

在这里插入图片描述

然后在页面上引入jquery以及bootstrap。最好把jquery放在最上面哈!

在这里插入图片描述

<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="static/js/jquery-3.4.1.js"></script>
<!-- 引入样式 -->
<link href="static/bootstrap-3.3.7-dist/css/bootstrap.min.css" rel="stylesheet">
<script src="static/bootstrap-3.3.7-dist/js/bootstrap.min.js" type="text/javascript"></script>
</head>

我们可以试验一下我们引入的是否有效果:在内容中写入以下字段

<button class="btn btn-primary">23333</button>

效果是这样的哈! 截图截的不好。。但是效果是出来了。

在这里插入图片描述

配置到这里,我们前端的相关包基本引入了,之后就可以正式开始配置文件的编写!

配置文件的编写

接下来我们要进行最最关键配置文件编写了!配置我们的web.xmlSpringmvcSpring。 首先我们先来到我们的web.xml文件中。

在这里插入图片描述

我们在里面先创建Spring的配置 ,需要让项目一起动就来启动Spring 按住 alt+/ ,会出现如下界面:

在这里插入图片描述

我们选择 contextloaderlistener,看着架势就是监听上下文的加载,然后就加载Spring。选择以后效果如下图:

在这里插入图片描述

然后我们将设置类路径下的applicationContext.xml ,这就是我们Spring的配置文件, 项目一起动就会加载。

在这里插入图片描述

	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:applicationContext.xml</param-value>
	</context-param>

设置好以后,我们就在resources创建这个配置文件。

在这里插入图片描述

然后选择 Spring Bean Coniguration File,输入名字applicationContext.xml,完成创建。

在这里插入图片描述

创建好Spring的启动项后,我们再去创建SpringMvc的前端控制器,回到web.xml。 一样的操作, 点击dispatcherservlet

在这里插入图片描述

创建以后是这样的:

在这里插入图片描述

我们可以在init-param标签中设定我们Spirngmvc配置文件的名字及地址,但是我们也可以不设定,直接使用默认的设置,所以我们直接删掉init-param标签

在这里插入图片描述

SpringMvc的默认设置是要配置文件在web-inf这个文件夹下,和web.xml同级,创建一个dispatcherServlet-servlet.xml,这就是SpringMVC的配置文件,名字和位置都不能错哦!

在这里插入图片描述

设置好后,项目启动就会自动引用。然后我们在web.xml页面给SpringMVC设置拦截所有的请求

在这里插入图片描述

我们再配置字符编码过滤器 这个过滤器可以将我们的字符编码设定为请求或者响应的字符编码。并在初始化的时候设定我们的默认编码级别为UTF-8

在这里插入图片描述

	<!--3.字符编码过滤器  -->
	<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>
		<init-param>
			<param-name>forceRequestEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
		<init-param>
			<param-name>forceResponseEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
		
	</filter>
	<filter-mapping>
		<filter-name>CharacterEncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

然后我们还需要配置Rest风格的请求, 也就是可以使用PUT Delete等方式将请求进行传入。 主要方法是通过过滤器将页面上发来的请求转化为PUT Delete请求。 因为我们有多个过滤器,所以会有先后顺序 但是我们的字符编码过滤器是一定要放在第一个的。

在这里插入图片描述

<!--使用Rest风格的URI 用来发送put delete请求 -->
<!-- 把页面发过来的请求转化为指定的请求 -->
<filter>
	<filter-name>HiddenHttpMethodFilter</filter-name>
	<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
	<filter-name>HiddenHttpMethodFilter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

好的,到现在我们的web.xml的配置就基本配置好了!然后我们就可以来配置SpringMVC的配置文件,主要是配置跳转的逻辑

在这里插入图片描述

.首先现在命名空间引入context这个最基本的组件。有了这个组件,我们就可以用它扫描所有的包下面的注解文件加入到IOC容器中。

在这里插入图片描述

然而我们要用SpringMVC去扫描包,那么就应该先去建立包。建立的样子就如下图所示:

在这里插入图片描述

我们给SpringMVC设置扫描仅仅扫描Controller的包,这样就只会让SpringMVC扫描到控制逻辑的注解组件(因为我们的逻辑控制组件都写在Controller包中),并且禁止默认。默认是扫描外面包下的所有包,设置禁止默认后我们就能自己指定了。

在这里插入图片描述

<!-- SpringMVC的配置文件,包含网站跳转逻辑的控制,配置 -->
<context:component-scan base-package="com.atguigu" use-default-filters="false">
	<!-- 只扫描控制器 -->
	<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

之后我们再配置视图解析器,设置前缀与后缀,告知跳转的路径

在这里插入图片描述

<!-- 配置视图解析器,方便页面返回 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	<property name="prefix" value="/WEB-INF/views/"></property>
	<property name="suffix" value=".jsp"></property>
</bean>

并设置views文件夹

在这里插入图片描述

然后返回SpringMVC配置文件进入下方的namespace,将我们的mvc组件给勾上。

在这里插入图片描述

首先要配置的是一个如果有SpringMVC不能处理的请求,则交给tomcat处理。 这样就能让动态静态资源都返回成功

在这里插入图片描述

然后是配置SpringMVC的一些高级功能,如JSR303校验等。。

<!-- 设置两个标准配置  -->
<!-- 将SpringMVC不能处理的请求交给tomcat  这样就能让动态静态资源都能返回成功 -->
<mvc:default-servlet-handler/>
<!-- 能支持springmvc更高级的一些功能,JSR303校验 快捷的ajax请求等等 -->
<mvc:annotation-driven/>

将以上配置好,在SSM中SpringMVC的配置也就差不多了,SpringMVC做的主要就是对流程跳转的控制。 接下来就是来配置Spring的配置文件。首先先配置数据源,来到applicationContext.xml进行配置。

在这里插入图片描述

因为这些数据都不是写死的,我们需要新建一个properties(配置文件)存储数据。 在resources下创建一个dbconfig 存储配置数据。

在这里插入图片描述

以下我的配置,为了不跟别的配置文件混乱 我们跟这个数据库有关的都加上jdbc前缀

在这里插入图片描述

写好之后我们需要外部引入dbconfig.properties。这时候就需要Spring的context标签,来到命名空间,给他勾上。

在这里插入图片描述

然后我们就可以将dbconfig.properties的数据引入并填充到之前的数据源中。

在这里插入图片描述

	<!--Spring的配置文件,这里主要配置和业务逻辑有关的  -->
	<!--数据源 事务控制等核心  -->
	<context:property-placeholder location="classpath:dbconfig.properties"/>
	<!-- 配置数据源 -->
	<bean id="pooledDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" >
		<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
		<property name="driverClass" value="${jdbc.driverClass}"></property>
		<property name="user" value="${jdbc.user}"></property>
		<property name="password" value="${jdbc.password}"></property>
	</bean>

引入数据源后,我们还需要配置和SpringMVC一样的扫描包 ,这次就扫描除了controller的包就行。

在这里插入图片描述

<context:component-scan base-package="com.atguigu">
	<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

配置好了数据源,也配置好了需要扫描的包,那配置的数据源就需要起作用了,来进行SpringMybatis整合

在这里插入图片描述

	<!-- 配置和mybatis的整合 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<!-- 指定mybatis全局配置文件的位置 -->
		<property name="configLocation" value="classpath:mybatis-config.xml"></property>
	</bean>

然后我们也需要创建Mybatis的配置文件,就放在resource包下,名字就叫mybatis-config.xml

在这里插入图片描述 在这里插入图片描述

配置文件就创建好了,内容我们等之后再完善。 然后我们还需要创建mapper.xml,作为Dao层接口的映射,还需要将mapper.xml的地址导入到Spring的配置文件中。就此我们先创建一个存放mapper.xml文件的mapper的文件夹,就在resources下。

在这里插入图片描述

然后再Spring配置文件中引入mybatis的配置文件设置数据源,并配置mapper.xml存放的位置在这里插入图片描述

	<!-- 配置和mybatis的整合 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<!-- 指定mybatis全局配置文件的位置 -->
		<property name="configLocation" value="classpath:mybatis-config.xml"></property>
		<!-- 配置数据源 -->
		<property name="dataSource" ref="pooledDataSource"></property>
		<!-- 指定mybatis的mapper文件的位置 -->
		<property name="mapperLocations" value="classpath:mapper/*.xml"></property>
	</bean>

因为我们配置了mapper.xml的文件,但是接口Dao类还没有放入IOC容器中 所以我们需要再将dao放到IOC容器中,不然即使在mapper.xml中设置了接口的地址,在IOC容器中也是提取不到的。

在这里插入图片描述

	<!-- 配置扫描器,将mybatis接口的实现加入到ioc容器中 -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<!--扫描所有dao接口的实现 加入到ioc容器中  -->
		<property name="basePackage" value="com.atguigu.crud.dao"></property>
	</bean>

以上就是Spring与Mybatis的整合内容。说通俗一些也就是将原Mybatis的各种配置都放到Spring的IOC容器中,由IOC容器对其进行管理调用。 之后我们来进行事务控制的配置 由事务管理器控制数据源。

在这里插入图片描述

	<!-- 事务控制的配置 -->
	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<!-- 控制住数据源 -->
		<property name="dataSource" ref="pooledDataSource"></property>
	</bean>

之后我们要开始设置事务,可以基于注解也可以基于xml ,将tx 和 aop都勾上。

在这里插入图片描述 在这里插入图片描述

之后开始编写切入点表达式 ,并且配置事务增强。并设置不同的请求方法所进行不同的操作。

在这里插入图片描述

	<!-- 事务控制的配置 -->
	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<!-- 控制住数据源 -->
		<property name="dataSource" ref="pooledDataSource"></property>
	</bean>
	
	<!-- 开启基于注解的事务,使用xml配置形式的事务(必要主要的都是使用配置模式) -->
	<aop:config>
		<!-- 切入点表达式 表示service包下所有的东西都接入事务 并且参数任意多-->
		<aop:pointcut expression="execution(* com.atguigu.crud.service..*(..))" id="txpoint"/>
		<!-- 配置事务增强  -->
		<aop:advisor advice-ref="txAdvice" pointcut-ref="txpoint"/>
	</aop:config>
	<!-- 配置事务增强,上面的事务切入以后 具体怎么切,需要看这个方法 -->
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<!-- 代表切入的所有方法都是事务方法 -->
			<tx:method name="*"/>
			<!-- 以get开始的所有方法 -->        <!-- 每一个get开始的方法都是只读-->
			<tx:method name="get*" read-only="true"/>
		</tx:attributes>
	</tx:advice>

切入点表达式的意思是哪些方法需要进行事务的控制。然后当切入事务以后该怎么做,就看事务增强配置的get还是所有方法所进行的操作了。 事务增强事务的配置是通过transaction-manager进行映射,默认值是transactionManager 如果大家修改了事务控制的配置,记得一定要修改这里 (从尚硅谷那个老师借鉴而来)。

好啦!这一次就先放到这里,下一次就是开始进行mybatis逆向工程的配置。大概..一共有4期的样子,有点多,也是我自己对ssm整合的一次复习! 有想直接去看视频的朋友可以直接去看视频,看视频肯定能了解的更透彻些的。附上地址

java
eclipse
SpringMVC
Spring
Mybatis

  • 作者:LinJy(联系作者)
  • 发表时间:2020-04-11 15:51
  • 版权声明:自由转载-非商用-非衍生-保持署名(null)
  • undefined
  • 评论

    留言