最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于SSM框架下各層的解釋說(shuō)明(Controller等)

 更新時(shí)間:2022年02月26日 14:51:07   作者:*豬耳朵*  
這篇文章主要介紹了關(guān)于SSM框架下各層的解釋說(shuō)明(Controller等),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

SSM框架

SSM框架是spring MVC ,Spring和Mybatis框架的整合,是標(biāo)準(zhǔn)的MVC模式,將整個(gè)系統(tǒng)劃分為表現(xiàn)層(web),controller層,service層,dao層四層,使用spring MVC負(fù)責(zé)請(qǐng)求的轉(zhuǎn)發(fā)和視圖管理。

Spring實(shí)現(xiàn)業(yè)務(wù)對(duì)象管理,Mybatis作為數(shù)據(jù)對(duì)象的持久化引擎。

  • 表現(xiàn)層(web):通俗講就是展現(xiàn)給用戶(hù)的界面,即用戶(hù)在使用一個(gè)系統(tǒng)的時(shí)候他的所見(jiàn)所得。
  • 業(yè)務(wù)邏輯層(service):針對(duì)具體問(wèn)題的操作,也可以說(shuō)是對(duì)數(shù)據(jù)層的操作,對(duì)數(shù)據(jù)業(yè)務(wù)邏輯處理。
  • 數(shù)據(jù)訪問(wèn)層(dao):該層所做事務(wù)直接操作數(shù)據(jù)庫(kù),針對(duì)數(shù)據(jù)的增添、刪除、修改、更新、查找等。

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

各層解釋說(shuō)明

用IDEA創(chuàng)建一個(gè)maven項(xiàng)目結(jié)構(gòu)如左圖所示,在該項(xiàng)目中,有五個(gè)包,分別是controller、dao、entity、service和serviceimpl:

描述
實(shí)體層數(shù)據(jù)庫(kù)在項(xiàng)目中的類(lèi),主要用于定義與數(shù)據(jù)庫(kù)對(duì)象應(yīng)的屬性,提供get/set方法,tostring方法,有參無(wú)參構(gòu)造函數(shù)。
持久層與數(shù)據(jù)庫(kù)交互,dao層首先會(huì)創(chuàng)建dao接口,接著就可以在配置文件中定義該接口的實(shí)現(xiàn)類(lèi);接著就可以在模塊中調(diào)用dao的接口進(jìn)行數(shù)據(jù)業(yè)務(wù)的處理,而不用關(guān)注此接口的具體實(shí)現(xiàn)類(lèi)是哪一個(gè)類(lèi),dao層的數(shù)據(jù)源和數(shù)據(jù)庫(kù)連接的參數(shù)都是在配置文件中進(jìn)行配置的。
業(yè)務(wù)層控制業(yè)務(wù),業(yè)務(wù)模塊的邏輯應(yīng)用設(shè)計(jì),和dao層一樣都是先設(shè)計(jì)接口,再創(chuàng)建要實(shí)現(xiàn)的類(lèi),然后在配置文件中進(jìn)行配置其實(shí)現(xiàn)的關(guān)聯(lián)。接下來(lái)就可以在service層調(diào)用接口進(jìn)行業(yè)務(wù)邏輯應(yīng)用的處理。
實(shí)現(xiàn)層實(shí)現(xiàn)service接口的所有方法,整合service和dao
控制層controller層主要調(diào)用Service層里面的接口控制具體的業(yè)務(wù)流程,控制的配置也要在配置文件中進(jìn)行。Controller和Service的區(qū)別是:Controller負(fù)責(zé)具體的業(yè)務(wù)模塊流程的控制;Service層負(fù)責(zé)業(yè)務(wù)模塊的邏輯應(yīng)用設(shè)計(jì)

entity層(model層)

實(shí)體層用于存放我們的實(shí)體類(lèi),與數(shù)據(jù)庫(kù)中的屬性值基本保持一致,實(shí)現(xiàn)set和get的方法。

