国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java基礎(chǔ)(項目1)——項目設(shè)計分層 & dao + service + test +ui + exception + log + util

這篇具有很好參考價值的文章主要介紹了Java基礎(chǔ)(項目1)——項目設(shè)計分層 & dao + service + test +ui + exception + log + util。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

引出

1.為什么建那么多層,dao,service…
2.項目設(shè)計分層初步;
3.本文以養(yǎng)老院老人信息管理、招聘應(yīng)聘控制臺項目為例;

git倉庫地址


java項目dao層,Java,java,ui,開發(fā)語言

DAO層—和數(shù)據(jù)庫交互

1.通過IO流存儲到dat文件

IO流及其項目應(yīng)用初步

java項目dao層,Java,java,ui,開發(fā)語言

(1)類需要實現(xiàn)Serializable序列化接口

package com.tianju.older.entity;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import java.io.Serializable;
import java.util.Date;
import java.util.Objects;

@Setter@Getter
@AllArgsConstructor
@NoArgsConstructor
public class Older implements Serializable { // 實現(xiàn)序列化接口
    private String id;
    private String name;
    private Integer age;
    private Date inDate;

    @Override
    public String toString() {
        return "Older[" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", inDate=" + inDate +
                ']';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Older older = (Older) o;
        return Objects.equals(id, older.id);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id);
    }
}

(2)dao層的接口和實現(xiàn)分離

接口:

package com.tianju.older.dao;

import com.tianju.older.entity.Older;

import java.util.List;

/**
 * Older的dao類
 */
public interface IOlderDao {
    // 保存老人信息
    void save(Older older);
    // 刪除老人信息
    void delete(Older older);
    // 更新老人信息
    void update(Older older);
    // 根據(jù)id找老人信息
    Older findById(String id);
    // 找到全部老人信息
    List<Older> findAll();
    // 保存到文件的方法
    void saveToFile();
    // 從文件中讀取成老人類的方法
    List<Older> loadFromFile();
}

實現(xiàn):

package com.tianju.older.dao.impl;

import com.tianju.older.dao.IOlderDao;
import com.tianju.older.entity.Older;
import com.tianju.older.exception.NotFoundOlderException;
import com.tianju.older.util.Config;
import org.apache.log4j.Logger;

import java.io.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Objects;

public class OlderDaoImpl implements IOlderDao {
    List<Older> list = null;

    // 如果讀取到的loadFromFiLe不為null,則賦值給list;
    // 否則new 出來
    public OlderDaoImpl() {
        List<Older> olders = loadFromFile();
        if (Objects.isNull(olders)){
            list = new ArrayList<>(20);
        }else {
            list = olders;
        }
    }

    @Override
    public void save(Older older) {
        list.add(older);
        Logger.getLogger(this.getClass()).info("addOlder: " + older);
        saveToFile();
    }

    @Override
    public void delete(Older older) {
        // 先看能不能找到
        Older find = findById(older.getId());
        // 如果找到,刪除;沒找到,拋出異常,并記錄日志
        if (Objects.isNull(find)){
            throw new NotFoundOlderException("404異常,該老人信息不存在,未刪除");
        }
        Logger.getLogger(this.getClass()).info("deleteOlder: " + find);
        list.remove(older);
        saveToFile(); // 文件更新
    }

    @Override
    public void update(Older older) {
        // 找到index,用set方法更新
        Older find = findById(older.getId()); // 根據(jù)ID定位老人
        if (Objects.isNull(find)){
            throw new NotFoundOlderException("404異常,該老人信息不存在,無法修改");
        }
        // 記錄日志信息
        Logger.getLogger(this.getClass()).info("beforeUpdate: " + find);
        int index = list.indexOf(find);
        list.set(index,older);
        Logger.getLogger(this.getClass()).info("afterUpdate: "+older);
        // 刷新文件
        saveToFile();
    }

    @Override
    public Older findById(String id) {
        Older find = null;
        Iterator<Older> it = list.iterator();
        while (it.hasNext()){
            Older older = it.next();
            if (older.getId().equals(id)){
                find = older;
                break;
            }
        }
        return find;
    }

    @Override
    public List<Older> findAll() {
        return list;
    }

