菜鳥學Spring Boot——簡單到令人髮指的CRUD
阿新 • • 發佈:2018-10-31
文章目錄
前情提要
上回書說到,用Spring Boot寫了一個Hello World小例子,那麼今天就來完成上篇結尾留下的增刪改查的例項。
軟體環境
- Windows 10
- JDK 11
- IDEA 2018.2
- Maven 3.5.4
- MySQL 8.0.12
程式碼
pom檔案中需要新增一下依賴:
<dependency>
<groupId>org.springframework.boot</groupId>
< artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.12</version>
</dependency>
<dependency>
<groupId>org.javassist</ groupId>
<artifactId>javassist</artifactId>
<version>3.23.1-GA</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
yml檔案:
server: port: 8080 servlet: path: /hello spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/helloboot?serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&useSSL=false username: root password: root jpa: show-sql: true
Controller:
@RestController()
public class UserController {
@Autowired
private UserRepository userRepository;
@PostMapping("/user")
public User save(User user) {
return userRepository.save(user);
}
@PutMapping("/user")
public User update(User user) {
return userRepository.save(user);
}
@GetMapping("/user/{id}")
public User findById(@PathVariable("id") Integer id) {
return userRepository.findById(id).get();
}
@DeleteMapping("/user/{id}")
public void delete(@PathVariable("id") Integer id) {
userRepository.deleteById(id);
}
}
由於過於簡單,就省去Service層了。
Dao層:
public interface UserRepository extends JpaRepository<User, Integer> {
}
Dao層簡單到令人髮指!完成一個基本的CRUD只需要定義一個介面,不需要寫任何實現和SQL。
實體
@Entity
@Data
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String name;
private Integer age;
}
如果想要實現更多功能,依然簡單到爆炸,只需要按照下表的規則,就能實現各種查詢操作,不需要寫任何實現和SQL。
內建關鍵字:
Keyword | Sample | JPQL snippet |
---|---|---|
And | findByLastnameAndFirstname | … where x.lastname = ?1 and x.firstname = ?2 |
Or | findByLastnameOrFirstname | … where x.lastname = ?1 or x.firstname = ?2 |
Is,Equals | findByFirstname,findByFirstnameIs,findByFirstnameEquals | … where x.firstname = ?1 |
Between | findByStartDateBetween | … where x.startDate between ?1 and ?2 |
LessThan | findByAgeLessThan | … where x.age < ?1 |
LessThanEqual | findByAgeLessThanEqual | … where x.age <= ?1 |
GreaterThan | findByAgeGreaterThan | … where x.age > ?1 |
GreaterThanEqual | findByAgeGreaterThanEqual | … where x.age >= ?1 |
After | findByStartDateAfter | … where x.startDate > ?1 |
Before | findByStartDateBefore | … where x.startDate < ?1 |
IsNull | findByAgeIsNull | … where x.age is null |
IsNotNull,NotNull | findByAge(Is)NotNull | … where x.age not null |
Like | findByFirstnameLike | … where x.firstname like ?1 |
NotLike | findByFirstnameNotLike | … where x.firstname not like ?1 |
StartingWith | findByFirstnameStartingWith | … where x.firstname like ?1 (parameter bound with appended %) |
EndingWith | findByFirstnameEndingWith | … where x.firstname like ?1 (parameter bound with prepended %) |
Containing | findByFirstnameContaining | … where x.firstname like ?1 (parameter bound wrapped in %) |
OrderBy | findByAgeOrderByLastnameDesc | … where x.age = ?1 order by x.lastname desc |
Not | findByLastnameNot | … where x.lastname <> ?1 |
In | findByAgeIn(Collection ages) | … where x.age in ?1 |
NotIn | findByAgeNotIn(Collection ages) | … where x.age not in ?1 |
True | findByActiveTrue() | … where x.active = true |
False | findByActiveFalse() | … where x.active = false |
IgnoreCase | findByFirstnameIgnoreCase | … where UPPER(x.firstame) = UPPER(?1) |