1.導(dǎo)入lombok小辣椒驅(qū)動(dòng)依賴(lài),用來(lái)生成get/set方法依賴(lài):

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) //鏈?zhǔn)秸{(diào)用
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;
	/**
	 * 設(shè)置:
	 */
	public void setId(Integer id) {
		this.id = id;
	}
	/**
	 * 獲?。?
	 */
	public Integer getId() {
		return id;
	}
	/**
	 * 設(shè)置:
	 */
	public void setUpdataflag(int updataflag) {
		this.updataflag = updataflag;
	}
	/**
	 * 獲取:
	 */
	public int getUpdataflag() {
		return updataflag;
	}
}

dao層(mapper層)

dao層(接口類(lèi))對(duì)數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)持久化操作,他的方法語(yǔ)句是直接針對(duì)數(shù)據(jù)庫(kù)操作的,主要實(shí)現(xiàn)一些增刪改查操作,在Mybatis中方法主要與與xxxDao(Mapper).xml內(nèi)相互一一映射。

Mybatis可以用.xml進(jìn)行數(shù)據(jù)操作,也可以在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中傳遞多個(gè)參數(shù)要做參數(shù)的綁定
    //新增用戶(hù)(注冊(cè))
    void save(User user);
    //查詢(xún)所有用戶(hù)
    List<User> findAlluser();
    //刪除用戶(hù)
    void delete(String id);
    //修改用戶(hù)信息(先查再改)
    User update(String id);
    void add(User user);
}

xxxDao(Mapper).xml:

關(guān)鍵: < mapper namespace=“com.dvms.dao.UserDao”>

前提:基本數(shù)據(jù)庫(kù)語(yǔ)法

<?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">
<!--注冊(cè)/新增用戶(hù)-->
    <insert id="save" parameterType="User">
        insert into user (id,username,password,sex,phone,email,role) values (#{id},#{username},#{password},#{sex},#{phone},#{email},#{role})
    </insert>
<!--登錄驗(yàn)證-->
    <select id="login" resultType="User">
        select id,username,password,sex,phone,email,role from user
        where username =#{username} and password =#{password}
    </select>
<!--查詢(xún)所有用戶(hù)-->
    <select id="findAlluser" resultType="User">
        select id,username,password,sex,phone,email,role from user
    </select>
<!--刪除用戶(hù)-->
    <delete id="delete" parameterType="String">
        delete from user where id=#{id}
    </delete>
<!--修改用戶(hù)信息-->
    <!--查到要修改的用戶(hù)信息-->
    <select id="update" parameterType="String" resultType="User">
        select id,username,password,sex,phone,email,role from user where id=#{id}
    </select>
    <!--修改用戶(hù)信息-->
    <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層(接口類(lèi))為controller層的類(lèi)提供接口進(jìn)行調(diào)用,一般就是自己寫(xiě)的方法封裝起來(lái),具體實(shí)現(xiàn)在serviceImpl中。

service層是建立在dao層之上的,建立了dao層后才可以建立service層,而service層又是在controller層之下的,因而service層應(yīng)該既調(diào)用dao層的接口,又要提供接口給Controller層的類(lèi)來(lái)進(jìn)行調(diào)用,它剛好處于一個(gè)中間層的位置。每個(gè)模型都有一個(gè)service接口,每個(gè)接口分別封裝各自的業(yè)務(wù)處理方法。

package com.dvms.service;
import com.dvms.entity.User;
import java.util.List;
public interface UserService {
    //新增用戶(hù)
    void save(User user);
    //登錄
    User login(String username, String password);
    //查詢(xún)所有用戶(hù)
    List<User> findAlluser();
    //刪除用戶(hù)
    void delete(String id);
    //修改用戶(hù)信息
    User update(String id);
    void add(User user);
}

servicedmpl(實(shí)現(xiàn)service層,整合service和dao)(導(dǎo)入dao層)(接口實(shí)現(xiàn)類(lèi))

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 層)

