小工具知识网

当前位置: 首页 > 行业知识 > Spring boot增删查改

行业知识

Spring boot增删查改

2026-11-13 00:32:43 来源:互联网转载

目录

前言

一、项目结构

二、创建项目、运行环境

三、配置数据库

四、Model

五、Repository

六、Service

1、接口类

2、实现类

七、Controller

八、Web页面

1、index

2、new_food

3、update_food

九、Web页面展示

 十、总结


前言

Spring是一个开源框架,可以轻松创建独立的、生产级的基于 Spring 的应用程序,它可以尽可能减少你的配置文件,而且它不仅仅局限于服务器端开发,任何Java应用都能在简单性、可测试性和松耦合性等方面从Spring中获益。

一、项目结构

二、创建项目、运行环境

 

三、配置数据库

四、Model

model是存放实体的类,类中定义了多个类属性,这里一共给了五个属性,分别是:name、type、state、price、quantity

package com.example.food.model;import jakarta.persistence.*;import lombok.Data;@Data@Entity@Table(name = "Food")public class Food {    @Id    @GeneratedValue(strategy = GenerationType.IDENTITY)    private long id;    @Column(name = "name")    private String name;    @Column(name = "type")    private String type;    @Column(name = "state")    private String state;    @Column(name = "price")    private String price;    @Column(name = "quantity")    private String quantity;}

@GeneratedValue:为一个实体生成一个唯一标识的主键,在这里主键是id

@Column:标识实体类中属性与数据表中字段的对应关系。

@Data :可以提高代码的简洁性,并且自动装配get、set、toString、hashcoe、equals等方法。

@Table:一般用在pojo实体类的类名上,使用该注解后pojo类的属性会和对应的表字段做一个映射关系

五、Repository

Repository是接口层,相当于一个数据仓库,它可以用于底层数据的存取,在它的内部封装了数据查询和存储的逻辑。

package com.example.foodwork.repository;import com.example.foodwork.model.Food;import org.springframework.data.jpa.repository.JpaRepository;import org.springframework.stereotype.Repository;import java.util.List;@Repositorypublic interface FoodRepository extends JpaRepository {    List findAllByName(String name);}

@Repository:将类识别为Bean,并将所标注的类中抛出的数据访问异常封装为 Spring 的数据访问异常类型。

六、Service

Service是业务逻辑层,由对应的存放接口类和存放接口实现类组成,不直接对数据库进行操作,为controller层提供调用的方法,在这里我写了增删查改以及分页的五个方法。

1、接口类

