【Java】SSM框架整合 附源码

栏目: Java · 发布时间: 5年前

内容简介:前面已经介绍Spring和Mybatis整合,而本篇介绍在IDEA下Spring、Spring MVC、Mybatis(SSM)三个框架的整合,在阅读本篇之前,建议大家先去了解一下Spring、Spring MVC、Mybatis(pom.xml:本文中使用Mysql,为了演示方便,仅创建个简单的数据库spring,还有数据表user。数据表创建SQL代码。
【Java】SSM框架整合 附源码

前面已经介绍Spring和Mybatis整合,而本篇介绍在IDEA下Spring、Spring MVC、Mybatis(SSM)三个框架的整合,在阅读本篇之前,建议大家先去了解一下Spring、Spring MVC、Mybatis( 三大框架基础入门传送门 ),会达到事半功倍的效果。至于Spring MVC相对于Servlet、JSP的优点这里就不累赘了,大家可以上网查阅相关资料。本篇注重整合思路、整合过程以及整合过程中出现的坑。

项目目录

【Java】SSM框架整合 附源码

添加依赖包

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>ddnd</groupId>
    <artifactId>ddnd</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <!-- spring版本号 -->
        <spring.version>4.2.5.RELEASE</spring.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>

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

        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.13</version>
        </dependency>

        <!-- 添加spring核心依赖 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</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-oxm</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-jdbc</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-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-test</artifactId>
            <version>${spring.version}</version>
        </dependency>

    </dependencies>

</project>
复制代码

创建数据库和数据表

本文中使用Mysql,为了演示方便,仅创建个简单的数据库spring,还有数据表user。数据表创建 SQL 代码。

CREATE TABLE `user` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `email` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
  `password` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `users_email_unique` (`email`)
) ENGINE=InnoDB AUTO_INCREMENT=240 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

复制代码

新建数据库对应的实体类

为了实现与数据库中的user表进行关系映射,这里新建一个User类:User.java

package cn.ddnd.www.Entity;

public class User {
    int id;
    String email;
    String password;

    public void setId(int id) {
        this.id = id;
    }

    public int getId() {
        return id;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPassword() {
        return password;
    }

    public String getEmail() {
        return email;
    }

}
复制代码

新建Mapper.xml文件和Mapper接口(Dao层)

这里注意Mapper.xml文件名要和Mapper接口的名字相同

1.Mapper接口:UserDao.java

package cn.ddnd.www.Dao;

import cn.ddnd.www.Entity.User;

public interface UserDao {
    public User getUserByEmail(String email);
}

复制代码

这里为了测试,仅编写一个接口,即通过用户email查询到用户的信息。

  1. Mapper.xml文件:UserDao.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="cn.ddnd.www.Dao.UserDao">
    <select id="getUserByEmail" resultType="User">
        select * from user where email = #{email}
    </select>
</mapper>
复制代码

这里需要注意用一下:我们使用的是IDEA,而IDEA默认是不编译 main/src/java 目录下的xml文件的,即在编译的时候不会把将这些xml一块打包进classes文件,而是 直接丢弃 。为了解决这个问题,有两种方法,1.将xml文件都放到 resources 目录下。2.配置maven的pom文件。这里我就用第一种方法,将mapper.xml文件都放到resources目录。

Mybatis配置文件

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>
    <typeAliases>
        <typeAlias type="cn.ddnd.www.Entity.User" alias="User"></typeAlias>
    </typeAliases>
</configuration>
复制代码

这里为 cn.ddnd.www.Entity.User 这个类设置个 User 的别名,这样直接使用 User 即可使用 cn.ddnd.www.Entity.User 这个类。

Spring MVC配置文件

Spring-mvc.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

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

这里配置个 InternalResourceViewResolver 解析器, prefix 属性指定资源文件的 前缀 ,因为我的资源文件就放在 web 目录下,所以我这个属性留空, suffix 属性配置资源页面的 后缀

Spring 配置文件

前面配置完Mybatis是不是觉得配置的代码很少、很简单?这是因为Mybatis的一些配置都放在Spring中配置啦!接下来看我们Spring的配置文件。 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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">

    <context:component-scan base-package="cn.ddnd.www"></context:component-scan>

    <!--配置数据源-->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://127.0.0.1:3306/spring?serverTimezone=GMT%2B8"></property>
        <property name="username" value="root"></property>
        <property name="password" value="root"></property>
    </bean>

