java第一个接口

1.环境准备

  • JDK 17 (Spring Boot 3.x要求)

  • Maven 3.8+

  • IDE (IntelliJ IDEA或VS Code)

2.创建Spring Boot项目

使用Spring Initializr (https://start.spring.io/) 创建项目,选择以下依赖:

  • Spring Web (Spring MVC)

  • Spring Data JPA

  • H2 Database (内存数据库,适合示例)

  • Lombok (简化代码)

3.项目结构

复制代码
src/
├── main/
│   ├── java/
│   │   └── com/
│   │       └── example/
│   │           └── demo/
│   │               ├── DemoApplication.java
│   │               ├── controller/
│   │               │   └── UserController.java
│   │               ├── model/
│   │               │   └── User.java
│   │               ├── repository/
│   │               │   └── UserRepository.java
│   │               └── service/
│   │                   └── UserService.java
│   └── resources/
│       ├── application.properties
│       └── data.sql

4.编写代码

实体类 (User.java)

java 复制代码
package com.example.demo.model;

import jakarta.persistence.*;
import lombok.*;

@Entity
@Table(name = "users")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    @Column(nullable = false)
    private String name;
    
    @Column(unique = true, nullable = false)
    private String email;
}

仓库接口 (UserRepository.java)

java 复制代码
package com.example.demo.repository;

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

public interface UserRepository extends JpaRepository<User, Long> {
}

服务层 (UserService.java)

java 复制代码
package com.example.demo.service;

import com.example.demo.model.User;
import com.example.demo.repository.UserRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
@RequiredArgsConstructor
public class UserService {
    private final UserRepository userRepository;
    
    public List<User> getAllUsers() {
        return userRepository.findAll();
    }
    
    public User createUser(User user) {
        return userRepository.save(user);
    }
    
    public User getUserById(Long id) {
        return userRepository.findById(id)
                .orElseThrow(() -> new RuntimeException("User not found"));
    }
}

控制器 (UserController.java)

java 复制代码
package com.example.demo.controller;

import com.example.demo.model.User;
import com.example.demo.service.UserService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/users")
@RequiredArgsConstructor
public class UserController {
    private final UserService userService;
    
    @GetMapping
    public List<User> getAllUsers() {
        return userService.getAllUsers();
    }
    
    @PostMapping
    public User createUser(@RequestBody User user) {
        return userService.createUser(user);
    }
    
    @GetMapping("/{id}")
    public User getUserById(@PathVariable Long id) {
        return userService.getUserById(id);
    }
}

配置文件 (application.properties)

复制代码
# 启用H2控制台
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console

# 数据库配置
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=

# JPA配置
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.format_sql=true

初始化数据 (data.sql)

sql 复制代码
INSERT INTO users (name, email) VALUES 
('张三', 'zhangsan@example.com'),
('李四', 'lisi@example.com');

5.运行和测试

  1. 启动应用:运行DemoApplication.java中的main方法

  2. 访问H2控制台:http://localhost:8080/h2-console

    • JDBC URL: jdbc:h2:mem:testdb

    • User Name: sa

    • Password: (空)

  3. 测试API:

特性:

  1. Spring Boot 3:最新的Spring框架版本

  2. Jakarta EE 9+:取代了旧的javax包

  3. Lombok:减少样板代码

  4. H2内存数据库:快速开发测试

  5. RESTful风格API:符合现代API设计规范

  6. 分层架构:Controller-Service-Repository

  7. 依赖注入:通过构造函数注入

相关推荐
luj_176811 小时前
残熵算法实时化三大瓶颈突破
c语言·开发语言·网络·经验分享·算法
我命由我1234512 小时前
Android Studio - Android Studio 自定义预览尺寸
android·java·ide·java-ee·android studio·android-studio·android runtime
不听话坏12 小时前
Ignition篇(下 一) 动态执行前的事情
开发语言·前端·javascript
likeyi0712 小时前
require 和 import的区别
开发语言·前端
咖啡八杯13 小时前
GoF设计模式——迭代器模式
java·后端·设计模式·迭代器模式
远离UE413 小时前
UE5 compute shader 原子加
开发语言·c++·ue5
C+-C资深大佬13 小时前
C++ 显式类型转换详解:static_cast、dynamic_cast、const_cast、reinterpret_cast
开发语言·c++
AIGS00113 小时前
企业AI落地的关键认知:向量空间JBoltAI的本体语义平台
java·人工智能·人工智能ai大模型应用
KaMeidebaby14 小时前
卡梅德生物技术快报|抗体亲和力成熟工业化调控新机制:差异性浆细胞增殖工艺优化思路
java·开发语言·人工智能·算法·机器学习·架构·spark
luj_176814 小时前
心形曲线轨迹控制三大关键技术
c语言·开发语言·c++·经验分享·算法