【Java】SSM框架整合 附源码 前言 项目目录 添加依赖包 创建数据库和数据表 新建数据库对应的实体类 新建Mapper.xml文件和Mapper接口(Dao层) Mybatis配置文件 Spring MVC配置文件 Spring 配置文件 编写Service层 编写Controller层 编写View层 配置Web.xml 运行测试

【Java】SSM框架整合 附源码
前言
项目目录
添加依赖包
创建数据库和数据表
新建数据库对应的实体类
新建Mapper.xml文件和Mapper接口(Dao层)
Mybatis配置文件
Spring MVC配置文件
Spring 配置文件
编写Service层
编写Controller层
编写View层
配置Web.xml
运行测试

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

项目目录

【Java】SSM框架整合 附源码
前言
项目目录
添加依赖包
创建数据库和数据表
新建数据库对应的实体类
新建Mapper.xml文件和Mapper接口(Dao层)
Mybatis配置文件
Spring MVC配置文件
Spring 配置文件
编写Service层
编写Controller层
编写View层
配置Web.xml
运行测试

添加依赖包

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框架整合 附源码
前言
项目目录
添加依赖包
创建数据库和数据表
新建数据库对应的实体类
新建Mapper.xml文件和Mapper接口(Dao层)
Mybatis配置文件
Spring MVC配置文件
Spring 配置文件
编写Service层
编写Controller层
编写View层
配置Web.xml
运行测试【Java】SSM框架整合 附源码
前言
项目目录
添加依赖包
创建数据库和数据表
新建数据库对应的实体类
新建Mapper.xml文件和Mapper接口(Dao层)
Mybatis配置文件
Spring MVC配置文件
Spring 配置文件
编写Service层
编写Controller层
编写View层
配置Web.xml
运行测试

编写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框架整合 附源码
前言
项目目录
添加依赖包
创建数据库和数据表
新建数据库对应的实体类
新建Mapper.xml文件和Mapper接口(Dao层)
Mybatis配置文件
Spring MVC配置文件
Spring 配置文件
编写Service层
编写Controller层
编写View层
配置Web.xml
运行测试

源码下载:SSM整合例子

转自:ddnd.cn/2018/12/16/…