負(fù)責(zé)具體模塊的業(yè)務(wù)流程控制(獲取參數(shù)(前端傳過(guò)來(lái))返回響應(yīng)(前端或數(shù)據(jù)庫(kù)或一個(gè)指定路徑)),需要調(diào)用service邏輯設(shè)計(jì)層的接口來(lái)控制業(yè)務(wù)流程(導(dǎo)入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層調(diào)用了Service層的接口方法,Service層調(diào)用Dao層的方法,其中調(diào)用的參數(shù)是使用Entity層進(jìn)行傳遞的。View層與Controller層協(xié)同工作,主要負(fù)責(zé)界面展示。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • JAVA實(shí)現(xiàn)按時(shí)間段查詢(xún)數(shù)據(jù)操作

    JAVA實(shí)現(xiàn)按時(shí)間段查詢(xún)數(shù)據(jù)操作

    這篇文章主要介紹了JAVA實(shí)現(xiàn)按時(shí)間段查詢(xún)數(shù)據(jù)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • Java之Set?交集,差集,并集的用法

    Java之Set?交集,差集,并集的用法

    這篇文章主要介紹了Java之Set?交集,差集,并集的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • SpringBoot集成Validation參數(shù)校驗(yàn)

    SpringBoot集成Validation參數(shù)校驗(yàn)

    這篇文章主要為大家詳細(xì)介紹了SpringBoot集成Validation參數(shù)校驗(yàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Java的訪問(wèn)修飾符與變量的作用域講解

    Java的訪問(wèn)修飾符與變量的作用域講解

    這篇文章主要介紹了Java的訪問(wèn)修飾符與變量的作用域講解,是Java入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-09-09
  • Java魔法堂之調(diào)用外部程序的方法

    Java魔法堂之調(diào)用外部程序的方法

    這篇文章主要介紹了Java魔法堂:調(diào)用外部程序的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-02-02
  • mybatis-plus 批量插入示例代碼

    mybatis-plus 批量插入示例代碼

    正常我們使用mybatis-plus插入的時(shí)候,首先想到的是saveBatch方法,不過(guò)看了下打印出來(lái)的sql和底層代碼,才發(fā)現(xiàn)它并不是真正的批量插入這篇文章主要介紹了mybatis-plus 批量插入示例,需要的朋友可以參考下
    2023-07-07
  • SpringBoot中Mybatis + Druid 數(shù)據(jù)訪問(wèn)的詳細(xì)過(guò)程

    SpringBoot中Mybatis + Druid 數(shù)據(jù)訪問(wèn)的詳細(xì)過(guò)程

    Spring Boot 底層都是采用 SpringData 的方式進(jìn)行統(tǒng)一處理各種數(shù)據(jù)庫(kù),SpringData也是Spring中與SpringBoot、SpringCloud 等齊名的知名項(xiàng)目,下面看下SpringBoot Mybatis Druid數(shù)據(jù)訪問(wèn)的詳細(xì)過(guò)程,感興趣的朋友一起看看吧
    2021-11-11
  • Java中常見(jiàn)的查找算法與排序算法總結(jié)

    Java中常見(jiàn)的查找算法與排序算法總結(jié)

    數(shù)據(jù)結(jié)構(gòu)是數(shù)據(jù)存儲(chǔ)的方式,算法是數(shù)據(jù)計(jì)算的方式。所以在開(kāi)發(fā)中,算法和數(shù)據(jù)結(jié)構(gòu)息息相關(guān)。本文為大家整理了Java中常見(jiàn)的查找與排序算法的實(shí)現(xiàn),需要的可以參考一下
    2023-03-03
  • 說(shuō)說(shuō)Spring中為何要引入Lookup注解

    說(shuō)說(shuō)Spring中為何要引入Lookup注解

    這篇文章主要給大家介紹了關(guān)于Spring中為何要引入Lookup注解的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • SpringBoot集成QQ第三方登陸的實(shí)現(xiàn)

    SpringBoot集成QQ第三方登陸的實(shí)現(xiàn)

    這篇文章主要介紹了SpringBoot集成QQ第三方登陸的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11

最新評(píng)論

西吉县| 新余市| 朝阳市| 辰溪县| 丰台区| 白河县| 顺昌县| 香河县| 奎屯市| 子洲县| 北京市| 元谋县| 富川| 东至县| 上林县| 剑河县| 犍为县| 合作市| 廊坊市| 新乡县| 洪湖市| 来安县| 海阳市| 邵阳县| 隆林| 福泉市| 定南县| 防城港市| 靖宇县| 昌都县| 嘉善县| 蛟河市| 乌拉特前旗| 车致| 隆德县| 新安县| 朝阳区| 漳平市| 元阳县| 克拉玛依市| 社旗县|