    <!--配置Mybatis的SqlSessionFactory-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--注入连接池数据源配置-->
        <property name="dataSource" ref="dataSource"></property>
        <!--注入mybatis配置信息 注意加上classpath 不然编译出来后是找不到Mybatis-config.xml的文件的-->
        <property name="configLocation" value="classpath:Mybatis-config.xml"></property>
        <!--mapper.xml和mapper.java不在同一个目录 则配置此参数-->
        <property name="mapperLocations" value="classpath:mapper/*.xml"></property>
    </bean>

    <!--配置Mybatis的Mapper映射器 这个是指定接口配置-->
    <!--<bean id="userBean" class="org.mybatis.spring.mapper.MapperFactoryBean">-->
        <!--SqlSessionFactory是用来指定生成实现SqlSession接口的SqlSessionTemplate对象的-->
        <!--<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>-->
        <!--mapperInterface指定我们Mapper对应的接口-->
        <!--<property name="mapperInterface" value="cn.ddnd.www.Dao.UserDaoao"></property>-->
    <!--</bean>-->

    <!--扫描Mapper接口并注册为Bean 这个是通过扫描包来配置-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="cn.ddnd.www.Dao" />
    </bean>

</beans>
复制代码

applicationContext 配置了 Mybatis数据源SqlSessionFactoryMapper映射器 ,为了简便我们选择用扫描包的方式注册。 这里需要注意一下几点:

  1. 添加 mapperLocations 属性:因为我们把Mapper.xml文件和Mapper接口放在了不同的目录下,所以我们需要在配置Mybatis的 SqlSessionFactory 时候添加一个属性 mapperLocations ,即指定 mapper.xml 文件的路径。
  2. 启动扫描JavaBean: <context:component-scan base-package="cn.ddnd.www"></context:component-scan> 扫描指定包下的所有JavaBean,
  3. 添加XML命名空间: xmlns:context="http://www.springframework.org/schema/context" , xsi:schemaLocation="http://www.springframework.org/schema/context ,不然会出现通配符的匹配很全面, 但无法找到元素 'context:component-scan' 的声明的问题。
  4. 路径前添加classpath:在指定XML路径的时候,需要以 classpath:文件路径 的形式,不然会出现XML文件找不到的问题,因为工程编译后XML文件都是放在 classes 的文件夹下。
    【Java】SSM框架整合 附源码
    【Java】SSM框架整合 附源码

编写Service层

虽然前面已经编写了Dao层(UserDao)了,但是Dao层的工作主要是做数据持久化的,而Service层则负责业务模块的逻辑应用设计,Service调用已定义的Dao层的接口实现数据的持久化。

package cn.ddnd.www.Service;

import cn.ddnd.www.Dao.UserDao;
import cn.ddnd.www.Entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class Uservice {

    @Autowired
    UserDao userDao;

    public User getUserByEmail(String email) {
        return userDao.getUserByEmail(email);
    }
}
复制代码

编写Controller层

package cn.ddnd.www.Controller;

import cn.ddnd.www.Entity.User;
import cn.ddnd.www.Service.Uservice;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class IndexController {

    @Autowired
    Uservice uservice;

    @RequestMapping(value = "/")
    public ModelAndView Index(){
        User user;
        user = uservice.getUserByEmail("xue8@ddnd.cn");
        return new ModelAndView("index", "user", user);
    }
}
复制代码

这里自动装配Service层的Uservice,实现数据查询,查询结果将在View层显示。这里为了方便,默认查询email为 xue8@ddnd.cn 的用户信息。

编写View层

<%--
  Created by IntelliJ IDEA.
  User: xueba
  Date: 2018/11/29
  Time: 17:34
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>SSM整合</title>
  </head>
  <body>
    email:${user.email} <br>
    id:${user.id} <br>
    password:${user.password} <br>
  </body>
</html>

复制代码

将查询出来的用户信息显示出来。

配置Web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <servlet>
        <servlet-name>Spring</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:*.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>Spring</servlet-name>
        <url-pattern></url-pattern>
    </servlet-mapping>
</web-app>
复制代码

在Web.xml中配置 前端控制器 DispatcherServlet ,负责发送每个请求到合适的处理程序。


以上所述就是小编给大家介绍的《【Java】SSM框架整合 附源码》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Web Data Mining

Web Data Mining

Bing Liu / Springer / 2006-12-28 / USD 59.95

Web mining aims to discover useful information and knowledge from the Web hyperlink structure, page contents, and usage data. Although Web mining uses many conventional data mining techniques, it is n......一起来看看 《Web Data Mining》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码