SSM整合(一)SSM介绍、搭建SSM开发环境

SSM介绍

SSM 编程,即 SpringMVC + Spring + MyBatis 整合,是当前最为流行的JavaEE 开发技术架构。其实 SSM 整合的实质,仅仅就是将 MyBatis整合入 Spring。因为 SpringMVC原本就是 Spring的一部分,不用专门整合。
MyBatis对应Dao持久层
Spring对应Service业务层,管理Service对象
SpringMVC对应界面层(视图层)和用户打交道
SSM整合就是把三个框架整合到一个项目中,每一层对应一个框架
SSM 整合的实现方式可分为两种:基于 XML 配置方式,基于注解方式。

SSM整合开发的思路

SpringMVC:视图层,界面层,负责接收请求,显示处理结果的。
Spring:业务层,管理service,dao,工具类对象的。
MyBatis:持久层, 访问数据库的

三层的工作方式:用户发起请求–SpringMVC接收–Spring中的Service对象–MyBatis处理数据

SSM整合也叫做SSI (IBatis也就是mybatis的前身), 整合中有容器(2个容器)。
1.第一个容器SpringMVC容器, 管理Controller控制器对象的。
2.第二个容器Spring容器,管理Service,Dao,工具类对象的
我们要做的把使用的对象交给合适的容器创建,管理。springmvc管理controller,而controller是与web相关,所以 把Controller还有web开发的相关对象交给springmvc容器, 这些web用的对象写在springmvc配置文件中
service,dao对象定义在spring的配置文件中,让spring管理这些对象。

既然有两个容器,SpringMVC容器和Spring容器是独立的,当SpringMVC接到请求需要通过Controller访问Service和Dao,Spring容器中有service和Dao,那么service是可以直接访问Dao的,Dao也可以访问Service,Controller怎么访问Service和Dao呢,SpringMVC容器和Spring容器是独立的,怎么让一个容器中的Controlle访问另一个容器的Service和Dao呢。如果这两个容器没有任何关联肯定是做不到的。
事实上springmvc容器和spring容器是有关系的,关系已经确定好了。
springmvc容器是spring容器的子容器, 类似java中的继承。 子可以访问父的内容
在子容器中的Controller可以访问父容器中的Service对象, 就可以实现controller使用service对象

SSM整合的实现步骤

0.在mysql下创建表student(id auto_increment, name, age)
1.新建maven web项目
2.加入依赖
springmvc,spring,mybatis三个框架的依赖,jackson依赖,mysql驱动,druid连接池
jsp,servlet依赖

3.写web.xml
1)注册DispatcherServlet ,目的:
1.创建springmvc容器对象,才能创建Controller类对象。
2.创建的是Servlet,才能接受用户的请求。

2)注册spring的监听器:ContextLoaderListener,目的: 创建spring的容器对象,才能创建service,dao等对象。

3)注册字符集过滤器,解决post请求乱码的问题

4.创建包, Controller包, service ,dao,实体类包名创建好

5.写springmvc,spring,mybatis的配置文件
1)springmvc配置文件
2)spring配置文件
3)mybatis主配置文件
4)数据库的属性配置文件

6.写代码, dao接口和mapper文件, service和实现类,controller, 实体类。
7.写jsp页面

SSM整合的工程实现

0.在mysql下创建表student(id auto_increment, name, age)
1.新建maven web项目
2.加入依赖
springmvc,spring,mybatis三个框架的依赖,jackson依赖,mysql驱动,druid连接池
jsp,servlet依赖

<!--servlet-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>
    <!-- jsp 依赖 -->
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.2.1-b03</version>
      <scope>provided</scope>
    </dependency>
    <!--springmvc-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>
    <!--事务的-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>
    <!--aspectj 依赖-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aspects</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>
    <!--jackson-->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.9.0</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.0</version>
    </dependency>
    <!--mybatis 和 spring 整合的-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.3.1</version>
    </dependency>
    <!--mybatis-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.1</version>
    </dependency>
    <!--mysql 驱动-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.9</version>
    </dependency>
    <!--druid-->
    <dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
      <version>1.1.12</version>
    </dependency>

资源和插件

<resources>
 <resource>
 <directory>src/main/java</directory><!--所在的目录-->
 <includes><!--包括目录下的.properties,.xml 文件都会扫描到-->
 <include>**/*.properties</include>
 <include>**/*.xml</include>
 </includes>
 <filtering>false</filtering>
 </resource>
 </resources>
 <plugins>
 <plugin>
 <artifactId>maven-compiler-plugin</artifactId>
 <version>3.1</version>
 <configuration>
 <source>1.8</source>
 <target>1.8</target>
 </configuration>
 </plugin>
</plugins>

在web.xml注册中央调度器

<!--  注册中央调度器-->
  <servlet>
    <servlet-name>myweb</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

    <!--自定义springmvc读取的配置文件的位置-->
    <init-param>
      <!--springmvc的配置文件的位置的属性-->
      <param-name>contextConfigLocation</param-name>
      <!--指定自定义文件的位置-->
      <param-value>classpath:conf/DispatcherServletSpringMVC.xml</param-value>
    </init-param>

    <!--在tomcat启动后,创建Servlet对象
        load-on-startup:表示tomcat启动后创建对象的顺序。它的值是整数,数值越小,
                        tomcat创建对象的时间越早。 大于等于0的整数。
    -->
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>myweb</servlet-name>
    <!--
        使用框架的时候, url-pattern可以使用两种值
        1. 使用扩展名方式, 语法 *.xxxx , xxxx是自定义的扩展名。 常用的方式 *.do, *.action, *.mvc等等
           不能使用 *.jsp
           http://localhost:8080/myweb/some.do
           http://localhost:8080/myweb/other.do

        2.使用斜杠 "/"
    -->
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>

