關于SSM框架下各層的解釋說明(Controller等)
SSM框架
SSM框架是spring MVC ,Spring和Mybatis框架的整合,是標準的MVC模式,將整個系統(tǒng)劃分為表現層(web),controller層,service層,dao層四層,使用spring MVC負責請求的轉發(fā)和視圖管理。
Spring實現業(yè)務對象管理,Mybatis作為數據對象的持久化引擎。

- 表現層(web):通俗講就是展現給用戶的界面,即用戶在使用一個系統(tǒng)的時候他的所見所得。
- 業(yè)務邏輯層(service):針對具體問題的操作,也可以說是對數據層的操作,對數據業(yè)務邏輯處理。
- 數據訪問層(dao):該層所做事務直接操作數據庫,針對數據的增添、刪除、修改、更新、查找等。
DataBase ===> Entity ===> Mapper.xml ===> Dao.Java ===> Service.java ===> Controller.java ===> html css js(thymeleaf)
各層解釋說明
用IDEA創(chuàng)建一個maven項目結構如左圖所示,在該項目中,有五個包,分別是controller、dao、entity、service和serviceimpl:

| 層 | 描述 |
|---|---|
| 實體層 | 數據庫在項目中的類,主要用于定義與數據庫對象應的屬性,提供get/set方法,tostring方法,有參無參構造函數。 |
| 持久層 | 與數據庫交互,dao層首先會創(chuàng)建dao接口,接著就可以在配置文件中定義該接口的實現類;接著就可以在模塊中調用dao的接口進行數據業(yè)務的處理,而不用關注此接口的具體實現類是哪一個類,dao層的數據源和數據庫連接的參數都是在配置文件中進行配置的。 |
| 業(yè)務層 | 控制業(yè)務,業(yè)務模塊的邏輯應用設計,和dao層一樣都是先設計接口,再創(chuàng)建要實現的類,然后在配置文件中進行配置其實現的關聯。接下來就可以在service層調用接口進行業(yè)務邏輯應用的處理。 |
| 實現層 | 實現service接口的所有方法,整合service和dao |
| 控制層 | controller層主要調用Service層里面的接口控制具體的業(yè)務流程,控制的配置也要在配置文件中進行。Controller和Service的區(qū)別是:Controller負責具體的業(yè)務模塊流程的控制;Service層負責業(yè)務模塊的邏輯應用設計 |
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.傳統(tǒng)方式
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接口,每個接口分別封裝各自的業(yè)務處理方法。
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 層)
負責具體模塊的業(yè)務流程控制(獲取參數(前端傳過來)返回響應(前端或數據庫或一個指定路徑)),需要調用service邏輯設計層的接口來控制業(yè)務流程(導入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層協(xié)同工作,主要負責界面展示。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
淺談Java中@Autowired和@Inject注解的區(qū)別和使用場景
本文主要介紹了淺談Java中@Autowired和@Inject注解的區(qū)別和使用場景,@Autowired注解在依賴查找方式和注入方式上更加靈活,適用于Spring框架中的依賴注入,而@Inject注解在依賴查找方式上更加嚴格,適用于Java的依賴注入標準,感興趣的可以了解一下2023-11-11
談談Java中整數類型(short int long)的存儲方式
在java中的整數類型有四種,分別是byte short in long,本文重點給大家介紹java中的整數類型(short int long),由于byte只是一個字節(jié)0或1,在此就不多說了,對java中的整數類型感興趣的朋友一起學習吧2015-11-11
System.currentTimeMillis()計算方式與時間的單位轉換詳解
這篇文章主要介紹了System.currentTimeMillis()計算方式與時間的單位轉換詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-05-05
詳解JDK中ExecutorService與Callable和Future對線程的支持
這篇文章主要介紹了詳解JDK中ExecutorService與Callable和Future對線程的支持的相關資料,希望通過本文能幫助到大家,需要的朋友可以參考下2017-09-09
java反編譯工具jd-gui-osx?for?mac?M1芯片無法使用的問題及解決
這篇文章主要介紹了java反編譯工具jd-gui-osx?for?mac?M1芯片無法使用的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01

