SSM框架web项目入门教程 IDEA版

一、简介

        SSM框架是常用的web项目框架。由spring、springMVC、mybatis框架整合而来。是标准的MVC模式,将整个系统分成表现层、controller层、service层和dao层。

        Spring有两个特性:控制反转(IOC)和面向切面编程(AOP)。即对象的创建、初始化与销毁交给spring核心模块来管理。开发者只需专注于业务逻辑模块部分即可。

        SpringMVC是一款基于MVC架构模式的轻量级Web框架,使用请求一相应模型。由于Spring MVC遵循MVC架构规范,因此分层开发数据模型层(Model)、相应视图层(View)和控制层(Controller),可以让开发者设计出架构规整的Web层。

        Mybatis是Apache的一个开源Java项目,原名ibatis。是一款支持动态sql语句的持久层框架,开发人员可以将更多精力集中在sql语句上。Mybatis将sql语句配置在XML文件中,通过Mybatis提供的输入参数映射方式,将参数自由灵活的配置到配置文件中的sql语句中。通过Mybatis的输出映射机制,将结果集的检索自动映射成相应的Java对象。

二、运行流程

  1. 用户发送请求到Dispatcherservlet(分发器)
  2. 由DispacherServlet控制器查询HandleMapping,找到处理请求的Controller3
  3. Controller调用service业务逻辑层处理后,返回结果。

SSM框架web项目入门教程 IDEA版_第1张图片

 三、开发流程

    1.启动IDEA,创建Maven项目

        项目结构如图:

SSM框架web项目入门教程 IDEA版_第2张图片

     项目结构简介:

        .idea文件夹内放有idea的一些配置文件,不用理会

        src文件夹将放置项目的主要类

        pom.xml文件是Maven的配置文件,在里面添加我们需要的jar包的依赖,然后Maven就会帮我们下载到本地仓库。

2.根据项目所需创建文件的具体结构

    咱们的目的是创建一个小型的用户查询网页,即用户输入账号,系统返回邮箱信息。

     2.1设计数据库

        本次只需建一个很简单的表

     2.2为项目添加依赖

        确定好工程需要的依赖后,就需要向Maven的pom.xml文件添加这些依赖。

        在Pom.xml中添加spring,mybatis,日志的依赖,代码过长,就不展示了。

     2.3创建存放各层的文件夹

SSM框架web项目入门教程 IDEA版_第3张图片

    2.4创建日志和数据库的配置文件

SSM框架web项目入门教程 IDEA版_第4张图片

 SSM框架web项目入门教程 IDEA版_第5张图片

     2.5创建Mybatis的基础配置文件“SqlMapConfig.xml”

SSM框架web项目入门教程 IDEA版_第6张图片

    2.6配置数据库连接池及事务管理的类加载文件beans.xml

SSM框架web项目入门教程 IDEA版_第7张图片

    2.7编写Spring MVC核心配置文件,配置Controller的扫描、处理器映射器和处理器适配器、视图解析器前后缀,以及拦截器、上传下载

SSM框架web项目入门教程 IDEA版_第8张图片

        该配置主要是针对Spring MVC的。首先开发人员编写的处理器Controller类要暴露注释让Spring扫描并加载,所以一开始配置了Controller扫描的机制。然后配置视图解析器“jspViewResolver”,为了Controller在返回视图时路径简单,这里配置了视图路径的前缀prefix及后缀suffix.这里使用基于注解的映射器和适配器,“annotation-driven”表明可以使用Spring MVC提供的默认配置。后面的拦截器、文件上传解析器在用到时再配置(以后可能还要配置校验机制,拓展性比较好)

总结:Spring配置文件主要处理Bean注入、数据源、事务等,Spring MVC 主要配置Controller扫描、处理器适配器、拦截器及其他MVC模式等。

    2.8创建页面文件所需要的样式、脚本及图片文件夹

SSM框架web项目入门教程 IDEA版_第9张图片

SSM基本环境配置完毕。

3.编写代码

    3.1测试连接数据库

package db;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.jupiter.api.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class DBConnection {
    //Mybatis配置文件
    private String resource="beans.xml";
    private SqlSessionFactory sqlSessionFactory;
    private SqlSession sqlSession = null;

    @Test
    public void testConnection(){
        //获取spring类加载对象
        ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext(resource);
        //从配置对象中创建会话工厂,并注入Mybatis配置文件的信息
        sqlSessionFactory = (SqlSessionFactory) classPathXmlApplicationContext.getBean("sessionFactory");
        sqlSession = sqlSessionFactory.openSession();
        if (sqlSession!=null){
            System.out.println("Mybatis-数据库连接成功!");
        }else {
            System.out.println("连接失败");
        }
    }
}

SSM框架web项目入门教程 IDEA版_第10张图片

         出现这个结果,代表前面的Mybatis基本配置环境是正确的。

    3.2编写实体类User,Mapper的映射文件UserMapper.xml,在其中加入一个通过名称获取用户信息的SQL配置。

package entity;

public class User {
    private String sname;
    private String email;

    public User() {
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

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

    public String getSname() {
        return sname;
    }

    public String getEmail() {
        return email;
    }
}




    

