Spring-SSM整合详细版本

265 阅读2分钟

我会把所有步骤全部记录下来。好记性不如烂笔头。光看感觉没啥感觉。还是手动来一遍记录吧。奥利给。

1.创建项目

创建项目 都是用的maven最基本的创建方式 截屏2022-02-21 下午3.11.55.png

image.png

image.png

修改成web项目[ POM.xml ]

打包方式

<!-- 打包 -->
<packaging>war</packaging>

项目编码

<!-- 设置编码 -->
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

依赖库

根据具体情况来

<!-- 依赖 -->
<dependencies>
   <!-- Servlet + JSP -->
   <dependency>
       <groupId>javax.servlet</groupId>
       <artifactId>javax.servlet-api</artifactId>
       <version>4.0.1</version>
       <scope>provided</scope>
   </dependency>
   <dependency>
       <groupId>javax.servlet.jsp</groupId>
       <artifactId>javax.servlet.jsp-api</artifactId>
       <version>2.3.3</version>
       <scope>provided</scope>
   </dependency>

   <!-- Log -->
   <dependency>
       <groupId>ch.qos.logback</groupId>
       <artifactId>logback-classic</artifactId>
       <version>1.2.3</version>
   </dependency>

   <!-- Spring + SpringMVC -->
   <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-webmvc</artifactId>
       <version>5.2.8.RELEASE</version>
   </dependency>
   <dependency>
       <groupId>org.aspectj</groupId>
       <artifactId>aspectjweaver</artifactId>
       <version>1.9.6</version>
   </dependency>
   <dependency>
       <groupId>org.aspectj</groupId>
       <artifactId>aspectjrt</artifactId>
       <version>1.9.6</version>
   </dependency>
   <dependency>
       <groupId>com.fasterxml.jackson.core</groupId>
       <artifactId>jackson-databind</artifactId>
       <version>2.11.0</version>
   </dependency>

   <!-- MyBatis -->
   <dependency>
       <groupId>org.mybatis</groupId>
       <artifactId>mybatis</artifactId>
       <version>3.5.5</version>
   </dependency>
   <dependency>
       <groupId>org.mybatis</groupId>
       <artifactId>mybatis-spring</artifactId>
       <version>2.0.5</version>
   </dependency>
   <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-jdbc</artifactId>
       <version>5.2.8.RELEASE</version>
   </dependency>
   <dependency>
       <groupId>mysql</groupId>
       <artifactId>mysql-connector-java</artifactId>
       <version>5.1.49</version>
   </dependency>
   <dependency>
       <groupId>com.alibaba</groupId>
       <artifactId>druid</artifactId>
       <version>1.1.22</version>
   </dependency>

   <!-- junit -->
   <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
       <version>4.13</version>
       <scope>test</scope>
   </dependency>
</dependencies>

项目结构 核心配置文件[web.xml]

因为在 pom.xml 中配置了打包方式 war 所有已经是web项目啦

按快捷键 进入 项目配置中

初始界面

image.png

添加 web.xml (修改路径哦)

image.png

src/main/webapp

image.png

image.png

image.png

创建目录

image.png

效果

image.png

2.启动web

创建index.jsp

在webapp下面创建 index.jsp

配置tomact

image.png

配置 Application Context

image.png

启动小虫子 debug

image.png

3.业务创建

创建domain

Skill 类

private Integer id;
private Date createdTime;
private String name;
private Integer level;

创建dao层

创建 接口 interface 接口 因为用mybatis

boolean save(Skill skill);
boolean update(Skill skill);
boolean remove(Integer id);
@Select("SELECT * FROM skill")
List<Skill> list();
@Select("SELECT * FROM skill WHERE id = #{id}")
Skill get(Integer id);

