SSM框架整合

1 篇文章 0 订阅
1 篇文章 0 订阅

SSM简介

SSM (Spring+SpringMVC+MyBatis)是目前最流行得Java WEB应用开发框架,曾风靡的SSH (Spring + Struts2 +Hibernate)框架由于Struts出现了严重漏洞而被新市场放弃使用,当然Hibernate还是一款很优秀的全自动化ORM框架。SSM可以被使用在单体应用开发,也可以是微服务应用开发,至于一般常提到的SpringBoot,它是一款现代化框架,它本身就是聚合了Spring+SpringMVC的,SpringBoot框架想做的事就是尽可能减少惹麻烦的配置文件,因此在SpringBoot上开发SSM应用是一件相当轻松的事情,当然,这并不会意味着传统的配置消失了,而是这样的配置成为了约定、习惯,作为Java程序员,手动搭建SSM是基本功,但也是相当繁琐的事情,因此本文是为了直接获取简易化的现成SSM配置。

创建项目

新建工程

本次使用的开发工具是idea。用idea创建新的maven工程,等待其创建完毕后方可继续操作。

导入依赖

  <!--依赖版本锁定-->
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <spring.version>4.3.7.RELEASE</spring.version>
    <jackson.verson>2.8.8</jackson.verson>
    <validator.version>5.4.1.Final</validator.version>
    <mybatis.version>3.4.2</mybatis.version>
    <mybatis.spring.version>1.3.1</mybatis.spring.version>
    <datasource.version>0.9.1</datasource.version>
    <mysql.version>5.1.41</mysql.version>
    <lombok.version>1.18.10</lombok.version>
    <log4j.version>1.2.16</log4j.version>
    <junit.version>4.12</junit.version>
  </properties>

  <dependencies>

    <!--SpringMVC-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <!-- Spring-Jdbc -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <!--Spring-test -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <!-- Spring面向切面编程 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aspects</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <!-- 返回json字符串的支持 -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>${jackson.verson}</version>
    </dependency>

    <!--JSR303数据校验支持-->
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-validator</artifactId>
      <version>${validator.version}</version>
    </dependency>

    <!--MyBatis -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>${mybatis.version}</version>
    </dependency>

    <!-- MyBatis整合Spring的适配包 -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>${mybatis.spring.version}</version>
    </dependency>

    <!-- c3p0数据库连接池 -->
    <dependency>
      <groupId>c3p0</groupId>
      <artifactId>c3p0</artifactId>
      <version>${datasource.version}</version>
    </dependency>

    <!--mysql驱动-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>${mysql.version}</version>
    </dependency>

    <!--lombok实体类封装-->
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>${lombok.version}</version>
    </dependency>

    <!--log4j-->
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>${log4j.version}</version>
    </dependency>

    <!-- junit -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>${junit.version}</version>
    </dependency>
  </dependencies>

  <build>
    <finalName>ssm-template</finalName>
    <plugins>
      <!-- 资源文件拷贝插件 -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.7</version>
        <configuration>
          <encoding>UTF-8</encoding>
        </configuration>
      </plugin>
    </plugins>
    <resources>
      <resource>
        <directory>src/main/java</directory>
        <includes>
          <include>**/*.properties</include>
          <include>**/*.xml</include>
        </includes>
        <filtering>false</filtering>
      </resource>
    </resources>
  </build>

其中build标签中添加了内容,为的是防止包路径下xml或properties等文件丢失。

配置文件

此处我们新建5个配置文件

  • applicationContext.xml
  • dbconfig.properties
  • mybatis-config.xml
  • springmvc.xml
  • log4j.properties

