<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # Spring Boot `CrudRepository` 教程 > 原文: [http://zetcode.com/springboot/crudrepository/](http://zetcode.com/springboot/crudrepository/) SpringBoot `CrudRepository`教程展示了如何使用`CrudRepository`在 Spring Boot 應用中管理數據。 Spring 是流行的 Java 應用框架。 Spring Boot 致力于以最小的努力創建獨立的,基于生產級別的基于 Spring 的應用。 ## Spring Data Spring Data 是用于數據訪問的基于 Spring 的編程模型。 它減少了使用數據庫和數據存儲所需的代碼量。 它由幾個模塊組成。 Spring Data JPA 簡化了使用 JPA 技術的 Spring 應用的開發。 使用 Spring Data,我們為應用中的每個域實體定義了一個存儲庫接口。 存儲庫包含用于執行 CRUD 操作,對數據進行排序和分頁的方法。 `@Repository`是標記注解,指示基礎接口是存儲庫。 通過擴展特定的存儲庫接口(例如`CrudRepository`,`PagingAndSortingRepository`或`JpaRepository`)來創建存儲庫。 Spring Data 已與 Spring MVC 控制器進行了高級集成,并提供了從存儲庫方法名稱派生的動態查詢。 ## `CrudRepository` `CrudRepository`實現基本的 CRUD 操作,包括`count`,`delte`,`deleteById`,`save`,`saveAll`,`findById`和`findAll`。 ## Spring Boot `CrudRepository` 示例 以下 Spring Boot 應用使用`CrudRepository`管理`User`實體。 數據保存在 H2 數據庫中。 我們使用一個 RESTful 控制器。 ```java pom.xml src ├───main │ ├───java │ │ └───com │ │ └───zetcode │ │ │ Application.java │ │ │ MyRunner.java │ │ ├───controller │ │ │ MyController.java │ │ ├───model │ │ │ User.java │ │ ├───repository │ │ │ UserRepository.java │ │ └───service │ │ UserService.java │ └───resources └───test └───java ``` 這是項目結構。 `pom.xml` ```java <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zetcode</groupId> <artifactId>crudrepositoryex</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> </properties> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.1.RELEASE</version> </parent> <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>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> ``` 這是 Maven 構建文件。 `spring-boot-starter-web`是使用 Spring MVC 構建 Web(包括 RESTful)應用的入門程序。 `spring-boot-starter-data-jpa`是將 Spring Data JPA 與 Hibernate 結合使用的入門工具。 `com/zetcode/model/User.java` ```java package com.zetcode.model; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import java.util.Objects; @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String firstName; private String lastName; private String email; public User() {} public User(String firstName, String lastName, String email) { this.firstName = firstName; this.lastName = lastName; this.email = email; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; User user = (User) o; return Objects.equals(id, user.id) && Objects.equals(firstName, user.firstName) && Objects.equals(lastName, user.lastName) && Objects.equals(email, user.email); } @Override public int hashCode() { return Objects.hash(id, firstName, lastName, email); } @Override public String toString() { final StringBuilder sb = new StringBuilder("User{"); sb.append("id=").append(id); sb.append(", firstName='").append(firstName).append('\''); sb.append(", lastName='").append(lastName).append('\''); sb.append(", email='").append(email).append('\''); sb.append('}'); return sb.toString(); } } ``` 這是`User`實體。 `com/zetcode/service/UserService.java` ```java package com.zetcode.service; import com.zetcode.model.User; import com.zetcode.repository.UserRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; @Service public class UserService { @Autowired private UserRepository userRepository; public List<User> findAll() { var it = userRepository.findAll(); var users = new ArrayList<User>(); it.forEach(e -> users.add(e)); return users; } public Long count() { return userRepository.count(); } public void deleteById(Long userId) { userRepository.deleteById(userId); } } ``` 這是服務類。 該類提供了三種方法來查找所有用戶,對用戶進行計數以及按 ID 刪除用戶。 ```java @Service public class UserService { ``` 在 Spring 中,服務類用`@Service`注解修飾。 ```java @Autowired private UserRepository userRepository; ``` 我們注入`UserRepository`。 ```java public List<User> findAll() { var it = userRepository.findAll(); var users = new ArrayList<User>(); it.forEach(e -> users.add(e)); return users; } ``` `findAll()`方法調用`userRepository`的`findAll()`方法并檢索所有用戶。 `com/zetcode/repository/UserRepository.java` ```java package com.zetcode.repository; import com.zetcode.model.User; import org.springframework.data.repository.CrudRepository; import org.springframework.stereotype.Repository; @Repository public interface UserRepository extends CrudRepository<User, Long> { } ``` `UserRepository`從`CrudRepository`延伸。 它提供了實體的類型及其主鍵。 `com/zetcode/controller/MyController.java` ```java package com.zetcode.controller; import com.zetcode.model.User; import com.zetcode.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController public class MyController { @Autowired private UserService userService; @GetMapping("/users") public List<User> allUsers() { return userService.findAll(); } @GetMapping("/users/count") public Long count() { return userService.count(); } @DeleteMapping("/users/{id}") public void delete(@PathVariable String id) { Long userId = Long.parseLong(id); userService.deleteById(userId); } } ``` 控制器類提供了三個請求的映射。 我們可以獲取所有用戶,計算用戶數,并通過其 ID 刪除用戶。 數據以 JSON 格式返回。 ```java @GetMapping("/users") public List<User> allUsers() { return userService.findAll(); } ``` 為了獲得所有用戶,我們使用`@GetMapping`注解。 ```java @DeleteMapping("/users/{id}") public void delete(@PathVariable String id) { Long userId = Long.parseLong(id); userService.deleteById(userId); } ``` 我們使用`@DeleteMapping`刪除特定用戶。 `com/zetcode/Application.java` ```java package com.zetcode; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; @SpringBootApplication public class Application extends SpringBootServletInitializer { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` `Application`設置 Spring Boot 應用。 `com/zetcode/MyRunner.java` ```java package com.zetcode; import com.zetcode.model.User; import com.zetcode.repository.UserRepository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.stereotype.Component; import javax.transaction.Transactional; @Component public class MyRunner implements CommandLineRunner { private static final Logger logger = LoggerFactory.getLogger(MyRunner.class); @Autowired private UserRepository userRepository; @Override @Transactional public void run(String... args) throws Exception { logger.info("initializing users"); var u1 = new User("Paul", "Smith", "paul.smith@gmail.com"); userRepository.save(u1); var u2 = new User("Robert", "Black", "rb34@gmail.com"); userRepository.save(u2); var u3 = new User("John", "Doe", "jdoe@gmail.com"); userRepository.save(u3); } } ``` 在`MyRunner`中,我們為應用設置了數據。 ```java var u1 = new User("Paul", "Smith", "paul.smith@gmail.com"); userRepository.save(u1); ``` 我們創建一個新用戶,并使用存儲庫的`save()`方法將其保存。 ```java $ curl localhost:8080/users [{"id":1,"firstName":"Paul","lastName":"Smith","email":"paul.smith@gmail.com"}, {"id":2,"firstName":"Robert","lastName":"Black","email":"rb34@gmail.com"}, {"id":3,"firstName":"John","lastName":"Doe","email":"jdoe@gmail.com"}] ``` 我們使用`curl`工具測試該應用。 在本教程中,我們使用`CrudRepository`管理了應用數據。 您可能也對相關教程感興趣: [Spring Boot 首次 Web 應用](/articles/springbootwebfirst/), [Spring Boot 數據 JPA `@Query`教程](/springboot/datajpaquery/), [Spring Boot 數據 JPA `@NamedQuery`教程](/springboot/datajpanamedquery/), [獨立的 Spring 應用](/articles/standalonespring/)和 [Java 教程](/lang/java/)。 列出[所有 Spring Boot 教程](/all/#springboot)。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看