创建 xml 在 resources 下面创建 mappers文件夹 创建文件 skill.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mj.dao.SkillDao">
    <insert id="save" parameterType="com.mj.domain.Skill">
        INSERT INTO skill(name, level) VALUES (#{name}, #{level})
    </insert>

    <update id="update" parameterType="com.mj.domain.Skill">
        UPDATE skill SET name = #{name}, level = #{level} WHERE id = #{id}
    </update>

    <delete id="remove" parameterType="int">
        DELETE FROM skill WHERE id = #{id}
    </delete>
</mapper>

创建applicationContext.xml

image.png

image.png

image.png

mybatis的的 SqlSessionFatoryBean

  • 引入一个配置文件用于数据库方面的驱动
# jdbc
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/xr
jdbc.username=root
jdbc.password=root
  • applicationContext.xml添加
<!-- 数据源(Druid) -->
<context:property-placeholder location="classpath:main.properties"/>
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
    <property name="driverClassName" value="${jdbc.driverClassName}"/>
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="mapperLocations" value="classpath:mappers/*.xml"/>
</bean>
<bean id="configurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    <property name="basePackage" value="com.mj.dao"/>
</bean>

Test测试一波

image.png

4.返回json

先把service、controller层代码搞好

记得注入哦

创建 dispatcherServlet.xml

把自定义注意的包 记得扫描一下 在 applicationContext.xml 添加

<context:component-scan base-package="com.mj.service"/>

在 dispatcherServlet.xml 添加

<context:component-scan base-package="com.mj.controller"/>

web.xml 配置 DispatcherServlet (父子容器)

<servlet>
    <servlet-name>DispatcherServlet</servlet-name>
    <!--默认会加载 /WEB-INF/${servlet-name}-servlet.xml-->
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--主动读取配置xml文件-->
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <!-- 子容器 -->
        <param-value>classpath:dispatcherServlet.xml</param-value>
    </init-param>
    <!--项目一部署到web容易中,就创建servlet,去初始化IoC容器-->
    <load-on-startup>0</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>DispatcherServlet</servlet-name>
    <!--拦截所有请求-->
    <url-pattern>/</url-pattern>
</servlet-mapping>

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

ContextLoaderListener 的作用就是启动Web容器时,自动装配 ApplicationContenxt.xml 的配置信息。因为它实现了ServletContextLister 这个接口,在 web.xml 配置这个监听器,启动容器时,就会默认执行它实现的方法。

web.xml 配置 POST请求乱码

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

dispatcherServlet.xml 配置响应数据乱码

<mvc:annotation-driven>
    <mvc:message-converters>
        <bean class="org.springframework.http.converter.StringHttpMessageConverter">
            <property name="defaultCharset" value="UTF-8"/>
        </bean>
        <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
            <property name="defaultCharset" value="UTF-8"/>
        </bean>
    </mvc:message-converters>
</mvc:annotation-driven>

MyBatis 补充

如果将 Mapper 文件跟 dao 放在相同目录下,且文件名跟dao 一样

  • 那么 通过MapperScannerConfigurer 就可以找到 Mapper文件
  • 不需要再配置 SqlSessionFactoryBean 的 mapperLocations 属性

方案: 名字保持一致

image.png

创建 mybatis-config.xml

<?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>
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
</configuration>

配置 configLocation

<!--        <property name="mapperLocations" value="classpath:mappers/*.xml"/>-->
<property name="configLocation" value="classpath:mybatis-config.xml"/>

Maven 补充 (配合 Mabatis 补充)

默认情况下,Maven并不会讲源代码文件夹中的配置文件打包 所以要配置

  • 配合Dao层的xml放在和dao层一个文件夹中问题
<build>
    <!-- 说明资源的位置(哪些东西算是资源) -->
    <resources>
        <!-- 第一个位置 -->
        <resource>
            <directory>src/main/resources</directory>
        </resource>
        <!-- 第二个位置 -->
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
        </resource>
    </resources>
</build>

解决问题

xml中属性报红

一般druid 的属性也有问题 解决方案是

image.png

这样解决不了问题 我重新新建项目了 可以了 并且提示了 是不是网问题呢