在这里插入图片描述

在web.xml注册监听器

<!--注册监听器-->
<!--指定自定义spring配置文件的位置-->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:conf/ApplicationContextSpring.xml</param-value>
  </context-param>


<listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

在web.xml注册字符集过滤器

<!--注册字符集过滤器-->
  <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>
    <!--强制请求对象(HttpServletRequest)使用encoding编码的值-->
    <init-param>
      <param-name>forceRequestEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
    <!--强制应答对象(HttpServletResponse)使用encoding编码的值-->
    <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>

定义好包结构,目的:把程序中的类安置好位置
domain:实体类
在这里插入图片描述

编写配置文件
1)springMVC配置文件
要用注解方式写项目,首先想到组件扫描器、视图解析题

<!--    声明组件扫描器-->
    <!-- com.bipowernode.controller这个包放的是controller注解   -->
<context:component-scan base-package="com.bipowernode.controller"/>
    
     <!--    声明视图解析器-->
 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
               <!--配置前缀和后缀-->
    <property name="prefix"  value="/WEB-INF/jsp/"/><!--/WEB-INF/jsp/这个路径是自己定义的-->
<property name="suffix" value=".jsp"/>
<!--     用value赋值是因为我们用的set注入,prefix和suffix都是字符串类型的,所以赋值用value-->

  </bean>

创建视图解析器用到的目录

在这里插入图片描述

配置注解驱动
因为响应Ajax请求返回json要用到这个驱动、处理静态资源访问问题也要用注解驱动

<!--    配置注解驱动-->
<!--    因为响应Ajax请求返回json要用到这个驱动、处理静态资源访问问题也要用注解驱动-->
<mvc:annotation-driven/>

我们选结尾是mvc这个
在这里插入图片描述

2)Spring配置文件
声明数据源、连接数据库
一想到连接数机库,我们应该把访问数据库的url、用户名、密放在单独的文件中管理,名称自定义,在conf目录下创建一个jdbc.properties文件

对于mysql5.版本,这样配置就行了(根据自己的情况修改端口号、数据库、用户名、密码)

jdbc.url=jdbc:mysql://localhost:3306/ssm
jdbc.username=root
jdbc.password=root在这里插入代码片

在Spring配置文件-声明jdbc配置文件的位置声明数据源、连接数据库

<!--声明jdbc配置文件的位置-->
<context:property-placeholder location="classpath:conf/jdbc.properties"/>
    <!--声明数据源、连接数据库-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
</bean>

然后我们可以先把项目发布到Tomcat服务器,看看有没有错,没错了,再继续往下写,防止大量的错误堆积

创建MyBatis的SqlSessionFactory

<!--    创建MyBatis的SqlSessionFactory-->
<!--声明SqlSessionFactoryBean的目的是创建SqlSessionFactory-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
<!--        这里两个dataSource虽然一样,但是 name="dataSource"对应的是set方法的部分,
ref="dataSource对应的是上面声明数据源、连接数据库时的id="dataSource"
把声明数据源、连接数据库时的id="dataSource"的对象赋值给ref="dataSource",再把这个对象赋值给dataSource"-->
<property name="configLocation" value="classpath:conf/mybatis.xml"/>
<!--   mybatis.xml也是自己定义的文件,名字随意     -->
    </bean>

那么我们需要创建mybatis.xml
Mybatis的配置文件不像Spring的配置文件,在Maven当中添加过依赖之后就可以在下面这个地方打开,需要自己去手动去编写配置文件,但是自己编写的话会记不住要引入的DTD,所以就需要自己创建一个模板。
在这里插入图片描述

添加模板过程请访问我的文章

IDEA-创建MyBatis配置文件模板

Mybatis配置文件

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

<configuration>
    <properties resource=""></properties>
    <typeAliases>
        <!--name:实体类所在的包名 (不是实体类的包名也可以,因为只是起个别名而已,愿意用谁就用谁,大多数情况下是实体类所在的包名-->

        <package name="com.bjpowernode.domain"/>
</typeAliases>
 <mappers>
       <package name="com.bjpowernode.dao"/>
    </mappers>

</configuration>

声明mybatis的扫描器,创建Dao对象

   <!--    声明mybatis的扫描器,创建Dao对象-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="SqlSessionFactoryBeanName" value="sqlSessionFactory"/><!--value="sqlSessionFactory"对应上面的 id="sqlSessionFactory-->
<property name="basePackage" value="com.bipowernode.dao"/>
    </bean>

声明service的注解

 <!--声明service的注解,也就是@Service所在的包名位置-->
<context:component-scan base-package="com.bipowernode.service"/>
<!--    事务配置,可以用注解的配置或者是Aspectj的配置-->

好了,到这配置基本完成,我们运行试试呢
在这里插入图片描述

运行成功,配置没有问题

总结

在公司中,一般是有人专门做这种配置,可能是项目的小组长,负责人,或者技术比较好的,之后就会把配置好的工程放到公司的服务器上,Git是现在非常流行的一种版本管理工具,我们通过GIt从服务器把代码克隆下来,不同的人完成不同的功能

附件

链接:ch07-ssm-项目配置骨架
提取码:8m5e

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值