首頁 > 軟體

關於SSM框架下各層的解釋說明(Controller等)

2022-02-26 19:03:01

SSM框架

SSM框架是spring MVC ,Spring和Mybatis框架的整合,是標準的MVC模式,將整個系統劃分為表現層(web),controller層,service層,dao層四層,使用spring MVC負責請求的轉發和檢視管理。

Spring實現業務物件管理,Mybatis作為資料物件的持久化引擎。

  • 表現層(web):通俗講就是展現給使用者的介面,即使用者在使用一個系統的時候他的所見所得。
  • 業務邏輯層(service):針對具體問題的操作,也可以說是對資料層的操作,對資料業務邏輯處理。
  • 資料存取層(dao):該層所做事務直接運算元據庫,針對資料的增添、刪除、修改、更新、查詢等。

DataBase ===> Entity ===> Mapper.xml ===> Dao.Java ===> Service.java ===> Controller.java ===> html css js(thymeleaf)

各層解釋說明

用IDEA建立一個maven專案結構如左圖所示,在該專案中,有五個包,分別是controller、dao、entity、service和serviceimpl:

描述
實體層資料庫在專案中的類,主要用於定義與資料庫物件應的屬性,提供get/set方法,tostring方法,有參無參建構函式。
持久層與資料庫互動,dao層首先會建立dao介面,接著就可以在組態檔中定義該介面的實現類;接著就可以在模組中呼叫dao的介面進行資料業務的處理,而不用關注此介面的具體實現類是哪一個類,dao層的資料來源和資料庫連線的引數都是在組態檔中進行設定的。
業務層控制業務,業務模組的邏輯應用設計,和dao層一樣都是先設計介面,再建立要實現的類,然後在組態檔中進行設定其實現的關聯。接下來就可以在service層呼叫介面進行業務邏輯應用的處理。
實現層實現service介面的所有方法,整合service和dao
控制層controller層主要呼叫Service層裡面的介面控制具體的業務流程,控制的設定也要在組態檔中進行。Controller和Service的區別是:Controller負責具體的業務模組流程的控制;Service層負責業務模組的邏輯應用設計

entity層(model層)

實體層用於存放我們的實體類,與資料庫中的屬性值基本保持一致,實現set和get的方法。

1.匯入lombok小辣椒驅動依賴,用來生成get/set方法依賴:

package com.dvms.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import lombok.experimental.Accessors;
import java.util.Date;
@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true) //鏈式呼叫
public class Emp {
    private String id;
    private String name;
    private Double salary;
    private Integer age;
    private Date bir;
}

2.傳統方式

package com.umf.entity;
import java.io.Serializable;
public class UpdataSettingEntity implements Serializable {
	private static final long serialVersionUID = 1L;
	//
	private Integer id = 1;
	//
	private int updataflag;
	/**
	 * 設定:
	 */
	public void setId(Integer id) {
		this.id = id;
	}
	/**
	 * 獲取:
	 */
	public Integer getId() {
		return id;
	}
	/**
	 * 設定:
	 */
	public void setUpdataflag(int updataflag) {
		this.updataflag = updataflag;
	}
	/**
	 * 獲取:
	 */
	public int getUpdataflag() {
		return updataflag;
	}
}

dao層(mapper層)

dao層(介面類)對資料庫進行資料持久化操作,他的方法語句是直接針對資料庫操作的,主要實現一些增刪改查操作,在Mybatis中方法主要與與xxxDao(Mapper).xml內相互一一對映。

Mybatis可以用.xml進行資料操作,也可以在dao層用註解的方式,也可以採取xml和dao層介面組合使用的方法(常用)。

package com.dvms.dao;
import com.dvms.entity.User;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface UserDao {
    //登入
    User login(@Param("username") String username, @Param("password") String password);// 在mybatis中傳遞多個引數要做引數的繫結
    //新增使用者(註冊)
    void save(User user);
    //查詢所有使用者
    List<User> findAlluser();
    //刪除使用者
    void delete(String id);
    //修改使用者資訊(先查再改)
    User update(String id);
    void add(User user);
}

xxxDao(Mapper).xml:

關鍵: < mapper namespace=“com.dvms.dao.UserDao”>

