ssm框架环境搭建


ssm环境搭建

环境要求

  • IDEA
  • MySQL 8.0.22
  • Tomcat 9.0.40
  • Maven 3.6.3

数据库搭建

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. 建立maven项目,添加web的支持

    添加web支持 : 右键项目 -> 添加框架支持 -> 勾选Web Application -> 确定

  2. 导入pom依赖

    
            
            
                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
            
    
    
        
    
  3. 添加Maven资源过滤设置(在pom文件中dependencies标签的后面)

    
            
                
                    src/main/java
                    
                        **/*.properties
                        **/*.xml
                    
                    false
                
                
                    src/main/resources
                    
                        **/*.properties
                        **/*.xml
                    
                    false
                
            
        
    
  4. 建立基本结构和配置框架

    • com.hjq.pojo

    • com.hjq.dao

    • com.hjq.service

    • com.hjq.controller

    • mybatis-config.xml

      <?xml version="1.0" encoding="UTF-8" ?>
      
      
      
      
      
    • applicationContext.xml

      <?xml version="1.0" encoding="UTF-8"?>
      
      
      
      

Mybatis层

  1. database.properties

    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=Asia/Shanghai&useSSL=false&useUnicode=true&characterEncoding=utf8&allowPublicKeyRetrieval=true
    jdbc.username=root
    jdbc.password=qaz123456
    
  2. IDEA关联数据库

    ps:先默认连接上总的数据库,然后测试连接成功后,在架构(Schemas)栏下选择要链接的database

  3. 编写Mybatis的核心配置文件(mybatis-config.xml)

    <?xml version="1.0" encoding="UTF-8" ?>
    
    
    
        
            
        
        
            
        
    
    
    
  4. 编写数据库对应的实体类 com.hjq.pojo.Books

    ps:这里可以使用lombok插件省去getter/setter等代码的编写,但是为了稳定,这里使用idea的自动补全功能生成了正式代码,故篇幅较长。

    package com.hjq.pojo;
    
    public class Books {
    
        private int bookID;
        private String bookName;
        private int bookCounts;
        private String detail;
    
        public Books(){
    
        }
    
        public Books(int bookID, String bookName, int bookCounts, String detail) {
            this.bookID = bookID;
            this.bookName = bookName;
            this.bookCounts = bookCounts;
            this.detail = detail;
        }
    
        public int getBookID() {
            return bookID;
        }
    
        public void setBookID(int bookID) {
            this.bookID = bookID;
        }
    
        public String getBookName() {
            return bookName;
        }
    
        public void setBookName(String bookName) {
            this.bookName = bookName;
        }
    
        public int getBookCounts() {
            return bookCounts;
        }
    
        public void setBookCounts(int bookCounts) {
            this.bookCounts = bookCounts;
        }
    
        public String getDetail() {
            return detail;
        }
    
        public void setDetail(String detail) {
            this.detail = detail;
        }
    
    
    
    }
    
    
  5. 编写Dao层的 Mapper接口!

    package com.hjq.dao;
    
    import com.hjq.pojo.Books;
    
    import java.util.List;
    
    public interface BookMapper {
    
        //增加一个Book
        int addBook(Books book);
    
        //根据id删除一个Book
        int deleteBookById(int id);
    
        //更新Book
        int updateBook(Books books);
    
        //根据id查询,返回一个Book
        Books queryBookById(int id);
    
        //查询全部Book,返回list集合
        List queryAllBook();
    
    }
    
    
  6. 编写接口对应的 Mapper.xml 文件。需要导入MyBatis的包;

    <?xml version="1.0" encoding="UTF-8" ?>
    
    
    
    
        
        
            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}
        
    
        
        
    
        
        
    
    
    
  7. 编写Service层的接口和实现类

    • 接口

      package com.hjq.service;
      
      import com.hjq.pojo.Books;
      import java.util.List;
      
      //BookService:底下需要去实现,调用dao层
      public interface BookService {
          //增加一个Book
          int addBook(Books book);
          //根据id删除一个Book
          int deleteBookById(int id);
          //更新Book
          int updateBook(Books books);
          //根据id查询,返回一个Book
          Books queryBookById(int id);
          //查询全部Book,返回list集合
          List queryAllBook();
      }
      
      
    • 实现类

      package com.hjq.service;
           
           import com.hjq.pojo.Books;
           import com.hjq.dao.BookMapper;
           import java.util.List;
           
           public class BookServiceImpl implements BookService {
           
               //调用dao层的操作,设置一个set接口,方便Spring管理
               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 books) {
                   return bookMapper.updateBook(books);
               }
           
               public Books queryBookById(int id) {
                   return bookMapper.queryBookById(id);
               }
           
               public List queryAllBook() {
                   return bookMapper.queryAllBook();
               }
           }
      

