通过AI自动生成springboot的CRUD以及单元测试与压力测试源码(一)

本篇文章分为三个部分,即:
通过AI自动生成springboot的CRUD以及单元测试与压力测试源码(一)
通过AI自动生成springboot的CRUD以及单元测试与压力测试源码(二)
通过AI自动生成springboot的CRUD以及单元测试与压力测试源码(完整版)


文章目录


在现代软件开发中,快速生成高质量的代码是提高开发效率的关键。SpringBoot作为Java生态中最流行的框架之一,广泛应用于企业级应用开发。然而,手动编写CRUD(创建、读取、更新、删除)操作及其单元测试和压力测试代码往往耗时且容易出错。本文将介绍如何通过AICoder插件自动生成SpringBoot技术栈的CRUD代码及其单元测试和压力测试源码,从而大幅提升开发效率。

本示例使用的是AICoder插件,同类的还有如下所示:

  • 代码补全与生成: GitHub Copilot、Tabnine
  • 代码质量分析: SonarQube、DeepCode
  • 代码生成与模板化: JHipster、Spring AI
  • 代码重构与优化: IntelliJ IDEA、Eclipse Code Recommenders
  • 文档生成: Javadoc AI、Documatic
  • 测试代码生成: Diffblue Cover、EvoSuite
  • 代码翻译与迁移: Java to Kotlin 转换器、TransCoder

如果你需要一个功能全面、易于集成的工具,GitHub Copilot 和 IntelliJ IDEA 是最佳选择。它们可以帮助你完成从代码补全到重构的整个开发流程。

一、AICoder插件简介

AICoder是一款基于人工智能的代码生成工具,能够根据开发者的需求自动生成高质量的代码。它支持多种编程语言和框架,包括Java、SpringBoot、Python等。通过AICoder,开发者可以快速生成CRUD操作、单元测试和压力测试代码,减少手动编写代码的工作量。

二、环境准备

在开始之前,确保你已经安装了以下工具:

  • JDK 1.8或更高版本
  • Maven 3.x
  • IntelliJ IDEA或VS code
  • AICoder插件(可通过IDE插件市场安装)
  • mysql

三、自动生成CRUD代码

1、创建SpringBoot项目

在IntelliJ IDEA创建一个maven项目,其他的都可以不需要。目录结构如下:

上图中的htmlReport是覆盖率测试的报告,初始创建的时候是没有了。

2、通过AiCoder生成代码

在aicoder的对话框内输入指令"生成以springboot、mysql技术的curd",然后aicoder就自动的开始生成代码来,示例如下图。

生成的代码如下

  • User 实体类
java 复制代码
package com.example.demo.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private int age;
    private String email;

    // 无参构造函数
    public User() {}

    // 有参构造函数
    public User(Long id, String name, int age, String email) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.email = email;
    }

    // Getter 和 Setter 方法
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}
  • UserRepository 接口
java 复制代码
package com.example.demo.repository;

import com.example.demo.model.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}
  • UserService 服务类
java 复制代码
package com.example.demo.service;

import com.example.demo.model.User;
import com.example.demo.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    /**
     * 创建用户
     * @param user 用户对象
     * @return 创建的用户对象
     */
    public User createUser(User user) {
        return userRepository.save(user);
    }

    /**
     * 获取所有用户
     * @return 用户列表
     */
    public List<User> getAllUsers() {
        return userRepository.findAll();
    }

    /**
     * 通过ID获取用户
     * @param id 用户ID
     * @return 可选的用户对象
     */
    public Optional<User> getUserById(Long id) {
        return userRepository.findById(id);
    }

    /**
     * 更新用户
     * @param id 用户ID
     * @param user 更新后的用户对象
     * @return 更新后的用户对象
     */
    public Optional<User> updateUser(Long id, User user) {
        Optional<User> existingUser = userRepository.findById(id);
        if (existingUser.isPresent()) {
            User updatedUser = existingUser.get();
            updatedUser.setName(user.getName());
            updatedUser.setAge(user.getAge());
            updatedUser.setEmail(user.getEmail());
            return Optional.of(userRepository.save(updatedUser));
        }
        return Optional.empty();
    }

    /**
     * 删除用户
     * @param id 用户ID
     */
    public void deleteUser(Long id) {
        userRepository.deleteById(id);
    }
}
  • UserController 控制器类
java 复制代码
package com.example.demo.controller;

import com.example.demo.model.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Optional;

