{{userInfo.nickname}}
用户设置 退出登录

{{wikiTitle}}

新增功能模块

新增功能模块

从创建数据表到实现最基础增删改查的实现过程
很多使用了JAVA单商户系统的童鞋在进行二开的时候,都会遇到新建了数据表之后不知道对数据表怎么进行操作。那么,这篇文章将带你完整的实现一遍,以后就不会怕啦。

一、创建数据表

SQL 脚本示例:

CREATE TABLE student (
    id INT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
    name VARCHAR(50) NOT NULL COMMENT '姓名',
    age INT COMMENT '年龄',
    gender TINYINT COMMENT '性别(0:女, 1:男)',
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    is_deleted TINYINT DEFAULT 0 COMMENT '软删除标记(0:未删除, 1:已删除)'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学生表';

二、创建实体类(Model)

目录: src/main/java/com/zbkj/admin/entity
文件: Student.java

import lombok.Data;
import org.hibernate.annotations.SQLDelete;
import org.hibernate.annotations.Where;
import javax.persistence.*;
import java.time.LocalDateTime;

@Data
@Entity
@Table(name = "student")
@SQLDelete(sql = "UPDATE student SET is_deleted = 1 WHERE id = ?") // 软删除注解
@Where(clause = "is_deleted = 0") // 默认过滤已删除数据
public class Student {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @Column(name = "name", nullable = false, length = 50)
    private String name;

    @Column(name = "age")
    private Integer age;

    @Column(name = "gender")
    private Integer gender;

    @Column(name = "create_time", updatable = false)
    private LocalDateTime createTime;

    @Column(name = "is_deleted", insertable = false)
    private Integer isDeleted;
}

说明:

使用 @ Entity 和 @ Table 映射数据库表。

@ SQLDelete 和 @ Where 实现软删除逻辑。

@ Column 注解定义字段属性。

三、创建 DAO 层(Repository)

目录: src/main/java/com/zbkj/admin/repository
文件: StudentRepository.java

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.zbkj.admin.entity.Student;

@Repository
public interface StudentRepository extends JpaRepository<Student, Integer> {
    // 分页查询(继承默认方法)
    Page<Student> findAll(Pageable pageable);

    // 自定义条件查询(示例:按姓名模糊查询)
    Page<Student> findByNameContaining(String name, Pageable pageable);
}

四、创建 Service 层

目录: src/main/java/com/zbkj/admin/service
接口文件: StudentService.java

import org.springframework.data.domain.Page;
import com.zbkj.admin.entity.Student;

public interface StudentService {
    Student addStudent(Student student);
    Student getStudentById(Integer id);
    Page<Student> listStudents(int page, int size, String name);
    Student updateStudent(Student student);
    void deleteStudent(Integer id);
}

实现类文件: StudentServiceImpl.java

import com.zbkj.admin.repository.StudentRepository;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;

@Service
@Transactional
public class StudentServiceImpl implements StudentService {
    private final StudentRepository studentRepository;

    public StudentServiceImpl(StudentRepository studentRepository) {
        this.studentRepository = studentRepository;
    }

    @Override
    public Student addStudent(Student student) {
        return studentRepository.save(student);
    }

    @Override
    public Student getStudentById(Integer id) {
        return studentRepository.findById(id)
                .orElseThrow(() -> new RuntimeException("学生不存在"));
    }

    @Override
    public Page<Student> listStudents(int page, int size, String name) {
        PageRequest pageable = PageRequest.of(page, size);
        if (name != null && !name.isEmpty()) {
            return studentRepository.findByNameContaining(name, pageable);
        } else {
            return studentRepository.findAll(pageable);
        }
    }

    @Override
    public Student updateStudent(Student student) {
        if (student.getId() == null) {
            throw new RuntimeException("更新操作必须包含ID");
        }
        return studentRepository.save(student);
    }

    @Override
    public void deleteStudent(Integer id) {
        studentRepository.deleteById(id); // 物理删除
        // 若需软删除,调用 studentRepository.softDeleteById(id);
    }
}

五、创建 Controller 层

目录: src/main/java/com/zbkj/admin/controller
文件: StudentController.java

import org.springframework.web.bind.annotation.*;
import org.springframework.data.domain.Page;
import com.zbkj.admin.entity.Student;
import com.zbkj.admin.service.StudentService;

@RestController
@RequestMapping("/api/student")
public class StudentController {
    private final StudentService studentService;

    public StudentController(StudentService studentService) {
        this.studentService = studentService;
    }

    @PostMapping
    public Student addStudent(@RequestBody Student student) {
        return studentService.addStudent(student);
    }

    @GetMapping("/{id}")
    public Student getStudentById(@PathVariable Integer id) {
        return studentService.getStudentById(id);
    }

    @GetMapping("/list")
    public Page<Student> listStudents(
            @RequestParam(defaultValue = "0") int page,
            @RequestParam(defaultValue = "10") int size,
            @RequestParam(required = false) String name
    ) {
        return studentService.listStudents(page, size, name);
    }

    @PutMapping
    public Student updateStudent(@RequestBody Student student) {
        return studentService.updateStudent(student);
    }

    @DeleteMapping("/{id}")
    public void deleteStudent(@PathVariable Integer id) {
        studentService.deleteStudent(id);
    }
}

职责说明:
entity.Student 数据表模型映射
repository.StudentRepository 数据库基础操作
service.StudentService 业务逻辑处理
controller.StudentController 接收请求,返回响应

{{cateWiki.like_num}}人点赞
0人点赞
评论({{cateWiki.comment_num}}) {{commentWhere.order ? '评论从旧到新':'评论从新到旧'}} {{cateWiki.page_view_num}}人看过该文档
评论(0) {{commentWhere.order ? '评论从旧到新':'评论从新到旧'}} 743人看过该文档
评论
{{item.user ? item.user.nickname : ''}} (自评)
{{item.content}}
{{item.create_time}} 删除
{{item.like ? item.like.like_num : 0}} {{replyIndex == index ? '取消回复' : '回复'}}
评论
{{items.user ? items.user.nickname : '暂无昵称'}} (自评)
{{items.content}}
{{items.create_time}} 删除
{{items.like ? items.like.like_num : 0}} {{replyIndexJ == (index+'|'+indexJ) ? '取消回复' : '回复'}}
评论
目录
  • {{item}}