spring-boot
0
总安装量
12
周安装量
安装命令
npx skills add https://github.com/partme-ai/full-stack-skills --skill spring-boot
Agent 安装分布
opencode
11
codex
10
gemini-cli
9
github-copilot
8
cursor
8
claude-code
7
Skill 文档
Spring Boot å¼åæå
æ¦è¿°
Spring Boot æ¯ä¸ä¸ªåºäº Spring æ¡æ¶çå¿«éå¼åæ¡æ¶ï¼æä¾äºèªå¨é ç½®ãèµ·æ¥ä¾èµçç¹æ§ï¼ç®åäº Spring åºç¨çå¼åã
æ ¸å¿ç¹æ§
1. 项ç®å建
ä½¿ç¨ Spring Initializrï¼
è®¿é® https://start.spring.io/ æä½¿ç¨ IDE æä»¶å建项ç®ã
ä½¿ç¨ CLIï¼
# å®è£
Spring Boot CLI
brew install spring-boot
# å建项ç®
spring init --dependencies=web,data-jpa,postgresql my-project
Maven 项ç®ç»æï¼
my-project/
âââ src/
â âââ main/
â â âââ java/
â â â âââ com/example/
â â â âââ MyApplication.java
â â âââ resources/
â â âââ application.properties
â â âââ application.yml
â âââ test/
âââ pom.xml
âââ README.md
2. èªå¨é ç½®
Spring Boot éè¿èªå¨é ç½®ç®åäºé 置工ä½ã
application.ymlï¼
spring:
application:
name: my-app
datasource:
url: jdbc:postgresql://localhost:5432/mydb
username: postgres
password: password
driver-class-name: org.postgresql.Driver
jpa:
hibernate:
ddl-auto: update
show-sql: true
server:
port: 8080
application.propertiesï¼
spring.application.name=my-app
spring.datasource.url=jdbc:postgresql://localhost:5432/mydb
spring.datasource.username=postgres
spring.datasource.password=password
spring.datasource.driver-class-name=org.postgresql.Driver
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
server.port=8080
3. ä¾èµæ³¨å ¥
ä½¿ç¨ @Componentï¼
@Component
public class UserService {
public String getUserName(Long id) {
return "User " + id;
}
}
ä½¿ç¨ @Serviceï¼
@Service
public class UserService {
private final UserRepository userRepository;
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
public User findById(Long id) {
return userRepository.findById(id)
.orElseThrow(() -> new UserNotFoundException(id));
}
}
ä½¿ç¨ @Repositoryï¼
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
Optional<User> findByEmail(String email);
List<User> findByNameContaining(String name);
}
4. Web å¼å
REST Controllerï¼
@RestController
@RequestMapping("/api/users")
public class UserController {
private final UserService userService;
public UserController(UserService userService) {
this.userService = userService;
}
@GetMapping
public List<User> getAllUsers() {
return userService.findAll();
}
@GetMapping("/{id}")
public User getUserById(@PathVariable Long id) {
return userService.findById(id);
}
@PostMapping
public User createUser(@RequestBody User user) {
return userService.save(user);
}
@PutMapping("/{id}")
public User updateUser(@PathVariable Long id, @RequestBody User user) {
return userService.update(id, user);
}
@DeleteMapping("/{id}")
public void deleteUser(@PathVariable Long id) {
userService.delete(id);
}
}
å¼å¸¸å¤çï¼
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(UserNotFoundException.class)
public ResponseEntity<ErrorResponse> handleUserNotFound(UserNotFoundException ex) {
ErrorResponse error = new ErrorResponse(
HttpStatus.NOT_FOUND.value(),
ex.getMessage()
);
return new ResponseEntity<>(error, HttpStatus.NOT_FOUND);
}
}
5. æ°æ®è®¿é®
JPA Entityï¼
@Entity
@Table(name = "users")
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;
// Getters and Setters
}
Repositoryï¼
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
Optional<User> findByEmail(String email);
List<User> findByNameContaining(String name);
@Query("SELECT u FROM User u WHERE u.email = :email")
Optional<User> findByEmailCustom(@Param("email") String email);
}
Serviceï¼
@Service
@Transactional
public class UserService {
private final UserRepository userRepository;
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
public User save(User user) {
return userRepository.save(user);
}
public Optional<User> findById(Long id) {
return userRepository.findById(id);
}
public List<User> findAll() {
return userRepository.findAll();
}
public void delete(Long id) {
userRepository.deleteById(id);
}
}
6. é 置管ç
@ConfigurationPropertiesï¼
@ConfigurationProperties(prefix = "app")
@Data
public class AppProperties {
private String name;
private String version;
private Database database;
@Data
public static class Database {
private String host;
private int port;
private String name;
}
}
使ç¨é ç½®ï¼
app:
name: my-app
version: 1.0.0
database:
host: localhost
port: 5432
name: mydb
7. å®å ¨ï¼Spring Securityï¼
ä¾èµï¼
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
é ç½®ï¼
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> auth
.requestMatchers("/api/public/**").permitAll()
.anyRequest().authenticated()
)
.httpBasic();
return http.build();
}
}
8. æµè¯
åå æµè¯ï¼
@SpringBootTest
class UserServiceTest {
@Autowired
private UserService userService;
@Test
void testFindById() {
User user = userService.findById(1L)
.orElseThrow();
assertNotNull(user);
}
}
éææµè¯ï¼
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureMockMvc
class UserControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
void testGetUser() throws Exception {
mockMvc.perform(get("/api/users/1"))
.andExpect(status().isOk())
.andExpect(jsonPath("$.name").value("John"));
}
}
æä½³å®è·µ
1. 项ç®ç»æ
com.example.myapp/
âââ controller/ # æ§å¶å¨
âââ service/ # æå¡å±
âââ repository/ # æ°æ®è®¿é®å±
âââ entity/ # å®ä½ç±»
âââ dto/ # æ°æ®ä¼ è¾å¯¹è±¡
âââ config/ # é
置类
âââ exception/ # å¼å¸¸ç±»
2. ä¾èµæ³¨å ¥
- ä¼å ä½¿ç¨æé 彿°æ³¨å ¥
- é¿å
使ç¨
@Autowiredåæ®µæ³¨å ¥ - 使ç¨
@RequiredArgsConstructor(Lombok)
3. å¼å¸¸å¤ç
- 使ç¨
@ControllerAdviceå ¨å±å¼å¸¸å¤ç - å®ä¹èªå®ä¹å¼å¸¸ç±»
- è¿åç»ä¸çé误ååºæ ¼å¼
4. é 置管ç
- 使ç¨
application.ymlèéapplication.properties - åºåå¼åãæµè¯ãç产ç¯å¢é ç½®
- 使ç¨
@ConfigurationPropertiesç»å®é ç½®
常ç¨ä¾èµ
<!-- Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- JPA -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- PostgreSQL -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
ç¤ºä¾ Prompt
- “ä½¿ç¨ Spring Boot å建ä¸ä¸ª REST API 项箔
- “å¦ä½å¨ Spring Boot ä¸ä½¿ç¨ JPA è¿è¡æ°æ®è®¿é®ï¼”
- “Spring Boot ä¸å¦ä½é ç½®æ°æ®åºè¿æ¥ï¼”
- “å¦ä½å¨ Spring Boot ä¸å®ç°å ¨å±å¼å¸¸å¤çï¼”
- “Spring Boot ä¸å¦ä½ä½¿ç¨ Spring Securityï¼”