SSM整合流程

SSM整合流程

咸鱼了好几天,在写一个ssm整合的文件上传,显示管理的小案例。
这篇文章,用来记录ssm整合中遇到解决的坑!


SSM

SS整合spring jdbc模板

步子一步一步走,先不整合Mybatis,使用spring jdbc模板,把SS的整合先搞明白!

1. 依赖

maven项目第一步,添加依赖

要添加的依赖很多:
spring系列的,核心包,aop,beans,aspects,context,context-support,tx,expression,jdbc
springMvc的,web,webmvc

<dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</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-aspects</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-aop</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-expression</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-webmvc</artifactId>
      <version>${spring.version}</version>
</dependency>
<dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>${spring.version}</version>
</dependency>

支持jsp页面使用的jar包依赖

<dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
      <scope>provided</scope>
</dependency>
<dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.0</version>
      <scope>provided</scope>
</dependency>
<dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
      <scope>runtime</scope>
</dependency>
<dependency>
      <groupId>taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>1.1.2</version>
    </dependency>
</dependencies>

数据库驱动,这里用mysql所以是mysql的驱动

<dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.35</version>
</dependency>

这是不整合mybatis,之后整合mybatis的会增加jar包

2. 配置文件的编写

需要自己创建4个配置文件,配置5个配置文件,因为web.xml是本来就存在的。
配置顺序(个人认为):web.xml -> applicationContext.xml(spring配置文件) -> springmvc.xml(spring配置文件) -> jdbc.propertis(数据库4大件配置) -> mybatis.xml(如果集成mybatis的话)

web.xml配置

dtd约束

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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"
         id="WebApp_ID" version="3.0">

配置服务器启动加载spring配置文件(注册ContextLoaderListener)

<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

这个类命要记住,这个配置除了applicationContext.xml文件名不一定一致外其余均为可以理解为固定写法

配置springmvc的中央控制器

<servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <!--强制转码-->
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</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>

配置springmvc的中央控制器可以理解为配置一个servlet

配置中文乱码过滤器

<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>
</filter>
<filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
</filter-mapping>

配置jdbc.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/java?serverTimezone=UTC
jdbc.username=root
jdbc.password=yjb990828

配置applicationContext.xml(spring配置文件)

加载jdbc组件

<context:property-placeholder location="classpath:jdbc.properties"/>

配置数据源

c3p0

引入c3p0的jar包

<dependency>
      <groupId>com.mchange</groupId>
      <artifactId>c3p0</artifactId>
      <version>0.9.5.5</version>
</dependency>

配置数据源

<bean id="comboPooledDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="driverClass" value="${jdbc.driver}"/>
    <property name="jdbcUrl" value="${jdbc.url}"/>
    <property name="user" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
</bean>

spring内置的数据源

<bean id="driverManagerDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="${jdbc.driver}"/>
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
</bean>

注意spring内置数据源与c3p0在参数名称上有所不同,注入时注意区分

注册dao层(mybatis中这个工作会由mybatis完成)

注册dao
<bean id="accountDaoImpl" class="top.byfree.mapperper.impl.AccountMapperImpl">
    <property name="dataSource" ref="comboPooledDataSource"/>
</bean>
<bean id="fundDaoImpl" class="top.byfree.mapperper.impl.FundMapperImpl">
    <property name="dataSource" ref="comboPooledDataSource"/>
</bean>

因为是使用spring自带的jdbc模板,dao层的类会继承JdbcDaoSupport类,父类中需要注入数据源dataSource,这里是注册了两个dao层的类

注册组件扫描器

只需要扫描service的impl中的实现类即可,controller会在springmvc中进行扫描

<context:component-scan base-package="top.byfree.service.impl"/>

配置springmvc.xml

组件扫描器,扫描controller层

<context:component-scan base-package="top.byfree.controller"/>

注册注解驱动

<mvc:annotation-driven/>

注册视图解析器

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/view/"/>
        <property name="suffix" value=".jsp"/>
</bean>

静态资源访问问题解决

<mvc:default-servlet-handler/>

3. 使用springjdbc模板编写dao层代码


public class Jojo extends JdbcDaoSupport {

    public int update() {
        JdbcTemplate jdbcTemplate = this.getJdbcTemplate();
        String sql = "update fund set fname=弟弟  where fid=1";
        int update = jdbcTemplate.update(sql);
        return update;
    }
}

类体继承JdbcDaoSupport, 方法使用this获取JdbcTemplate对象
调用对象下的方法,来执行sql语句,返回结果集即可

整合mybatis

1. 依赖

<dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.4</version>
</dependency>
<dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>2.0.4</version>
</dependency>

需要额外引入mybatis和mybatis-spring

2. 配置文件

编写和添加mybaits.xml配置文件

<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

   <!--日志常量-->
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
    <!--起别名-->
    <typeAliases>
        <package name="top.byfree.pojo"/>
    </typeAliases>
    <!--注册映射文件-->
    <mappers>
        <package name="top.byfree.mapper"/>
    </mappers>
</configuration>

我的理解是,核心的功能都交给spring的ioc容器管理了
剩下一些,设置会使用mybaits.xml配置文件完成

配置spring管理mybatis

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="driverManagerDataSource"/>
    <property name="configLocation" value="classpath:mybatis.xml"/>
    <property name="typeAliasesPackage" value="top.byfree.pojo"/>
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    <property name="basePackage" value="top.byfree.mapper"/>
</bean>

注册sqlSessionFactoryBean
获取MapperScannerConfigurer代理对象,我理解为扫描mapper层

进行开发

接下来的所有事情就会简单很多
mapper层的操作,可以使用注解也可以使用映射xml文件配置实现
service只需要使用@Autowired或者@Resource注解注入,又或是在applicationContext.xml中用配置的方式注入
controller层,使用mvc中的注解,或者是配置xml方式都可以


2020/5/1:13.33
这次真是咸鱼了很久,有很多原因吧!接下来会认真学习的,加油!
考虑了很久,是进行shiro还是先springboot,还有最近还想开一个算法的坑,根据《算法第四版》这本书。但是看了看又放了回去果然看书对我还是太难了,现在天天在家太浮躁了,回学校再考虑吧。

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://www.byfree.top/archives/ssm