菜鸟学Spring Boot——简单到令人发指的CRUD

前情提要

上回书说到,用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。
​​​​​​​​​​​​​​
内置关键字:

KeywordSampleJPQL snippet
AndfindByLastnameAndFirstname… where x.lastname = ?1 and x.firstname = ?2
OrfindByLastnameOrFirstname… where x.lastname = ?1 or x.firstname = ?2
Is,EqualsfindByFirstname,findByFirstnameIs,findByFirstnameEquals… where x.firstname = ?1
BetweenfindByStartDateBetween… where x.startDate between ?1 and ?2
LessThanfindByAgeLessThan… where x.age < ?1
LessThanEqualfindByAgeLessThanEqual… where x.age <= ?1
GreaterThanfindByAgeGreaterThan… where x.age > ?1
GreaterThanEqualfindByAgeGreaterThanEqual… where x.age >= ?1
AfterfindByStartDateAfter… where x.startDate > ?1
BeforefindByStartDateBefore… where x.startDate < ?1
IsNullfindByAgeIsNull… where x.age is null
IsNotNull,NotNullfindByAge(Is)NotNull… where x.age not null
LikefindByFirstnameLike… where x.firstname like ?1
NotLikefindByFirstnameNotLike… where x.firstname not like ?1
StartingWithfindByFirstnameStartingWith… where x.firstname like ?1 (parameter bound with appended %)
EndingWithfindByFirstnameEndingWith… where x.firstname like ?1 (parameter bound with prepended %)
ContainingfindByFirstnameContaining… where x.firstname like ?1 (parameter bound wrapped in %)
OrderByfindByAgeOrderByLastnameDesc… where x.age = ?1 order by x.lastname desc
NotfindByLastnameNot… where x.lastname <> ?1
InfindByAgeIn(Collection ages)… where x.age in ?1
NotInfindByAgeNotIn(Collection ages)… where x.age not in ?1
TruefindByActiveTrue()… where x.active = true
FalsefindByActiveFalse()… where x.active = false
IgnoreCasefindByFirstnameIgnoreCase… where UPPER(x.firstame) = UPPER(?1)
刘水镜 CSDN认证博客专家 Spring Boot 架构 Java
【欢迎阅读我的最新专栏——《SpringBoot趣味私房课》https://www.imooc.com/read/75】【欢迎加入「开发者」技术交流群:168965372】【群链接:https://jq.qq.com/?_wv=1027&k=Inxd5Aa9】
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 猿与汪的秘密 设计师:上身试试 返回首页