        在beans.xml配置文件中为sessionFactory对象注入了mapperLocation参数,并在其中设置了扫描Mapper配置文件的路径。所以SqlSessionFactory会话工厂类能够搜索到Mapper文件并加载其中的SQL配置。

3.3修改数据库连接测试类DBConnectionTest,使用获取的sqlSession会话对象查询名称为“张三”的用户信息。

package db;

import entity.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.jupiter.api.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class DBConnection {
    //Mybatis配置文件
    private String resource="beans.xml";
    private SqlSessionFactory sqlSessionFactory;
    private SqlSession sqlSession = null;

    //获取sqlSession
    public SqlSession getSqlSession() throws Exception{
        //获取spring类加载对象
        ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext(resource);
        //从配置对象中创建会话工厂,并注入Mybatis配置文件的信息
        sqlSessionFactory = (SqlSessionFactory) classPathXmlApplicationContext.getBean("sessionFactory");
        sqlSession = sqlSessionFactory.openSession();
        return sqlSession;
    }

    @Test
    public void testConnection() throws Exception {

        sqlSession = getSqlSession();
        User user = sqlSession.selectOne("test.findUserByName","zhangsan");
        System.out.println("取出的用户信息");
        System.out.println(user.getSname());
        System.out.println(user.getEmail());
    }
}

        执行代码,出现:

SSM框架web项目入门教程 IDEA版_第11张图片

        说明Mybatis依赖引入及基本配置是成功的。

    3.4测试Spring 的注入和切面功能有没有配置成功

    Dao层:

package dao;

import entity.User;

import java.util.List;

public interface TestDao {
    public List findUserByName(User user);
}

    Dao的实现层:

package daoIMPL;

import dao.TestDao;
import entity.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository//为了包扫描的时候这个Dao被扫描到,Dao层对外暴露自己bean的一种方式,对象名称为Dao接口的首字母小写的名称
public class TestDaoImpl implements TestDao {
    @Autowired//注入SqlSessionFactory,加载Spring的xml配置文件中的sqlSessionFactory会话工厂配置,获得一个注入有数据源的对象
    private SqlSessionFactory sqlSessionFactory;
    private SqlSession sqlSession=null;
    private SqlSession getSqlSession(){
        if (sqlSession==null){
            sqlSession = sqlSessionFactory.openSession();
        }
        return sqlSession;
    }

    @Override
    public List findUserByName(User user) {
        List uList = getSqlSession().selectList("test.findUserByName","%"+user.getSname()+"%");
        return uList;
    }
}

    service层:

package service;

import entity.User;

import java.util.List;

public interface TestService {
    public List findUserByName(User user);//调用Dao的姓名查询方法
}

    service实现层:

package serviceIMPL;

import dao.TestDao;
import entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import service.TestService;

import java.util.List;
@Service//暴露该实现类以供Controller使用
public class TestServiceImpl implements TestService {
    @Autowired
    private TestDao testDao;

    @Override
    public List findUserByName(User user) {
        return testDao.findUserByName(user);
    }
}

敲黑板:普通Spring项目要配置Service及Dao层的bean加载,用于指定接口对应的实现类,然后在相关的bean中注入,使用SSM框架不用配置bean加载,为了简化配置,使用注解来暴露和引入相关的Service及Dao对应的bean.

        为此,只需要在相关的service实现类上添加@Service注解,在相关的Dao实现类上添加@Repository注解,分别表示一个Service的暴露bean和一个Dao的暴露bean.例如Service实现类为“TestServiceImpl”,那么默认暴露出一个id为“testService”的bean配置(以接口名称首字母小写为准)。

        在其他类中引入暴露的bean时,使用@Resource注解并配置在成员变量或者set方法上部即可。例如TestServiceImpl要引入id为“testDao”的Dao层的bean对象,配置代码如下:

@Service
public class TestServiceImpl implements TestService{
    @Resource
    TestDao testDao;
}

注:关于"@Service"及“@Repository”的命名方式,只是为了区分业务层和数据库连接层,它们本质的原理(暴露实现类)是相同的。

    3.5在Controller层中也使用@Autowired注解注入Service的实现bean,在相关测试方法中调用该Service实现类的findUserByName方法。

package controller;

import entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import service.TestService;

import javax.jws.WebParam;
import javax.servlet.http.HttpServletRequest;
import java.util.List;

@Controller
public class TestController {
    @Autowired
    private TestService testService;

    @RequestMapping(value = "/findUser.action")
    private String findUser(User user, Model model, HttpServletRequest request){
        String sname = (String)request.getParameter("sname");
        user.setSname(sname);
        System.out.println("输入:" + user.getSname());
        user = (User) testService.findUserByName(user);
        model.addAttribute("user",user);
        System.out.println(user.getEmail());
        return "/test/showMessage.jsp";
    }
}

        Controller层利用@RequestMapping注解进行地址的映射。

    3.6编写jsp查询界面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Test


    
用户姓名:

    3.7编写查询成功后的返回界面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title



    <% User user = (User)request.getAttribute("user");%>
    姓名:<%=user.getSname()%>
    
邮箱:<%=user.getEmail()%>

       至此,项目编写完毕,剩下的就是调试运行了。一般第一次自己写SSM项目运行会遇到各种各样的坑,

4.配置运行环境

    4.1配置Tomcat

SSM框架web项目入门教程 IDEA版_第12张图片

SSM框架web项目入门教程 IDEA版_第13张图片         Tomcat的配置可参考网上的其他资料,这里不再过多阐述。

5.运行项目

SSM框架web项目入门教程 IDEA版_第14张图片

        这样就是启动成功了。

SSM框架web项目入门教程 IDEA版_第15张图片

         成功返回界面:

 SSM框架web项目入门教程 IDEA版_第16张图片

         这个SSM入门项目到此就结束了。

使用框架编程,入门很难,但掌握框架之后,使用就会很方便。

本博客参考自朱要光老师书籍《Spring MVC+Mybatis开发从入门到项目实战》

你可能感兴趣的:(Java)