这个厉害了,ssm框架整合全过程,建议收藏起来好好看看

1.0 环境要求

  • IDEA
  • MySQL 5.7.19
  • Tomcat 9
  • Maven 3.6

1.1 数据库

创建书籍数据库表,包括书籍编号,书籍名称,书籍数量以及书籍描述。

CREATE DATABASE `ssmbuild`;
USE `ssmbuild`;
DROP TABLE IF EXISTS `books`;
CREATE TABLE `books` (
`bookID` INT(10) NOT NULL AUTO_INCREMENT COMMENT '书id',
`bookName` VARCHAR(100) NOT NULL COMMENT '书名',
`bookCounts` INT(11) NOT NULL COMMENT '数量',
`detail` VARCHAR(200) NOT NULL COMMENT '描述',
KEY `bookID` (`bookID`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
INSERT INTO `books`(`bookID`,`bookName`,`bookCounts`,`detail`)VALUES
(1,'Java',1,'从入门到放弃'),
(2,'MySQL',10,'从删库到跑路'),
(3,'Linux',5,'从进门到进牢');

1.2 基本环境搭建

  1. 新建一Maven项目!ssmbuild,添加web的支持
  2. 导入相关的pom依赖和maven资源过滤


    4.0.0

    com.fanjh
    ssmbuild
    1.0-SNAPSHOT

    
    
        
        
            junit
            junit
            4.12
        

        
        
            mysql
            mysql-connector-java
            5.1.47
        

        
        
            com.mchange
            c3p0
            0.9.5.2
        

        
        
            javax.servlet
            servlet-api
            2.5
        
        
            javax.servlet.jsp
            jsp-api
            2.2
        
        
            javax.servlet
            jstl
            1.2
        

        
        
            org.mybatis
            mybatis
            3.5.2
        
        
            org.mybatis
            mybatis-spring
            2.0.2
        

        
        
            org.springframework
            spring-webmvc
            5.1.9.RELEASE
        
        
            org.springframework
            spring-jdbc
            5.1.9.RELEASE
        
        
            org.projectlombok
            lombok
            1.18.12
        
    

    
    
        
            
                src/main/java
                
                    **/*.properties
                    **/*.xml
                
                false
            
            
                src/main/resources
                
                    **/*.properties
                    **/*.xml
                
                false
            
        
    

注意:这里导包之后记得查看project structure中有无相关包,一般要手动导入
在这里插入图片描述

  1. 建立基本结构和框架:
  • com.fanjh.pojo
  • com.fanjh.dao
  • com.fanjh.service
  • com.fanjh.controller
  • mybatis-config.xml

这里给出最终结构
在这里插入图片描述

前端调用controller层, controller层调用service层,service层调用dao层

1.2 mybatis层编写

  1. 数据库配置文件database.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssmbuild?useSSL=false&useUnicode=true&characterEncoding=utf8
jdbc.username=root
jdbc.password=fjhmysql
  1. 连接数据库
  2. 编写mybatis核心配置文件:mybatis-config.xml



    
    

    
        
    

    
        
    

  1. 编写数据库对应实体类:com.fanjh.pojo.Books
    使用lombok插件
package com.fanjh.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Books {
    private int bookID;
    private String bookName;
    private int bookCounts;
    private String detail;
}
  1. 紧接着编写dao层的mapper接口
package com.fanjh.dao;

import com.fanjh.pojo.Books;
import org.apache.ibatis.annotations.Param;

import java.util.List;
//增删改查方法
public interface BookMapper {
    int addBook(Books book);

    int deleteBookById(@Param("bookId") int id);

    int updateBook(Books book);

    Books queryBookById(@Param("bookId") int id);

    List queryAllBook();
}
  1. 马上编写接口对应的Mapper.xml文件(对应sql语句), 需要注册到mybatis.xml





    
        insert into ssmbuild.books(bookName, bookCounts, detail)
        VALUES(#{bookName}, #{bookCounts}, #{detail})
    

    
        DELETE  from ssmbuild.books where bookID = #{bookId}
    

    
        update ssmbuild.books
        set bookName=#{bookName}, bookCounts=#{bookCounts}, detail=#{detail}
        where bookID=#{bookID};
    

    

    

至此,搞定dao层,接下来业务层。

  1. 编写Service层接口和实现类
    接口:
package com.fanjh.service;

import com.fanjh.pojo.Books;
import org.apache.ibatis.annotations.Param;
import java.util.List;

public interface BookService {
    int addBook(Books book);

    int deleteBookById(int id);

    int updateBook(Books book);

    Books queryBookById(int id);

    List queryAllBook();
}

实现类:

package com.fanjh.service;

import com.fanjh.dao.BookMapper;
import com.fanjh.pojo.Books;
import java.util.List;

public class BookServiceImpl implements BookService {
    //service层调dao层
    private BookMapper bookMapper;

    public void setBookMapper(BookMapper bookMapper) {
        this.bookMapper = bookMapper;
    }

    public int addBook(Books book) {
        return bookMapper.addBook(book);
    }

    public int deleteBookById(int id) {
        return bookMapper.deleteBookById(id);
    }

    public int updateBook(Books book) {
        return bookMapper.updateBook(book);
    }

    public Books queryBookById(int id) {
        return bookMapper.queryBookById(id);
    }

    public List queryAllBook() {
        return bookMapper.queryAllBook();
    }
}

可以看到,service层的方法都是直接调用dao层的方法,到此底层需求操作编写完毕。

1.3 spring层

  1. 配置Spring整合MyBatis,这里使用c3p0连接池。
  2. 编写Spring整合MyBatis相关配置文件:spring-dao.xml



    

    
    

    
    
        
        
        
        

        
        
        
        
        
        
        
        
        
    

    
    
        
        
        
        
    

    
    
    
        
        
        
        
    

  1. spring整合service层



    

    
    

    
    
        
    

    
    
        
        
    

至此,spring层搞定,spring就是个大容器,整合dao层和service层,也是实现了dao层和service层的分离——解耦。

1.4 springMVC层

  1. web.xml



    
    
        springmvc
        org.springframework.web.servlet.DispatcherServlet
        
            contextConfigLocation
            classpath:applicationContext.xml
        
        1
    
    
        springmvc
        /
    

    
    
        encodingFilter
        org.springframework.web.filter.CharacterEncodingFilter
        
            encoding
            utf-8
        
    
    
        encodingFilter
        /*
    

    
    
        15
    


  1. spring-mvc.xml



    

    
    
    
    
    
    
    
    
        
        
    

  1. spring配置整合文件:applicationContext.xml



    
    
    
    


至此,所有的配置文件暂告一段落,接下来编写Controller和视图层,Controller和视图层交互,然后调用service层。

  1. BookController类编写,增删改查书籍(Controller层的编写需要实时对照视图层)
package com.fanjh.controller;
import com.fanjh.pojo.Books;
import com.fanjh.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.List;

@Controller
@RequestMapping("/book")
public class BookController {
    @Autowired
    @Qualifier("BookServiceImpl")
    private BookService bookService;

    //查询所有书籍,并且返回要给书籍展示页面
    @RequestMapping("/allBook")
    public String list(Model model) {
        List list = bookService.queryAllBook();
        model.addAttribute("list", list);
        return "allBook";
    }

    //跳转到增加书籍页面
    @RequestMapping("/toAddBook")
    public String toAddBook(){

        return "addBook";
    }

    //添加书籍的请求
    @RequestMapping("/addBook")//执行完后,重定向到allbook页面
    public String addBook(Books books){
        System.out.println("addBook=>" + books);
        bookService.addBook(books);
        return "redirect:/book/allBook";
    }

    //跳转到修改书籍页面
    @RequestMapping("/toUpdate")
    public String toUpdateBook(int id, Model model){
        Books books = bookService.queryBookById(id);//根据id取到图书
        model.addAttribute("Qbooks",books);//将图书返回给前端

        return "updateBook";
    }

    //修改书籍
    //接收到前端传来的数据,调用service层执行修改操作
    @RequestMapping("/updateBook")
    public String updateBook(Books books){
        System.out.println("updateBook=>" + books);
        bookService.updateBook(books);

        return "redirect:/book/allBook";
    }

    //删除书籍
    @RequestMapping("/deleteBook/{bookId}")//restful风格
    public String deleteBook(@PathVariable("bookId") int id){
        bookService.deleteBookById(id);

        return "redirect:/book/allBook";
    }
}
  1. 编写首页index.jsp
<%--
  Created by IntelliJ IDEA.
  User: fjh990
  Date: 2020/11/7
  Time: 12:16
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


  首页
  



进入书籍页面

  1. 新建三个.jsp文件:
  • allBook:显示所有书籍
  • addBook:增加书籍
  • updateBook:修改书籍

allBook.jsp:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

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


    书籍展示

    
    



<%--增加书籍按钮,点击后跳到controller页面,然后根据return值到addbook.jsp--%>
书籍编号 书籍名称 书籍数量 书籍详情 操作
${book.bookID} ${book.bookName} ${book.bookCounts} ${book.detail} 修改   |   删除

addBook.jsp:

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


    新增书籍

    
    



<%--点击添加按钮后,跳转到/book/addBook执行添加操作(属性名一定要一致)--%>
书籍名称:


书籍数量:


书籍详情:


这里拿增加书籍举例梳理整个流程:

  1. 前端点击新增书籍按钮后,跳转到controller找到/book/toAddBook,跳转到toAddBook页面
  2. 根据toAddBook页面的return语句,拼接后找到/WEB-INF/jsp/addBook.jsp文件
  3. 根据页面展示,填写所要增加的书籍的内容
  4. 点击“添加”按钮,返回controller找到/book/addBook页面,并传回books信息
  5. controller层调用service层执行增加书籍操作。
  6. 返回到显示书籍页面

updateBook.jsp:

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


    修改书籍

    
    



<%--我们提交了修改的sql请求,但是修改失败,spring接管事务后不需要显式的配置,不是事务问题 看一下sql语句,能否执行成功:sql执行失败 前端传递隐藏域--%>
书籍名称:


书籍数量:


书籍详情:


至此,整个项目整合完毕

最后

欢迎关注公众号:前程有光,领取一线大厂Java面试题总结+各知识点学习思维导+一份300页pdf文档的Java核心知识点总结!

你可能感兴趣的:(后端,程序员,java,ssm)