@RestController
@RequestMapping("/users")
public class UserController {
    @Autowired
    private UserService userService;

    /**
     * 创建用户
     * @param user 用户对象
     * @return 创建的用户对象
     */
    @PostMapping
    public User createUser(@RequestBody User user) {
        return userService.createUser(user);
    }

    /**
     * 获取所有用户
     * @return 用户列表
     */
    @GetMapping
    public List<User> getAllUsers() {
        return userService.getAllUsers();
    }

    /**
     * 通过ID获取用户
     * @param id 用户ID
     * @return 用户对象
     */
    @GetMapping("/{id}")
    public ResponseEntity<User> getUserById(@PathVariable Long id) {
        Optional<User> user = userService.getUserById(id);
        if (user.isPresent()) {
            return ResponseEntity.ok(user.get());
        } else {
            return ResponseEntity.notFound().build();
        }
    }

    /**
     * 更新用户
     * @param id 用户ID
     * @param user 更新后的用户对象
     * @return 更新后的用户对象
     */
    @PutMapping("/{id}")
    public ResponseEntity<User> updateUser(@PathVariable Long id, @RequestBody User user) {
        Optional<User> updatedUser = userService.updateUser(id, user);
        if (updatedUser.isPresent()) {
            return ResponseEntity.ok(updatedUser.get());
        } else {
            return ResponseEntity.notFound().build();
        }
    }

    /**
     * 删除用户
     * @param id 用户ID
     * @return 删除操作的状态
     */
    @DeleteMapping("/{id}")
    public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
        userService.deleteUser(id);
        return ResponseEntity.noContent().build();
    }
}
  • 应用启动类
java 复制代码
package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}
  • 应用配置文件 application.properties
bash 复制代码
spring.datasource.url=jdbc:mysql://localhost:3306/demo_db
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
  • 依赖管理 pom.xml
xml 复制代码
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>
  • 数据库表结构
sql 复制代码
CREATE DATABASE demo_db;

USE demo_db;

CREATE TABLE users (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    age INT NOT NULL,
    email VARCHAR(255) NOT NULL
);
  • 运行应用

    确保 MySQL 服务已经启动,并且 demo_db 数据库已经创建。

    运行 Spring Boot 应用。

    使用 Postman 或其他 HTTP 客户端测试 CRUD 操作。

  • 测试 CRUD 操作

bash 复制代码
创建用户:  
POST /users
Content-Type: application/json

{
  "name": "张三",
  "age": 30,
  "email": "zhangsan@example.com"
}
获取所有用户:  
GET /users
通过ID获取用户:  
GET /users/1
更新用户:  
PUT /users/1
Content-Type: application/json

{
  "name": "李四",
  "age": 35,
  "email": "lisi@example.com"
}
删除用户:  
DELETE /users/1

通过以上的步骤就可以完成了代码生成,根据自己的需要进行局部调整就可以正式的使用了。

如果想了解下文,根据下文链接进行查看。

本篇文章分为三个部分,即:
通过AI自动生成springboot的CRUD以及单元测试与压力测试源码(一)
通过AI自动生成springboot的CRUD以及单元测试与压力测试源码(二)
通过AI自动生成springboot的CRUD以及单元测试与压力测试源码(完整版)

相关推荐
NAGNIP43 分钟前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
冬奇Lab2 小时前
一天一个开源项目(第36篇):EverMemOS - 跨 LLM 与平台的长时记忆 OS,让 Agent 会记忆更会推理
人工智能·开源·资讯
冬奇Lab2 小时前
OpenClaw 源码深度解析(一):Gateway——为什么需要一个"中枢"
人工智能·开源·源码阅读
AngelPP6 小时前
OpenClaw 架构深度解析:如何把 AI 助手搬到你的个人设备上
人工智能
宅小年6 小时前
Claude Code 换成了Kimi K2.5后,我再也回不去了
人工智能·ai编程·claude
九狼6 小时前
Flutter URL Scheme 跨平台跳转
人工智能·flutter·github
ZFSS6 小时前
Kimi Chat Completion API 申请及使用
前端·人工智能
天翼云开发者社区7 小时前
春节复工福利就位!天翼云息壤2500万Tokens免费送,全品类大模型一键畅玩!
人工智能·算力服务·息壤
知识浅谈7 小时前
教你如何用 Gemini 将课本图片一键转为精美 PPT
人工智能
Ray Liang8 小时前
被低估的量化版模型,小身材也能干大事
人工智能·ai·ai助手·mindx