前提:基本資料庫語法

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dvms.dao.UserDao">
<!--註冊/新增使用者-->
    <insert id="save" parameterType="User">
        insert into user (id,username,password,sex,phone,email,role) values (#{id},#{username},#{password},#{sex},#{phone},#{email},#{role})
    </insert>
<!--登入驗證-->
    <select id="login" resultType="User">
        select id,username,password,sex,phone,email,role from user
        where username =#{username} and password =#{password}
    </select>
<!--查詢所有使用者-->
    <select id="findAlluser" resultType="User">
        select id,username,password,sex,phone,email,role from user
    </select>
<!--刪除使用者-->
    <delete id="delete" parameterType="String">
        delete from user where id=#{id}
    </delete>
<!--修改使用者資訊-->
    <!--查到要修改的使用者資訊-->
    <select id="update" parameterType="String" resultType="User">
        select id,username,password,sex,phone,email,role from user where id=#{id}
    </select>
    <!--修改使用者資訊-->
    <update id="add" parameterType="User">
        update user set username=#{username},password=#{password},sex=#{sex},phone=#{phone},email=#{email},role=#{role} where id=#{id}
    </update>
</mapper>

在dao層用註解的方式:

public interface StudentDao {
    
    @Select("select * from student where stu_id=#{stuId}")
    public Student queryById(int stuId);
}

service層

service層(介面類)為controller層的類提供介面進行呼叫,一般就是自己寫的方法封裝起來,具體實現在serviceImpl中。

service層是建立在dao層之上的,建立了dao層後才可以建立service層,而service層又是在controller層之下的,因而service層應該既呼叫dao層的介面,又要提供介面給Controller層的類來進行呼叫,它剛好處於一箇中間層的位置。每個模型都有一個service介面,每個介面分別封裝各自的業務處理方法。

package com.dvms.service;
import com.dvms.entity.User;
import java.util.List;
public interface UserService {
    //新增使用者
    void save(User user);
    //登入
    User login(String username, String password);
    //查詢所有使用者
    List<User> findAlluser();
    //刪除使用者
    void delete(String id);
    //修改使用者資訊
    User update(String id);
    void add(User user);
}

servicedmpl(實現service層,整合service和dao)(匯入dao層)(介面實現類)

package com.dvms.service.Impl;
import com.dvms.dao.UserDao;
import com.dvms.entity.User;
import com.dvms.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.UUID;
@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserDao userDao;
    @Override
    public void save(User user) {
        user.setId(UUID.randomUUID().toString());
        userDao.save(user);
    }
    @Override
    public User login(String username, String password) {
        return userDao.login(username,password);
    }
    @Override
    public List<User> findAlluser() {
        return userDao.findAlluser();
    }
    @Override
    public void delete(String id) {
        userDao.delete(id);
    }
    @Override
    public User update(String id) {
        return userDao.update(id);
    }
    @Override
    public void add(User user) {
        userDao.add(user);
    }
}

Controller層(web 層)

負責具體模組的業務流程控制(獲取引數(前端傳過來)返回響應(前端或資料庫或一個指定路徑)),需要呼叫service邏輯設計層的介面來控制業務流程(匯入service層)。

package com.dvms.controller;
import com.dvms.entity.Emp;
.....
@Controller
public class EmpController {
    @Autowired
    private EmpService empService;
    @GetMapping("emp/findAll")
    public String findAll(@RequestParam(defaultValue = "1") int pageNum,
                          @RequestParam(defaultValue = "5") int pageSize,
                          Model model){
        PageHelper.startPage(pageNum,pageSize);//
        PageInfo<Emp> pageInfo = new PageInfo<>(empService.findAll());
        model.addAttribute("pageInfo",pageInfo);
//        List<Emp> emps = empService.findAll();
//        model.addAttribute("emps",emps);
        return "ems/tables";
    }
    @RequestMapping("/emp/save")
    public String save(Emp emp){
        empService.save(emp);
        return "redirect:/emp/findAll";
    }
}

Controller層呼叫了Service層的介面方法,Service層呼叫Dao層的方法,其中呼叫的引數是使用Entity層進行傳遞的。View層與Controller層協同工作,主要負責介面展示。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com