    @Override
    public void saveToFile() {
        // 從內(nèi)存寫入硬盤,輸出
        try {
            ObjectOutputStream out = new ObjectOutputStream(
                    new FileOutputStream("D:\\Myprogram\\idea-workspace\\Older_v2.6\\Older_v2.6\\src\\com\\woniuxy\\older\\resources\\older.dat")
            );
            out.writeObject(list);
            Logger.getLogger(OlderDaoImpl.class).info("save保存"+list.size()+"信息");
            out.flush();
            out.close();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    @Override
    public List<Older> loadFromFile() {
        // 從硬盤讀入內(nèi)存,輸入
        List<Older> loadList = null;
        try {
            ObjectInputStream in = new ObjectInputStream(
                    new FileInputStream(Config.getDatPath())
            );
            loadList = (List<Older>) in.readObject();
            in.close();

        } catch (IOException | ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
        return loadList;

    }
}

2.通過JDBC存儲到數(shù)據(jù)庫

參考下面文章:

java連接SQL數(shù)據(jù)庫 & 單例封裝數(shù)據(jù)庫

【測試】用junit進(jìn)行測試:@Test注解

java項目dao層,Java,java,ui,開發(fā)語言java項目dao層,Java,java,ui,開發(fā)語言
java項目dao層,Java,java,ui,開發(fā)語言

Service層—處理業(yè)務(wù)

1.項目設(shè)計分層初步

引入前端后,MVC模型:視圖,模型,控制器
java項目dao層,Java,java,ui,開發(fā)語言java項目dao層,Java,java,ui,開發(fā)語言

java項目dao層,Java,java,ui,開發(fā)語言

2.service處理業(yè)務(wù)相關(guān)

一個求職者和應(yīng)聘者登陸和注冊的業(yè)務(wù)接口

package com.qianbaidu.recruit.service;

import com.qianbaidu.recruit.entity.Boss;
import com.qianbaidu.recruit.entity.Emp;

/**
 * 用戶登陸的服務(wù)接口
 */
public interface ILoginService {
    boolean login(String role);
    boolean sign(String role);

    // 返回登陸后的id,默認(rèn)的id為-1,或者null
    // 0老板,1應(yīng)聘者;-1,未登錄成功,登陸成功返回id
    String[] execute();


}

3.和UI層以及dao層進(jìn)行交互

java項目dao層,Java,java,ui,開發(fā)語言

UI層界面—控制臺,單例模式

java項目dao層,Java,java,ui,開發(fā)語言

1.創(chuàng)建單例的方法

創(chuàng)建單例的方法

2.頁面的實現(xiàn)

用枚舉的方式實現(xiàn)單例

package com.qianbaidu.recruit.ui;

import java.util.List;
import java.util.Scanner;
import java.util.Set;

public enum ApplicantMenuUI {
    APPLY_UI;
    
    private Scanner sc;


    private ApplicantMenuUI(){
        sc = new Scanner(System.in);
    }
    
    
    // 主界面 公司查詢,信息修改,職位查詢,企業(yè)打分
    public String appExecuteUI(){
        System.out.println("------------------歡迎您進(jìn)入 眾里尋他 招聘信息網(wǎng)站的 應(yīng)聘者主界面------------------------");
        System.out.println("1.進(jìn)行個人信息修改");
        System.out.println("2.進(jìn)行公司的查詢");
        System.out.println("3.進(jìn)行職位的查詢");
        System.out.println("4.查看個人申請記錄");
        System.out.println("5.對企業(yè)進(jìn)行評分");
        System.out.println("0.返回上一級界面");
        return sc.nextLine();
    }

}

Exception層----異常的處理

(1)自定義異?!脩舻顷懏惓?/p>

package com.qianbaidu.recruit.exception;

/**
 * 402異常,用戶登陸異常
 */
public class LoginIllegalException extends RuntimeException{
    public LoginIllegalException(String message) {
        super(message);
    }
}

(2)使用異常類進(jìn)行登陸驗證

    private Emp loginEmp(){
        // 用戶名錯誤
        String[] loginInput = LoginMenu.loginUI("1");//(企業(yè)0,求職者1)
        if (dao.findEmpByLoginName(loginInput[0])==null){
            throw new LoginNameNotFoundException("404異常,用戶名"+loginInput[1]+"不存在,請注冊");
        }
        Emp loginEmpLoginNameTrue = dao.findEmpByLoginName(loginInput[0]);
        // 用戶名/密碼錯誤
        if (dao.findEmpLoginNameAndPassword(loginInput[0],loginInput[1])==null){
            throw new LoginIllegalException("405異常,用戶名|密碼錯誤,請重新輸入+" + loginEmpLoginNameTrue.getUsername());
        }
        Emp loginEmp = dao.findEmpLoginNameAndPassword(loginInput[0],loginInput[1]);
        Logger.getLogger(this.getClass()).info("應(yīng)聘者用戶 "+loginEmp.getUsername()+" 登陸");
        return loginEmp;
    }

Test測試層----dao和service可測

1.dao的測試

Dao層的測試,用junit4

package com.tianju.older.test;

import com.tianju.older.dao.IOlderDao;
import com.tianju.older.dao.impl.OlderDaoImpl;
import com.tianju.older.entity.Older;
import org.junit.Test;

import java.text.ParseException;
import java.text.SimpleDateFormat;

/**
 * dao的測試類
 */
public class OlderDaoImplTest {
    private IOlderDao dao = new OlderDaoImpl();
    private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");

    @Test
    public void save() throws ParseException {
        dao.save(new Older("1", "小王", 28, sdf.parse("2023-04-07")));
        dao.save(new Older("2", "小張", 26, sdf.parse("2023-05-07")));
        dao.save(new Older("3", "小李", 24, sdf.parse("2021-06-07")));
        dao.save(new Older("3", "小鵬", 24, sdf.parse("2022-04-10")));
        System.out.println(dao.findAll());
    }


    @Test
    public void loadFromFile() {
        System.out.println(dao.loadFromFile());
        System.out.println(dao.findAll());
    }

    @Test
    public void delete() {
        dao.loadFromFile();
        System.out.println(dao.findAll());
        // 刪除
        dao.delete(new Older("2",null,null,null));
        // 刪除是否保存成功
        System.out.println(dao.loadFromFile());

    }
}

2.service結(jié)合UI測試

如果涉及到控制臺的輸入,則不能用junit

package com.qianbaidu.recruit.test;

import com.qianbaidu.recruit.dao.IApplicantDao;
import com.qianbaidu.recruit.dao.impl.ApplicantDaoImpl;
import com.qianbaidu.recruit.service.IApplicantService;
import com.qianbaidu.recruit.service.impl.ApplicantServiceImpl;

public class ApplyMainTest {
    public static void main(String[] args) {
        IApplicantService ias = new ApplicantServiceImpl();
        while (true){
            ias.execute(1);
        }
    }
}

resource層-----配置文件,數(shù)據(jù)文件

java項目dao層,Java,java,ui,開發(fā)語言
可以參考下面博客:

IO流及其項目應(yīng)用初步

在本控制臺項目中,resources文件夾包括以下文件

  • 戶名密碼存儲的文件,login.properties文件;
  • log4j日志記錄文檔,log.log文件;
  • 保存數(shù)據(jù)信息的文件,older.dat文件;
    java項目dao層,Java,java,ui,開發(fā)語言

java項目dao層,Java,java,ui,開發(fā)語言

項目的日志—log4j

日志是文件,記錄一些信息。記錄重要的,登錄信息,操作,異常信息。

1.日志的級別

java項目dao層,Java,java,ui,開發(fā)語言

DEBUG: 項目開發(fā)人員的測試
INFO: 一般信息(開發(fā)人員,其他)
WARN: 警告(開發(fā)人員警告使用者)
ERROR: 系統(tǒng)比較嚴(yán)重問題
FATAL: 非常嚴(yán)重的問題

控制的日志可見性
java項目dao層,Java,java,ui,開發(fā)語言

2.日志的配置和使用

其中的log4j配置文件目錄和內(nèi)容如下:

java項目dao層,Java,java,ui,開發(fā)語言
配置文件內(nèi)容:

log4j.rootLogger=DEBUG,Console,F
#顯示在控制臺
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout 
log4j.appender.Console.layout.ConversionPattern=[%p],%d{yyyy-MM-dd HH:mm:ss},[%t],%rms,[%m]%n
#在文件輸出
log4j.appender.F=org.apache.log4j.RollingFileAppender
log4j.appender.F.File=d:\\log.log
log4j.appender.F.layout=org.apache.log4j.PatternLayout 
log4j.appender.F.layout.ConversionPattern=[%p],%d{yyyy-MM-dd HH:mm:ss},[%t],%rms,[%m]%n

util層—工具,DbUtil,常量

1.枚舉的使用

枚舉類型作用
替代常量的。編碼規(guī)范: 魔鬼常量

if(choice == 1)

switch(a){

case 1:

? break;

}

java項目dao層,Java,java,ui,開發(fā)語言
枚舉的定義代碼:

package com.tianju.older.util;

/**
 * 業(yè)務(wù)的選擇
 * 登陸后選擇,1.錄入老人信息;2.修改老人信息;3.刪除老人信息;4.查詢老人信息;0.返回登陸界面
 */
public enum Choice {
    ADD_MES,UPDATE_MES,DELETE_MES,QUERY_ALL,BACK_LOGIN;

    /**
     * 根據(jù)客戶輸入的數(shù)字轉(zhuǎn)換成枚舉類型
     * @param ch 輸入的數(shù)字
     * @return 轉(zhuǎn)換成的枚舉類型
     */
    public static Choice get(String ch){
        if (ch.equals("1")){
            return ADD_MES;
        }else if (ch.equals("2")){
            return UPDATE_MES;
        } else if (ch.equals("3")){
            return DELETE_MES;
        } else if (ch.equals("4")){
            return QUERY_ALL;
        }else {
            return BACK_LOGIN;
        }
    }
}

使用枚舉類型代替魔鬼常量:

比如在頁面里讓用戶在控制臺輸入,0~4進(jìn)行操作選擇

public static String welcome(){
        System.out.println("-------------------歡迎進(jìn)入老人信息管理系統(tǒng)-------------------");
        // 登陸后選擇,1.錄入老人信息;2.修改老人信息;3.刪除老人信息;4.查詢老人信息;0.返回登陸界面
        System.out.println("1.錄入老人信息");
        System.out.println("2.修改老人信息");
        System.out.println("3.刪除老人信息");
        System.out.println("4.查詢老人信息");
        System.out.println("0.返回登陸界面");
        System.out.println("-----------------------------------------");
        System.out.print("請輸入選擇:");
        // 正則表達(dá)式判斷
        String in = sc.nextLine();
        String regex = "[0-4]{1}";
        if (!in.matches(regex)){
            System.out.println("輸入錯誤,請輸入0-4之間的數(shù)字");
        }
        return in;
    }

然后在這里用枚舉代替魔鬼常量,讓代碼可讀性增強(qiáng);

 private void welcome(){
        boolean isContinue = true;
        while (isContinue) {
            String ch = OlderMenu.welcome();
            Choice c = Choice.get(ch);
            switch (c){
                case ADD_MES:
                    addOlder();
                    break;
                case UPDATE_MES:
                    updateOlder();
                    break;
                case DELETE_MES:
                    deleteOlder();
                    break;
                case QUERY_ALL:
                    findAll();
                    break;
                case BACK_LOGIN:
                    isContinue = false;
                    System.out.println("------------再見,歡迎再次登陸------------");
                    break;
            }
        }
    }

2.常量的定義

比如下面,用數(shù)字0~3來表示公司規(guī)模為1-20人,20-100人,100-500人,以及大于500人這幾種公司規(guī)模

package com.qianbaidu.recruit.util;

import com.qianbaidu.recruit.exception.InputIllegalException;

public class Constance {
    public final static String COMPANY_LESS20 = "1~20人";
    public final static String COMPANY_LESS100 = "20~100人";
    public final static String COMPANY_LESS500 = "100~500人";
    public final static String COMPANY_MORE500 = "大于500人";

    public static String showCompanySize(int size){
        if (size==0){
            return COMPANY_LESS20;
        }else if(size==1){
            return COMPANY_LESS100;
        }else if (size==2){
            return COMPANY_LESS500;
        }else if (size==3){
            return COMPANY_MORE500;
        }
        return null;
    }
}

在公司信息的實體類的toString方法中調(diào)用showCompanySize()方法把數(shù)字轉(zhuǎn)成常量對應(yīng)的中文;

    @Override
    public String toString() {
        return "\nCompany{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", size=" + Constance.showCompanySize(size) +
                ", address='" + address + '\'' +
                ", type='" + type + '\'' +
                ", web='" + web + '\'' +
                ", phone='" + phone + '\'' +
                ", person='" + person + '\'' +
                ", desc='" + desc + '\'' +
                ", rate=" + rate +
                ", rates=" + rates +
                '}';
    }

3.DbUtil

參考下面文章:

java連接SQL數(shù)據(jù)庫 & 單例封裝數(shù)據(jù)庫


總結(jié)

1.關(guān)于控制臺項目中使用到Java基礎(chǔ)知識;
2.實體類和dao層,增刪改查CRUD分離,從IO流到JDBC,SQL語句;
3.dao層和service層,dao層和數(shù)據(jù)庫交互,service層處理業(yè)務(wù),初步了解程序設(shè)計思想;
4.測試:dao層和service層的方法要可測,@Test注解,涉及控制臺輸入不能用@Test;
5.控制臺的UI層處理控制臺的輸入,學(xué)習(xí)單例創(chuàng)建UI類的方法;
6.異常類,用自定義異常處理業(yè)務(wù),初步學(xué)習(xí)Java的異常機(jī)制;
7.配置文件,resources層,用配置文件實現(xiàn)程序解耦,初步了解程序設(shè)計思想;
8.日志文件:log4j的配置,軟件要有日志,日志的級別;
9.工具類:枚舉類的使用,常量的定義,JDBC封裝方式,創(chuàng)建單例的三種方法;文章來源地址http://www.zghlxwxcb.cn/news/detail-696302.html

到了這里,關(guān)于Java基礎(chǔ)(項目1)——項目設(shè)計分層 & dao + service + test +ui + exception + log + util的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • SpringBoot(入門)三層架構(gòu)Controller、Service、Dao

    SpringBoot(入門)三層架構(gòu)Controller、Service、Dao

    SpringB是一個基于Java的開源框架,用于創(chuàng)建微服務(wù)。它由Pivotal Team開發(fā),用于構(gòu)建獨立的生產(chǎn)就緒Spring應(yīng)用。?SpringBoot?的設(shè)計是為了讓你盡可能快的跑起來 Spring 應(yīng)用程序并且盡可能減少你的配置文件,簡化開發(fā)。 Controller層:(顧名思義 控制層)控制并處理http請求,將其不

    2024年02月07日
    瀏覽(19)
  • Spring Boot集成單元測試調(diào)用dao,service

    Spring Boot集成單元測試調(diào)用dao,service

    溫馨提示:本人開發(fā)上線視頻網(wǎng)站,有想要的看視頻的,可以看看。小松鼠

    2024年02月14日
    瀏覽(22)
  • 【JavaEE基礎(chǔ)學(xué)習(xí)打卡07】JDBC之應(yīng)用分層設(shè)計淺嘗!

    【JavaEE基礎(chǔ)學(xué)習(xí)打卡07】JDBC之應(yīng)用分層設(shè)計淺嘗!

    ?? 本系列教程適用于JavaWeb初學(xué)者、愛好者,小白白。我們的天賦并不高,可貴在努力,堅持不放棄。堅信量最終引發(fā)質(zhì)變,厚積薄發(fā)。 ?? 文中白話居多,盡量以小白視角呈現(xiàn),幫助大家快速入門。 ?? 我是 蝸牛老師 ,之前網(wǎng)名是 Ongoing蝸牛 ,人如其名,干啥都慢,所以

    2024年02月09日
    瀏覽(25)
  • Java架構(gòu)師設(shè)計模式分層架構(gòu)

    Java架構(gòu)師設(shè)計模式分層架構(gòu)

    想學(xué)習(xí)架構(gòu)師構(gòu)建流程請?zhí)D(zhuǎn):Java架構(gòu)師系統(tǒng)架構(gòu)設(shè)計 設(shè)計模式的分層架構(gòu)是一種常見的軟件設(shè)計模式,它將應(yīng)用程序劃分為不同的層次,以便更好地組織和管理代碼。每個層次

    2024年02月01日
    瀏覽(20)
  • Dao層、Service層、Entity層、Servlet層、Utils層

    Dao層、Service層、Entity層、Servlet層、Utils層

    這幾天在復(fù)習(xí)高數(shù),還有刷題。 B: 第五周任務(wù) [Cloned] - Virtual Judge (vjudge.net) http://t.csdn.cn/S3imr? G: 第五周任務(wù) [Cloned] - Virtual Judge (vjudge.net) http://t.csdn.cn/UVgfK ? Dao層是數(shù)據(jù)訪問層 Service層是業(yè)務(wù)邏輯層 Entity層是實體層 Servlet層是控制層 Utils層是工具類層 分層架構(gòu)沒有規(guī)定自

    2024年02月09日
    瀏覽(20)
  • 【Java】網(wǎng)絡(luò)通信基礎(chǔ)、協(xié)議分層及封裝分用

    【Java】網(wǎng)絡(luò)通信基礎(chǔ)、協(xié)議分層及封裝分用

    網(wǎng)絡(luò)互連的目的是進(jìn)行網(wǎng)絡(luò)通信,也就是網(wǎng)絡(luò)數(shù)據(jù)傳輸,更具體一點,是網(wǎng)絡(luò)主機(jī)中的不同進(jìn)程間基于網(wǎng)絡(luò)來傳輸數(shù)據(jù)。 ip地址表示了主機(jī)在網(wǎng)絡(luò)上的地址,類似于收發(fā)快遞時的收件人地址和發(fā)件人地址。 端口號表示了主機(jī)中某一個進(jìn)程,使用網(wǎng)絡(luò)的進(jìn)程在啟動時系統(tǒng)會分配

    2024年02月11日
    瀏覽(14)
  • 使用mybatisX逆向生成數(shù)據(jù)表實體類(pojo,dao),mapper,service

    使用mybatisX逆向生成數(shù)據(jù)表實體類(pojo,dao),mapper,service

    先看使用mybatisX后生成的文件。 1.先在idea安裝mybatisX插件,在file-setting-plugins,搜索mybatisX插件,重新啟動idea即可。 2.在idea編輯器右側(cè)點擊Database,點擊“+”鏈接你的數(shù)據(jù)庫類型,這里我選mysql。 ? ? 輸入root,密碼:xxxx 輸入url:jdbc:mysql://localhost:3306/emos?useUnicode=truecharacterEnc

    2024年02月03日
    瀏覽(19)
  • Springboot三層架構(gòu)--DAO層、Service層、Colltroler層--這波我在外太空

    Springboot三層架構(gòu)--DAO層、Service層、Colltroler層--這波我在外太空

    目錄 1.DAO層 Dao層的設(shè)計 2.Service層 Service層的設(shè)計 設(shè)計Service層的優(yōu)點 ?Dao與Service的關(guān)系 3.Colltroler層 Collertroler層的設(shè)計 4.項目中的具體流程 ????????全稱 數(shù)據(jù)訪問層 ,全稱data access object,屬于一種比較底層,比較基礎(chǔ)的操作。具體到對于某個表、某個實體類的增刪改查,

    2024年02月08日
    瀏覽(25)
  • spring boot,DAO層、ENTITY層、SERVICE層、CONTROLLER層之間的關(guān)系

    spring boot,DAO層、ENTITY層、SERVICE層、CONTROLLER層之間的關(guān)系

    主要用于 定義與數(shù)據(jù)庫對象應(yīng)的屬性,提供get/set方法 ,tostring方法,有參無參構(gòu)造函數(shù)。 DAO層 首先會創(chuàng)建Dao接口 , 接著就可以在配置文件中定義該接口的實現(xiàn)類 ;接著就可以在模塊中調(diào)用Dao的接口進(jìn)行數(shù)據(jù)業(yè)務(wù)的處理,而不用關(guān)注此接口的具體實現(xiàn)類是哪一個類,Dao層的數(shù)

    2024年04月10日
    瀏覽(27)
  • system service exception藍(lán)屏

    system service exception藍(lán)屏

    電腦藍(lán)屏 問題是用戶最為頭疼的問題之一,而一般藍(lán)屏問題都會有一個藍(lán)屏終止代碼也就是我們的常說的錯誤代碼。那么如果遇到SYSTEM_SERVICE_EXCEPTION藍(lán)屏怎么辦呢? 解決方法一: 1、使用 Windows鍵+R打開運行,輸入“control.exe”,點擊確定,如下圖: 2、選擇“電源選項”,如

    2024年02月12日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包