成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MJGA:讓 Java 再次偉大!SpringBoot 能否硬剛 Gin?

開發 前端
為了驗證各自框架的優劣,我們決定通過一個“快速搭建 CRUD 工程”的實際開發任務來一較高下。我選擇使用 Spring Boot 搭配 MyBatis-Plus,而云先生則選擇 Gin 和 Gorm 組合。

隔壁組的云計算零零后男同事,后文簡稱云先生,是一位對技術充滿熱情的后浪開發者。他自信滿滿地向我推薦 Go 的 Gin 框架,認為它比 Java 的 Spring Boot 更加輕量、簡潔,尤其適合微服務場景下的快速開發。作為一名扎根 Java 技術棧多年的開發者,我自然不甘示弱。畢竟,Spring Boot 是 Java 生態中的標桿,憑借其豐富的生態體系和強大的社區支持,成為許多企業級項目的首選框架。

為了驗證各自框架的優劣,我們決定通過一個“快速搭建 CRUD 工程”的實際開發任務來一較高下。我選擇使用 Spring Boot 搭配 MyBatis-Plus,而云先生則選擇 Gin 和 Gorm 組合。任務要求在短時間內完成一個完整的增刪改查功能,并且需要評估開發效率、代碼簡潔度和框架的易用性。通過這個實踐,我們希望能夠更客觀地分析這兩種框架的優劣,并為開發者在選擇技術棧時提供一些參考。

準備事項

既然是 CRUD 工程,自然要先準備好操作的表。我和云先生分別在各自的數據庫中創建了如下兩張表:

CREATE TABLE people (
    id INT(11)PRIMARYKEYAUTO_INCREMENT,
    p_name VARCHAR(255)NOTNULL,
    p_age INT(11)NOTNULL
);

CREATETABLE book (
    id INT(11)PRIMARYKEYAUTO_INCREMENT,
    b_name VARCHAR(255)NOTNULL,
    b_price FLOATNOTNULL
);

Gin 快速搭建 CRUD 工程

云先生的工程結構如下所示:

Gin 目錄結構

gobase/
├── dao/
├── model/
├── mysql/
├── router/
└── main.go

云先生的 go.mod 文件內容如下:

module gobase

go 1.17

require (
    github.com/gin-gonic/gin v1.6.0
    github.com/jinzhu/gorm v1.9.16
    github.com/sirupsen/logrus v1.9.3
    github.com/spf13/cast v1.5.1
)

模型定義

云先生為 book 和 people 表分別定義了對應的模型結構體,分別在 model/book.go 和 model/people.go 文件中:

model/book.go

package model

const(
    BookTableName ="book"
)

type Book struct{
    ID       int64   `gorm:"column:id"`
    BookName string`gorm:"column:b_name"`
    BookPrice float64`gorm:"column:b_price"`
}

func(b *Book)TableName()string{
    return BookTableName
}

model/people.go

package model

const(
    PeopleTableName ="people"
)

type People struct{
    ID        int64`gorm:"column:id"`
    PeopleName string`gorm:"column:p_name"`
    PeopleAge  int64`gorm:"column:p_age"`
}

func(p *People)TableName()string{
    return PeopleTableName
}

Dao 層

云先生為 book 和 people 表分別定義了 Dao 接口及其實現,以下為 dao 文件夾下的部分代碼:

dao/book_dao_impl.go

package dao

import(
    "github.com/jinzhu/gorm"
    "gobase/model"
)

type BookDaoImpl struct{
    DB *gorm.DB
}

func(b *BookDaoImpl)AddBook(book *model.Book)error{
    if createResult := b.DB.Create(book); createResult.Error !=nil{
        return createResult.Error
    }
    returnnil
}

// 省略 UpdateBook、DeleteBook、ListBookById 的實現...

Spring Boot 快速搭建 CRUD 工程

Spring Boot 目錄結構

springboot-demo/
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com.icoderoad.demo/
│   │   │       ├── controller/
│   │   │       ├── entity/
│   │   │       ├── mapper/
│   │   │       ├── service/
│   │   │       └── service/impl/
│   │   └── resources/
│   └── test/

配置文件