package com.example.foodwork.service;import com.example.foodwork.model.Food;import org.springframework.data.domain.Page;import java.util.List;public interface FoodService {    // 获取所有的商品    List getAllFood();    // 新增或更新一样商品    void saveFood(Food food);    // 获取指定ID的商品    Food getFoodById(long id);    // 删除指定ID的商品    void deleteFoodById(long id);    // 查找某样商品    List findByName(String name);    // 更新    void updateFood(Food food);    // 分页    Page findPaginated(int pageNo, int pageSize, String sortField, String sortDirection);}

2、实现类

package com.example.foodwork.service;import com.example.foodwork.model.Food;import com.example.foodwork.repository.FoodRepository;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.domain.Page;import org.springframework.data.domain.PageRequest;import org.springframework.data.domain.Pageable;import org.springframework.data.domain.Sort;import org.springframework.stereotype.Service;import java.util.List;import java.util.Optional;@Servicepublic class FoodServiceImpl implements FoodService {    @Autowired    private FoodRepository foodRepository;    @Override    public List getAllFood(){        return foodRepository.findAll();    }    @Override    public void saveFood(Food food){        this.foodRepository.save(food);    }    @Override    public Food getFoodById(long id){        // 调用数据访问层查找指定ID的商品,返回Optional==(选择)对象        Optional optional = foodRepository.findById(id);        Food food = null;        // 如果存在指定id的商品        if (optional.isPresent()) {            // 从Optional对象中获取商品对象            food = optional.get();        } else {            // 否则抛出运行时异常            throw new RuntimeException("找不到商品ID :: " + id);        }        return food;    }    // 删除指定id的商品    @Override    public void deleteFoodById(long id){        this.foodRepository.deleteById(id);    }    @Override    public Page findPaginated(int pageNo, int pageSize, String sortField, String sortDirection) {        //设置排序参数,升序ASC/降序DESC?        Sort sort = sortDirection.equalsIgnoreCase(Sort.Direction.ASC.name())                ? Sort.by(sortField).ascending()                : Sort.by(sortField).descending();        //根据页号/每页记录数/排序依据返回某指定页面数据。        Pageable pageable = PageRequest.of(pageNo - 1, pageSize, sort);        return this.foodRepository.findAll(pageable);    }    @Override    public List findByName(String name) {        List goodsNames = foodRepository.findAllByName(name);        return goodsNames;    }    @Override    public void updateFood(Food food) {        foodRepository.save(food);    }}

@Service():在调用该service的时候只需要将该类注入接口中,表示给当前类命名一个别名,方便注入到其他需要用到的类中;不加的话,默认别名就是当前类名,但是首字母小写 。

@Override:重写,子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。

七、Controller

控制层模块,它是一个控制器类,在HTTP请求中获取信息,提取参数,并将其分发给不同的处理服务(service层),进行前端请求的处理,向前端返回service层处理后的数据。

package com.example.foodwork.controller;import com.example.foodwork.model.Food;import com.example.foodwork.service.FoodService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.domain.Page;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.*;import java.util.List;@Controllerpublic class FoodController {    @Autowired    private FoodService foodService;    @GetMapping("/")    public String viewHomePage(Model model) { return findPaginated(1, "name", "asc", model); }    @GetMapping("/showFoodForm")    public String showFoodForm(Model model) {        Food food = new Food();        model.addAttribute("food", food);        return "new_super";    }    @PostMapping("/saveFood")    public String saveFood(@ModelAttribute("food") Food food) {        foodService.saveFood(food);        return "redirect:/";    }    @GetMapping("/showFormForUpdate/{id}")    public String showFormForUpdate(@PathVariable(value = "id") long id, Model model) {        Food foods = foodService.getFoodById(id);        model.addAttribute("food", foods);        return "update_super";    }    @GetMapping("/deleteFood/{id}")    public String deleteFood(@PathVariable(value = "id") long id) {        this.foodService.deleteFoodById(id);        return "redirect:/";    }    @GetMapping("/query{newName}")    public String query(@PathVariable(value = "newName") String newName, Model model) {        List listGoodsNumber = foodService.findByName(newName);        model.addAttribute("listFood", listGoodsNumber);        return "index";    }    //获取分页数据    @GetMapping("/page/{pageNo}")    public String findPaginated(@PathVariable(value = "pageNo") int pageNo,                                @RequestParam("sortField") String sortField,                                @RequestParam("sortDir") String sortDir,                                Model model) {        int pageSize = 3;        Page page = foodService.findPaginated(pageNo, pageSize, sortField, sortDir);        List listFood = page.getContent();        model.addAttribute("currentPage", pageNo);        model.addAttribute("totalPages", page.getTotalPages());        model.addAttribute("totalItems", page.getTotalElements());        model.addAttribute("sortField", sortField);        model.addAttribute("sortDir", sortDir);        model.addAttribute("reverseSortDir", sortDir.equals("asc") ? "desc" : "asc");        model.addAttribute("listFood", listFood);        return "index";    }}

@Autowired :对类成员变量、方法及构造函数进行标注,完成自动装配的工作

@GetMapping:用于处理请求方法的GET类型

八、Web页面

1、index

            食品管理系统            

商品列表

新增

查找商品
搜索
回到商品列表 function queryFood() { var goodsName = document.getElementById("name-input").value; var url = "/query" + encodeURIComponent(goodsName); window.location.href = url; }
商品名称 商品类型 商品状态 商品价格 商品数量 功能
更新 删除
1}"> 商品总数: [[${totalItems}]] [[${i}]][[${i}]]    

2、new_food

            食品管理系统        

食品管理


上架新商品

保存
回到商品列表

3、update_food

            食品管理系统        

食品管理


更改商品

更改
返回到商品列表

九、Web页面展示

列表页面:

 

 添加页面:

 

更新页面:

 

 十、总结

 在这里简单的介绍了Springle Boot的增删查改,希望能给大家带来帮助,本人是个还在学习的小白,有不对的地方还请大家多多指点。

上一篇:揭秘CSS3技巧,一键去除点击后的边框,提升用户体验!

下一篇:dnf服务器在哪里?