在本教程中,我将探讨是否可以使用 ChatGPT 编写 Spring Boot 应用。
ChatGPT 到底能不能构建 Spring Boot 应用程序?
推荐阅读:ChatGPT生成网站
探讨这个问题,我既感到兴奋又害怕,高兴的是,以后通过ChatGPT可以生成应用,节约开发时间了,害怕的是担心未来我会不会失业。
什么是ChatGPT?
ChatGPT(Chat Generative Pre-trained Transformer)是由 OpenAI 开发并于 2022 年 11 月推出的聊天机器人。 它建立在 OpenAI 的 GPT-3 大型语言模型系列之上,并使用以下方法进行了微调(一种迁移学习方法)监督学习和强化学习技术。
ChatGPT 于 2022 年 11 月 30 日作为原型推出,并因其详细的响应和跨多个知识领域的清晰答案而迅速受到关注。 然而,其参差不齐的事实准确性被认为是一个重大缺陷。 ChatGPT 发布后,OpenAI 的估值估计为 290 亿美元。
什么是SpringBoot?
Spring Boot 为 Java 开发人员提供了一个很好的平台来开发可以直接运行的独立和生产级 spring 应用程序。 你可以从最少的配置开始,而不需要整个 Spring 配置设置。 (小白引导)
打开ChatGPT
生成一个符合自己需求的Spring Boot项目,提示语很重要。
本次输入的提示语:“在 Spring Boot 中创建与数据库对话的 REST API 所需的步骤列表是什么.”
ChatGPT的回答如下:
上面内容由于浏览器翻译的问题,出现了翻译上的误差,可以忽略。
具体内容如下:
在在 Spring Boot 中创建与数据库对话的 REST API 涉及以下步骤:
1. 设置开发环境:安装和配置必要的工具,包括 Java、Spring Boot 和数据库管理系统,如 MySQL、PostgreSQL 或 MongoDB。
2. 定义Entitye:确定将存储在数据库中的实体和关系,并使用 @Entity 和 @Id 等注释将它们定义为 Java 类。
3. 配置数据库连接:在application.properties文件或application.yml文件中配置数据库连接。
4. 创建Repository:定义一个扩展Spring Data的CrudRepository或JpaRepository接口的接口,并使用它对数据库进行CRUD(Create、Read、Update、Delete)操作。
5. 实现Controller:定义一个 REST 控制器,将 HTTP 请求映射到存储库中的适当方法。使用@GetMapping、@PostMapping、@PutMapping 和@DeleteMapping 等注解来处理HTTP 请求。
6. 测试 API:使用 Postman 等工具测试您的 API 端点并确保它们按预期工作。
7. 添加安全性:考虑向您的 API 添加安全功能,例如身份验证和授权,以保护您的数据。
8. 部署 API:将您的 API 部署到服务器,例如 Tomcat 或 Jetty,并使其可供用户使用。
请注意,这些步骤是一个高级概述,具体细节将取决于您项目的具体要求。。
接下来我们就根据上面的步骤来生成一个SpringBoot项目(以下过程严格按上面ChatGPT要求)
一、创建SpringBoot项目
上面ChatGPT回答中的第一步是:创建SpringBoot项目
1.打开IDEA创建一个SpringBoot项目
相关的配置项目如何选择?
点击next
创建完成
2.检查pom
新建的项目pom文件肯定是报错的,需要联网解析下相关的依赖
pom中的依赖就是我们创建项目选择的依赖:web、jpa、H2。如果一直还报错(网络不好,拉取不到),需要将本地maven仓库中的setting.xml中的maven镜像地址换成阿里的,下载速度明显很宽
二、创建SpringBoot项目
1.与ChatGPT对话生成Entity
ChatGPT告诉我们的第二步是定义Entity
本项目我们创建的是一个blog项目,我们定义一个文章实体post,
post实体属性通常为:
Post
- id
- title
- content
- slug
- dateCreated
- dateUpdated
接下来,我们在ChatGPT创建一个Post实体,包含:id title content slug dateCreated dateUpdated
关键的内容来,提示语很重要,我会这样告诉ChatGPT给我生成一个entity:
提示语:
创建包含以下属性的'Post'类型作为 Spring Boot实体
- id
- title
- content
- slug
- dateCreated
- dateUpdated
详细代码:
@Entity
@Table(name = "posts")
public class Post {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@Column(nullable = false)private String title;@Column(nullable = false, columnDefinition = "TEXT")private String content;@Column(nullable = false, unique = true)private String slug;@Column(name = "date_created")private LocalDateTime dateCreated;@Column(name = "date_updated")private LocalDateTime dateUpdated;// 构造函数、getter和setter
}
2.复制Entity
在 idea中创建一个model. Post.class 的Entity
Post类
三、配置数据库连接
spring.datasource.generate-unique-name=false
spring.datasource.name=blog
spring.h2.console.enabled=true
四、创建存储库
1.生成Repository
生成Post 类的Spring Repository提示语:
创建一个上面定义的 Post 类的Spring Repository并且继承自JpaRepository,并包括所有 CRUD 操作。
public interface PostRepository extends JpaRepository<Post, Long> {}
2.创建并且复制Repository
符合上面的要求,其中包含了CRUD,继承自JPARepository
五、实现Controller
1.生成Controller
利用ChatGPT生成Controller
提示语:定义一个 REST 控制器,将 HTTP 请求映射到存储库中的适当方法。 使用@GetMapping、@PostMapping、@PutMapping 和@DeleteMapping 等注解来处理HTTP 请求。
@RestController
@RequestMapping("/api/posts")
public class PostController {@Autowiredprivate PostRepository postRepository;@GetMappingpublic List<Post> getAllPosts() {return postRepository.findAll();}@GetMapping("/{id}")public ResponseEntity<Post> getPostById(@PathVariable(value = "id") Long postId)throws ResourceNotFoundException {Post post = postRepository.findById(postId).orElseThrow(() -> new ResourceNotFoundException("Post not found for this id :: " + postId));return ResponseEntity.ok().body(post);}@PostMappingpublic Post createPost(@Valid @RequestBody Post post) {return postRepository.save(post);}@PutMapping("/{id}")public ResponseEntity<Post> updatePost(@PathVariable(value = "id") Long postId,@Valid @RequestBody Post postDetails) throws ResourceNotFoundException {Post post = postRepository.findById(postId).orElseThrow(() -> new ResourceNotFoundException("Post not found for this id :: " + postId));post.setTitle(postDetails.getTitle());post.setContent(postDetails.getContent());post.setSlug(postDetails.getSlug());final Post updatedPost = postRepository.save(post);return ResponseEntity.ok(updatedPost);}@DeleteMapping("/{id}")public Map<String, Boolean> deletePost(@PathVariable(value = "id") Long postId)throws ResourceNotFoundException {Post post = postRepository.findById(postId).orElseThrow(() -> new ResourceNotFoundException("Post not found for this id :: " + postId));postRepository.delete(post);Map<String, Boolean> response = new HashMap<>();response.put("deleted", Boolean.TRUE);return response;}
}
2.创建并且复制
将上面生成的Controller内容复制到IDEA中
六、实现CommandLinerRunner bean
关键提示语:编写一个 CommandLinerRunner bean,使用 PostRepository 插入一个单独的“Post”
创建CommandLinerRunner就是为了插入方便,ChatGPT回答如下:
@Component
public class MyCommandLinerRunner implements CommandLineRunner {@Autowiredprivate PostRepository postRepository;@Overridepublic void run(String... args) throws Exception {Post post = new Post();post.setTitle("My first post");post.setContent("Hello world!");post.setSlug("my-first-post");post.setDateCreated(new Date());post.setDateUpdated(new Date());postRepository.save(post);}
}
把上面的代码稍作调整放到BlogApplication
@BeanCommandLineRunner commandLineRunner(PostRepository postRepository) {return args -> {Post post = new Post();post.setTitle("My first post");post.setContent("Hello world!");post.setSlug("my-first-post");post.setDateCreated(new Date());post.setDateUpdated(new Date());postRepository.save(post);System.out.println("Inserted a post: " + post);};}
七、测试API
1.启动项目测试插入功能
利用CommandLinerRunner 使用 PostRepository 插入一个单独的“Post”
项目启动插入成功,说明插入正常
2.测试查询方法
查询也是没有问题的
项目地址以及详细指导:https://github.com/zhiyongzhao/blog