applicationContext.xml完成了Spring相关配置,包括包扫描、事务、数据源、整合MyBatis等行为;dbconfig.properties文件规定了和数据源连接的相关信息,比如账号、密码等;mybatis-config.xml是MyBatis的主配置文件,当整合Spring之后可以忽略;springmvc.xml配置了SpringMVC中的相关配置,包括包扫描、前端控制器、配置Spring相关Bean等行为;log4j.propertieslog4j日志输出格式、位置、级别等相关信息的配置文件。
接下来展示applicationContext.xml、dbconfig.properties和springmvc.xml这三个核心配置文件的内容,其他内容请前往本人的github地址查看

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

	<!--Spring包扫描只管理业务层-->
	<context:component-scan base-package="org.yt.service"/>

	<!--配置数据源-->
	<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>

	<!--配置SqlSessionFactory,完成Spring与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文件的位置(有mapper.xml就要)-->
		<property name="mapperLocations" value="classpath:org/yt/mapper/*.xml"></property>
	</bean>

	<!--配置扫描器,将Mybatis接口的实现加入到ioc容器中(拦截类生成代理对象)-->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<!--扫描所有持久层接口的实现,加入到IoC容器中-->
		<property name="basePackage" value="org.yt.mapper"></property>
	</bean>
	
	<!-- 配置一个可以执行批量的sqlSession -->
	<!--<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">-->
		<!--<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"></constructor-arg>-->
		<!--<constructor-arg name="executorType" value="BATCH"></constructor-arg>-->
	<!--</bean>-->

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

	<!--配置事务增强,事务如何切入  -->
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<!--以count开始的所有方法  -->
			<tx:method name="count*" read-only="true"/>
			<!--以list开始的所有方法  -->
			<tx:method name="list*" read-only="true"/>
			<!--以get开始的所有方法  -->
			<tx:method name="get*" read-only="true"/>
			<!-- 所有方法都是事务方法 -->
			<tx:method name="*" propagation="REQUIRED"/>
		</tx:attributes>
	</tx:advice>

	<!--开启基于注解的事务,使用xml配置形式的事务(主要使用配置式,在类上打@Transactional也可以实现)  -->
	<aop:config>
		<!-- 切入点表达式 -->
		<aop:pointcut id="txPoint" expression="execution(* org.yt.service.impl..*(..))"/>
		<!-- 配置事务增强 -->
		<aop:advisor advice-ref="txAdvice" pointcut-ref="txPoint"/>
	</aop:config>
	
</beans>

以上是applicationContext.xml的完整内容

jdbc.jdbcUrl=jdbc:mysql://localhost:3306/数据库的名称
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.user=用户名
jdbc.password=密码

以上是dbconfig.properties的完整内容

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

    <!--SpringMVC只扫描controller层-->
    <context:component-scan base-package="org.yt.controller"/>

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

    <!-- 将SpringMVC不能处理的请求交给tomcat-->
    <mvc:default-servlet-handler/>

    <!--完成注解开启,处理器映射器、处理器适配器注册-->
    <mvc:annotation-driven/>

</beans>

以上是springmvc.xml的内容,至此配置文件部分补充完毕

WEB容器配置

此处WEB容器为tomcattomcat是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,调整WEB容器的配置即修改WEB-INF文件夹下的web.xml文件内容

tomcat
下面时web.xml中的完整内容

<?xml version="1.0" encoding="UTF-8"?>
<web-app
        version="3.0"
        xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

  <!--1、启动Spring的容器,前提是要开启ContextLoaderListener(并加入log4j)  -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
  </context-param>

  <context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>classpath:log4j.properties</param-value>
  </context-param>

  <!-- 启用ContextLoaderListener监听器 -->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

  <!--2、SpringMVC的前端控制器,拦截所有请求,所有请求通过DispatcherServlet处理分发  -->
  <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <!--这里param-name 必须是contextConfigLocation 否则会抛出异常-->
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.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>

  <!-- 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>

  <!-- 4、使用Rest风格的URI,将页面普通的post请求转为指定的delete或者put请求 -->
  <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>
  <filter>
    <filter-name>HttpPutFormContentFilter</filter-name>
    <filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>HttpPutFormContentFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

</web-app>

测试API

至此我们完成了SSM的配置与整合,开始完成测试API的编码,此处仅展示查询所有的编码内容,其余请前往查看本人的github。下面是本项目的项目结构

项目结构

1.持久层代码

 /**
  * position:UserMapper.java
  * 查询所有用户信息
  * @return
  */
    List<User> listAllUsers();
  <!--position:UserMapper.xml-->
  <!--1.查询所有用户-->
  <select id="listAllUsers" resultType="org.yt.entity.User">
    SELECT id,username,password,age FROM `user`
  </select>

2.业务层代码

 /**
  *position:UseService.java
  * 查询所有用户
  * @return
  */
 List<User> listAllUsers();
    /**
     *position:UseServiceImpl.java
     * 查询所有用户
     * @return
     */
    @Override
    public List<User> listAllUsers() {
        List<User> userList = userMapper.listAllUsers();
        return userList;
    }

3.控制器层代码

 /**
  * 查询所有用户
  * @return
  */
   @GetMapping("/queryAll")
   public List<User> showAllUsers(){
       return userService.listAllUsers();
   }

API测试

利用PostMan向服务器发送请求,GET http://localhost:8080/user/queryAll,可获取数据库所有用户信息

postman测试查询所有通过
至此所有的配置完成且测试通过,ending~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值