SSM框架——整合ssm


SSM整合

1.准备工作

新建一个普通的Maven项目

建好所有需要的架构层

向pom.xml中导入所有的依赖

       

   com.mchange
   c3p0
   0.9.5.2


   mysql
   mysql-connector-java
   5.1.47


   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



   javax.servlet
   servlet-api
   2.5


   javax.servlet.jsp
   jsp-api
   2.2


   javax.servlet
   jstl
   1.2



   junit
   junit
   4.13.2


   org.projectlombok
   lombok
   1.18.12
   provided

尝试在idea内连接数据库


2.配置MyBatis层

  • 编写ORM实体类
package mycode.pojo;

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

/**
 * @classname
 * @Author 姬如千泷
 * @Date 2021/7/25  23:01
 * @Version 1.0
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Book {
    private int bookID;
    private String bookName;
    private int bookCounts;
    private String detail;
}
  • 编写dao层业务接口(为简便,以一个举例)
package mycode.dao;

import mycode.pojo.Book;

import java.util.List;

/**
 * @classname
 * @Author 姬如千泷
 * @Date 2021/7/25  23:03
 * @Version 1.0
 */
public interface BookMapper {
    //获取全部书籍信息
    List getBooks();
}
  • 编写Mapper.xml
<?xml version="1.0" encoding="UTF-8" ?>



    

  • 编写登录.properties文件
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/ssmbuild?useUnicode=true&characterEncoding=utf8&useSSL=false&severTimezone=GMT%2B8&allowPublicKeyRetrieval=true
username=root
password=123456
  • 编写Mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>


    
        
    

3. 配置Spring层

  • 编写业务抽象接口,只是为了给代理类提供接口
package mycode.service;

import mycode.pojo.Book;

import java.util.List;

/**
 * @classname
 * @Author 姬如千泷
 * @Date 2021/7/25  23:35
 * @Version 1.0
 */
public interface BookService {
    List getBooks();
}
  • 编写服务代理类
package mycode.service;

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

import java.util.List;

/**
 * @classname
 * @Author 姬如千泷
 * @Date 2021/7/25  23:36
 * @Version 1.0
 */
@Service
public class BookImpl implements BookService{
    private BookMapper mapper;

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

    @Override
    public List getBooks() {
        return mapper.getBooks();
    }
}
  • 编写spring-dao.xml,用spring对接数据库连接
<?xml version="1.0" encoding="UTF-8"?>


    
    
    

    
    
    
        
        
        
        
        

        
        
        
        
        
        
        
        
        
    

    
    
        
        
        
        
    

    
    
    
        
        
        
        
    


  • 编写spring-service.xml,用spring对接dao层服务和事务
<?xml version="1.0" encoding="UTF-8"?>


    
    

    
    
        
    

    
    
        
        
    


4.配置Spring-MVC层(注解实现)

  • 将maven项目升级为web项目

  • 编写spring-mvc.xml
<?xml version="1.0" encoding="UTF-8"?>


    
    
    
    
    

    
    
        
        
        
    

    
    


  • 编写applicationContext.xml整合xml配置
<?xml version="1.0" encoding="UTF-8"?>

    
    
    

  • 配置web.xml
<?xml version="1.0" encoding="UTF-8"?>


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

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

    
    
        15
    


到这里基本配置就已经完成了,只需要再对接一下前端就可以了

5. 一个业务实例(取自狂神说java)

  • 首页jsp页面
<%--
  Created by IntelliJ IDEA.
  User: 姬如千泷
  Date: 2021/7/26
  Time: 0:24
  To change this template use File | Settings | File Templates.
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>



  首页
  



点击进入列表页

  • 跳转jsp页面
<%--
  Created by IntelliJ IDEA.
  User: 姬如千泷
  Date: 2021/7/26
  Time: 0:33
  To change this template use File | Settings | File Templates.
--%>
<%@ 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()}
  • 编写控制类
package mycode.controller;

import mycode.pojo.Book;
import mycode.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.RequestMapping;

import java.util.List;

/**
 * @classname
 * @Author 姬如千泷
 * @Date 2021/7/26  0:29
 * @Version 1.0
 */
@Controller
public class BookController {
    @Autowired
    @Qualifier("BookImpl")
    private BookService bookService;

    @RequestMapping("/allBook")//代表入口url
    public String list(Model model) {
        List list = bookService.getBooks();
        model.addAttribute("list", list);

        return "allBook";
    }
}
  • 配置tomcat启动项目

6. 可能出现的问题

6.1 java代码变成.java不可执行文件

这说明项目的资源路径配置是存在问题的,我在开发过程中这种问题出现了不下3次,一般如果不及时处理,会报出io错误找不到xml配置文件

解决办法是重新配置资源路径

删除掉原有的资源路径配置

在新建一个即可,一般idea会重新智能匹配资源类型,如果没有自动匹配的话,重新为每一个文件选择对应类型即可

6.2 无法启动tomcat

可能是war包缺失导致,tomcat的war包是项目输出的主要包,必须提前配置好

用idea的Fix自动修复war包

或者自己新建一个war包

加入war包后,依然无法启动的话,检测out输出项目中是否含有lib目录,如果没有,则加入


将依赖全都导入进去

6.3 无法连接数据库问题(即错误中出现jdbc关键字的大部分错)

可能是由于.properties文件的编码问题导致,可以明显在错误中看到root用户名乱码

Access denied for user '?§??|?????3·'@'local......

解决方案一是直接不使用properties导入,明文,但这样安全系数低一些





解决方案二是在idea中设置Properties的编码方式,设置为和idea编码格式一致,一般是utf-8

6.4 如果报错文件指向mapper.xml,那么一般是sql语句出了错误,这时候一般会检查返回类型(如果是返回集合的话,返回值类型要设置为集合元素的类型)、参数类型(多个参数要加@Param注解等)
6.5 如果报一些资源未找到问题

先检测输出文件中有没有对应资源,如xml文件、Properties文件等,如果项目中有,而实际输出文件中没有的话,极有可能是文件被过滤了,这时候需要在pom.xml中设置文件过滤器跳过哪些文件


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

相关