application.yml 文件內容如下:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/demo
    username: root
    password: root
  mybatis-plus:
    mapper-locations: classpath:mapper/*.xml

數據表實體類

package com.icoderoad.demo.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

@Data
@TableName("book")
public class Book{
    private Long id;
    private String bName;
    private Double bPrice;
}

Mapper 接口

package com.example.demo.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.entity.Book;

public interface BookMapper extends BaseMapper<Book> {}

Service 實現

package com.icoderoad.demo.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.icoderoad.demo.entity.Book;
import com.icoderoad.demo.mapper.BookMapper;
import com.icoderoad.demo.service.BookService;
import org.springframework.stereotype.Service;

@Service
public class BookServiceImpl extends ServiceImpl<BookMapper, Book> implements BookService{}

Controller

package com.icoderoad.demo.controller;

import com.icoderoad.demo.entity.Book;
import com.icoderoad.demo.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/book")
public class BookController{

    @Autowired
    private BookService bookService;

    @PostMapping
    public String addBook(@RequestBody Book book){
        bookService.save(book);
        return"Book added successfully!";
    }

    @GetMapping("/{id}")
    public BookgetBook(@PathVariable Long id){
        return bookService.getById(id);
    }

    @GetMapping
    public List<Book>listBooks(){
        return bookService.list();
    }

    @PutMapping
    public String updateBook(@RequestBody Book book){
        bookService.updateById(book);
        return"Book updated successfully!";
    }

    @DeleteMapping("/{id}")
    public String deleteBook(@PathVariable Long id){
        bookService.removeById(id);
        return"Book deleted successfully!";
    }
}

總結

最后經過團隊投票,Spring Boot 和 Gin 各有優劣:

  • Gin 的確輕量化,但需要寫大量代碼。
  • Spring Boot 的生態更完善,代碼量少但配置復雜。

如果團隊追求快速迭代,Gin 是一個不錯的選擇;如果注重長期維護和擴展,Spring Boot 更加合適。你怎么看?

責任編輯:武曉燕 來源: 路條編程
相關推薦

2023-07-06 10:45:03

CIO領導力

2021-08-27 15:03:51

PythonC語言數組

2025-04-28 09:31:11

Springif 語句系統

2020-07-29 14:35:33

Garmin勒索軟件網絡攻擊

2022-12-14 17:37:04

車聯網自動駕駛

2015-09-28 14:27:12

硬編默認選擇

2011-10-27 21:32:01

蘋果喬布斯谷歌

2019-07-30 11:47:29

數據科學云計算機器學習

2020-02-12 16:49:49

數據科學技能云計算

2021-09-01 15:19:43

硬科技

2023-01-16 13:45:30

微軟谷歌

2021-11-04 18:27:02

緩存架構Eureka

2016-10-13 13:18:58

Devops云計算云策略

2016-03-14 11:40:51

深度學習大數據高性能計算

2010-10-20 11:06:27

公司

2015-05-07 13:30:04

2015-07-31 16:29:15

DockerJavaLinux

2011-01-20 07:16:48

Web程序員

2023-05-18 13:38:41

AI代碼機器人

2025-03-31 01:22:00

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久91精品国产一区二区三区 | 免费在线观看黄色av | 久久com | 视频一区二区中文字幕 | 台湾佬久久 | 国产在线精品一区二区三区 | 久久精品视频91 | 久久精品成人一区 | 国产日韩欧美一区二区 | 精品国产黄a∨片高清在线 成人区精品一区二区婷婷 日本一区二区视频 | 一区二区三区在线免费观看 | 国产欧美在线播放 | 人人做人人澡人人爽欧美 | 日韩免费视频一区二区 | 天天操天天射天天舔 | 操人网| 男人午夜视频 | 日韩国产免费 | 一区二区国产精品 | 中文字幕第100页 | 国产sm主人调教女m视频 | 国产精品亚洲成在人线 | 国产综合网址 | 日韩国产一区二区三区 | 成人三级电影 | 国产成人99久久亚洲综合精品 | 欧美精品1区2区3区 精品国产欧美一区二区 | 美女131mm久久爽爽免费 | 久久久久久99 | 精品三级在线观看 | 国产精品日韩一区 | 欧美黄视频 | 欧美精品一区在线观看 | 黄色一级电影在线观看 | 欧美日韩在线综合 | 91成人午夜性a一级毛片 | 天天射天天干 | 亚洲美女在线一区 | 欧美大片一区二区 | 在线观看黄色 | 天天天操操操 |