Spring层

Spring IOC : 控制反转,指的是在配置文件中实现对参数的配置,而不是把参数写在代码中,例如这里的spring-dao里面的c3p0连接池的参数设置,这样一来,用户就可以在不修改代码的情况下实现控制。

Spring AOP : 面向切面编程,程序在运行时,动态地将代码切入到类的指定方法、指定位置上。


1、配置Spring整合MyBatis,我们这里数据源使用c3p0连接池;

2、我们去编写Spring整合Mybatis的相关的配置文件;spring-dao.xml

? Spring-dao.xml : spring整合dao的文件,此文件通过spring把dao层的类实体化注入到容器中,以及配置一些参数等

<?xml version="1.0" encoding="UTF-8"?>


    
    
    

    
    
    
        
        
        
        
        

        
        
        
        
        
        
        
        
        
    

    
    
        
        
        
        
    

    
    
    
        
        
        
        
    


3、Spring整合service层 , spring-service.xml

? spring-service.xml :spring整合service的文件,此文件通过spring把service层的类实体化注入到容器中,以及实现横切事务等

? 这里注意,之所以在这个项目中即注入dao层对象,还要注入service层对象,是因为dao层的东西都是一个项目最基本的,对应了一个实体类的CRUD操作,如果想要配置复杂的方法,比如不同的类之间的关联操作,那就需要在service层中同时引用不同的dao的方法,而且还可以增加实现别的功能的代码,所以dao和service层的意义在于此,这也是为什么两个层都需要注入到Spring中的原因。

<?xml version="1.0" encoding="UTF-8"?>


    
    

    
    
        
    

    
    
        
        
    

    


Spring就是一个大杂烩,一个容器, 所有的对象注入Spring中由Spring管理。


SpringMVC层

1、web.xml

<?xml version="1.0" encoding="UTF-8"?>


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

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

    
    
        15
    


2、spring-mvc.xml

<?xml version="1.0" encoding="UTF-8"?>


    
    
    
    
    

    
    
        
        
        
    

    
    


3、Spring配置整合文件,applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>


    
    
    


至此,配置地狱完成配置


Controller 和 视图层编写

? WEB-INF下新建一个目录“jsp”

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

@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";
  }
}

2、编写首页 index.jsp

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



   首页
   



点击进入列表页

3、书籍列表页面 allBook.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


   书籍列表
   
   
   



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

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

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

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

5、添加书籍页面:addBook.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>



   新增书籍
   
   
   


书籍名称:


书籍数量:


书籍详情:


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

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

@RequestMapping("/updateBook")
public String updateBook(Model model, Books book) {
   System.out.println(book);
   bookService.updateBook(book);
   Books books = bookService.queryBookById(book.getBookID());
   model.addAttribute("books", books);
   return "redirect:/book/allBook";
}

7、修改书籍页面 updateBook.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


   修改信息
   
   
   


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

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

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

配置Tomcat,进行运行!

注:

  1. 如果项目运行出错,可以尝试 -> 打开在IDEA右上角的“项目结构” -> "项目设置"下的"构件" -> 在WEB-INF下新建一个目录叫"lib" -> 选中"lib",点击+号 -> 点击"库文件",选择所有的包 -> 确认

  2. 部署tomcat时,在"部署"找到"应用程序上下文",输入"/",应用并确认。

    注:是在“Deployment”下的“Deploy at the server startup"中点击”+“,然后点击”Artifact“,然后配好,然后在下面的”Application context“那里把内容给位”/“,点击应用,就行了

后续问题详解:

  1. 关于请求这个项目的接口,如果不想走jsp,那么要这样配

    @RestController //让所有请求不走视图解析器
    public class UserController {
        @Autowired//自动注入
        private UserService userService;
    
        @RequestMapping("/t1")//设置请求资源名称
        public String queryAllUser(){
            return JSON.toJSONString(userService.queryAllUser());
        }
    }
    
    
    
  2. 关于json,想要使用就要在pom里多加这些

    
    
        com.alibaba
        fastjson
        1.2.47
    
    
    
        javax.xml.bind
        jaxb-api
        2.3.0
    
    
        com.sun.xml.bind
        jaxb-impl
        2.3.0
    
    
        com.sun.xml.bind
        jaxb-core
        2.3.0
    
    
        javax.activation
        activation
        1.1.1
    
    
  3. json格式传到前端出现中文不能显示的问题,在spring-mvc中添加标签如下即可

    
    
        
            
                
                    
                        application/json;charset=UTF-8