Erlo

SpringMVC-06-SSM整合

2024-12-01 00:29:23 发布   111 浏览  
页面报错/反馈
收藏 点赞

1、环境要求

  • IDEA
  • MySQL 8.x
  • Tomcat 9
  • Maven 3.6

这只是大型软件要求,项目相关的jar包依赖将在Maven中配置。

项目前置技能:MySQL、Mybatis、Spring、JavaWeb、简单的前端知识。

2、数据库表

创建一个存放书籍数据的数据库表

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, '从进门到进牢');

3、基本项目搭建

新建Maven项目,SpringMVC-06-SSM,添加web框架支持。

编写pom.xml,导入依赖


    
    
        junit
        junit
        4.12
    
    
    
        org.projectlombok
        lombok
        1.18.32
    
    
    
        mysql
        mysql-connector-java
        8.0.16
    
    
    
        com.mchange
        c3p0
        0.9.5.2
    
    
    
        javax.servlet
        servlet-api
        2.5
    
    
        javax.servlet.jsp
        jsp-api
        2.1
    
    
        javax.servlet
        jstl
        1.2
    
    
    
        org.mybatis
        mybatis
        3.5.2
    
    
        org.mybatis
        mybatis-spring
        2.1.2
    
    
    
        org.springframework
        spring-webmvc
        5.2.12.RELEASE
    
    
        org.springframework
        spring-jdbc
        5.2.12.RELEASE
    
    
        org.aspectj
        aspectjweaver
        1.9.4
    

建立基本结构和配置框架

  • com.moondream.controller 控制层

  • com.moondream.service 服务层

  • com.moondream.dao 持久层

  • com.moondream.pojo 实体类

  • web/WEB-INF/jsp 视图层

  • resources

    • mybatis-config.xml Mybatis核心配置文件

      
      
      
          
              
          
      
          
              
          
      
          
              
          
      
      
    • applicationContext.xml Spring全局配置文件

      
      
      
      
      

4、Mybatis层(DAO层)

数据库配置文件 db.properties

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/ssmbuild?useSSL=false&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
user=root
password=123456

编写数据库表对应的实体类,使用Lombok依赖减少代码量

package com.moondream.pojo;

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

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Book {
    private Integer bookID;
    private String bookName;
    private Integer bookCounts;
    private String detail;
}

编写MyBatis的核心配置文件 mybatis-config.xml




    
        
    

    
        
    

    
        
    

编写Mybatis的mapper映射文件 BookMapper.xml





    
    
        insert into ssmbuild.books
        values (#{bookID}, #{bookName}, #{bookCounts}, #{detail});
    

    
    
        delete
        from ssmbuild.books
        where bookID = #{bookID};
    

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

    
    

    
    


编写mapper映射文件对应的接口,可以更方便的调用Mybatis

package com.moondream.dao;

import com.moondream.pojo.Book;

import java.util.List;

public interface BookMapper {
    //增加一个Book
    int addBook(Book book);

    //根据id删除一个Book
    Integer deleteBookById(Integer id);

    //更新Book
    Integer updateBook(Book Book);

    //根据id查询,返回一个Book
    Book queryBookById(Integer id);

    //查询全部Book,返回list集合
    List queryAllBook();
}

编写 spring-dao.xml,把Mybatis整合进Spring




    
    
    
    

    
    
    
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
    

    
    
        
        
        
        
    

    
    
    
    
        
        
        
        
    


到此,持久层编写完毕!


5、Spring层(Service层)

编写业务接口和接口实现

package com.moondream.service;

import com.moondream.pojo.Book;

import java.util.List;

//BookService: 需要具体实现,调用dao层
public interface BookService {
    //增加一个Book
    Integer addBook(Book book);

    //根据id删除一个Book
    Integer deleteBookById(Integer id);

    //更新Book
    Integer updateBook(Book Book);

    //根据id查询,返回一个Book
    Book queryBookById(Integer id);

    //查询全部Book,返回list集合
    List queryAllBook();
}
package com.moondream.service;

import com.moondream.dao.BookMapper;
import com.moondream.pojo.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class BookServiceImpl implements BookService {
    //调用dao层
    @Autowired
    private BookMapper bookMapper;

    public Integer addBook(Book book) {
        return bookMapper.addBook(book);
    }

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

    public Integer updateBook(Book Book) {
        return bookMapper.updateBook(Book);
    }

    public Book queryBookById(Integer id) {
        return bookMapper.queryBookById(id);
    }

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

编写 spring-service.xml ,Spring的service层配置文件




    
    

    
    
        
        
    

    
    
        
            
            
            
            
            
        
    
    
        
    

    
    

服务层编写完毕!


6、SpringMVC层(Controller层)

由于 Controller层 需要不断的与 View层 进行联动,
所以当我们编写完Controller层,其实View层也已经完成的差不多了。

编写 web.xml




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

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

    
    
        15
    


编写 spring-controller.xml ,Spring的Controller层配置




    
    
    
    
    
    
    
    
    
        
        
    


配置文件,暂时结束!现在进行 Controller层 和 View层 编写

BookController 类编写 , 方法一:查询全部书籍

package com.moondream.controller;

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

    @RequestMapping("/allBook")
    public String list(Model model) {
        List list = bookService.queryAllBook();
        model.addAttribute("list", list);
        return "allBook";
    }
}

编写首页 index.jsp





    首页
    


点击进入列表页

书籍列表页面 allbook.jsp





    书籍列表
    
    
    


书籍编号 书籍名字 书籍数量 书籍详情 操作
${book.getBookID()} ${book.getBookName()} ${book.getBookCounts()} ${book.getDetail()} 更改 | 删除

BookController 类编写 , 方法二:添加书籍

@RequestMapping("/toAddBook")
public String toAddPaper() {
    return "addBook";
}

@RequestMapping("/addBook")
public String addPaper(Book book) {
    System.out.println(book);
    bookService.addBook(book);
    return "redirect:/book/allBook";
}

添加书籍 页面:addBook.jsp





    新增书籍
    
    
    


书籍名称:


书籍数量:


书籍详情:


BookController 类编写 , 方法三:修改书籍

@RequestMapping("/toUpdateBook")
public String toUpdateBook(Model model, Integer id) {
    Book book = bookService.queryBookById(id);
    System.out.println(book);
    model.addAttribute("book", book);
    return "updateBook";
}

@RequestMapping("/updateBook")
public String updateBook(Book book) {
    System.out.println(book);
    bookService.updateBook(book);
    return "redirect:/book/allBook";
}

修改书籍 页面 updateBook.jsp





    修改信息
    
    
    


书籍名称: 书籍数量: 书籍详情:

BookController 类编写 , 方法四:删除书籍

@RequestMapping("/del/{bookId}")
public String deleteBook(@PathVariable Integer bookId) {
    bookService.deleteBookById(bookId);
    return "redirect:/book/allBook";
}

Controller层 与 View层 编写完毕!

最后,做一些收尾和辅助性的工作,比如,横切日志提示,表明当前程序执行到哪一步了……

在com.moondream包下,新增log包,编写切面

package com.moondream.log;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

import java.text.SimpleDateFormat;
import java.util.Date;

@Aspect
@Component
public class IndicationLog {

    @Around("within(com.moondream.*.*+)")
    public Object Indication(ProceedingJoinPoint pjp) throws Throwable {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String date = sdf.format(new Date());

        System.err.println("[" + date + "] " + pjp.getSignature().toShortString() + " ==>");
        Object value = pjp.proceed();
        System.err.println("

整合Spring的全局配置文件 applicationContext.xml




    
    
    
    
    



7、配置Tomcat,启动测试

image-20241127005017550

到目前为止,这个SSM项目整合已经完全的OK了,可以直接运行进行测试!这个练习十分的重要,大家需要保证,不看任何东西,自己也可以完整的实现出来!

项目结构图

image-20241130211843588


8、新增功能--查询书籍

之前,我们是从零开始搭建项目,所有需求都是定好的,
所以可以自下而上搭建,这样不至于在业务和底层接口之间频繁辗转,
而且编写的接口更容易做到复用,进而获得更好的经济性。

那么,如果是项目要新增功能呢?

这个时候,项目的基本框架已经成型,
一般是使用自上而下的方式来开发,这样更容易把握整体性。


编写前端页面

image-20241130225510686

${error}

编写查询的Controller方法

@RequestMapping("queryBookByName")
public String queryBook(String queryBookName, Model model) {
    //业务逻辑还没有写
    return "allBook";
}

编写Service接口

//根据name模糊查询Book
List queryBookByName(String bookName);

编写Mapper接口

//根据name模糊查询Book
List queryBookByName(String bookName);

编写mapper.xml配置文件


编写Service实现类

public List queryBookByName(String bookName) {
    return bookMapper.queryBookByName(bookName);
}

补全Controller

@RequestMapping("queryBookByName")
public String queryBook(String queryBookName, Model model) {
    List list = bookService.queryBookByName(queryBookName.trim());

    if (list.size() == 0) {
        model.addAttribute("error", "没有找到本书!");
        return "forward:/book/allBook";
    }

    model.addAttribute("list", list);
    return "allBook";
}

前端增加一个显示全部书籍的按钮,方便查询后返回,提高用户体验

image-20241130231707995

显示全部书籍

测试,查询功能OK!


9、小结

SSM的整合案例到这里就结束了,SSM框架在Java企业级开发中的重要地位不需要多说。

我们通过这个项目已经能够独立的去开发一些小网站了,但是这只是增删改查的基本操作,还远远不够!

敬请期待,新的篇章:

  • Ajax
  • 拦截器
  • 文件上传与下载
  • SpringBoot 以及 SpringCloud……

登录查看全部

参与评论

评论留言

还没有评论留言,赶紧来抢楼吧~~

手机查看

返回顶部

给这篇文章打个标签吧~

棒极了 糟糕透顶 好文章 PHP JAVA JS 小程序 Python SEO MySql 确认