SpringBoot+JPA构建Rest接口服务

项目版本

  • JDK 1.8
  • SpringBoot 2.5.1
  • JPA 2.3.0
  • MySQL 8

创建项目

添加依赖
<!-- 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>

<!-- mysql -->
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <scope>runtime</scope>
</dependency>

数据库语句

DROP TABLE IF EXISTS `departments`;
CREATE TABLE `departments` (
  `dept_no` char(4) NOT NULL,
  `dept_name` varchar(40) NOT NULL,
  PRIMARY KEY (`dept_no`),
  UNIQUE KEY `dept_name` (`dept_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
配置数据源
server:
  port: 8082

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/test?characterEncoding=UTF-8&useSSL=false
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true
    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
数据模型
@Entity
@Table(name="departments")
public class Departments {

    @Ids
    @Column(name = "dept_no")
    private String deptNo;

    @Column(name="dept_name")
    private String deptName;

    public Departments() {
    }

    public Departments(String deptNo, String deptName) {
        this.deptNo = deptNo;
        this.deptName = deptName;
    }

    public String getDeptNo() {
        return deptNo;
    }

    public String getDeptName() {
        return deptName;
    }

    public void setDeptNo(String deptNo) {
        this.deptNo = deptNo;
    }

    public void setDeptName(String deptName) {
        this.deptName = deptName;
    }

    @Override
    public String toString() {
        return "Departments{" +
                "deptNo='" + deptNo + '\'' +
                ", deptName='" + deptName + '\'' +
                '}';
    }
}

@Entity 注释该对象是一个持久对象

@table 注释该实体映射的表

@id 注释该字段的主键

@GeneratedValue 注释主键生成的策略,GenerationType.AUTO 主键自增长

@Column 注释字段与数据库字段的映射

创建 Repository 接口

创建 DepartmentsRepository 类,继承 JpaRepository 接口

public interface DepartmentsRepository extends JpaRepository<Departments,String> {

    List<Departments> findByDeptName(String deptname);
}

JpaRepository 提供的方法有:save(CrudRepository)、findAllById、findAll()、count、delete、deleteById

自己定义的一个方法:

findByDeptName:返回匹配的所有数据。

findByDeptNameContaining:返回包含的所有数据。

创建 Spring Rest APIs 控制器

创建一个控制器,提供用于创建、检索、更新、删除和查找。

@RestController
@RequestMapping("/api")
@Api(tags = "Departments",value = "部门信息")
public class DepartmentsController {

    @Autowired
    DepartmentsRepository departmentsRepository;

    /**
     * 查询所有的部门信息
     * @return
     */
    @ApiOperation(value = "查询所有部门列表")
    @GetMapping("/findAll")
    public ResponseEntity<List<Departments>> findAllDepartments(){
        List<Departments> departments = new ArrayList<Departments>();
        try{
            departments = departmentsRepository.findAll();//.forEach(departments::add);

            if(departments.isEmpty())
                return new ResponseEntity<>(HttpStatus.NO_CONTENT);

            return new ResponseEntity<>(departments,HttpStatus.OK);
        } catch(Exception e){
            return new ResponseEntity<>(null,HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }

    /**
     * 通过部门号查找部门信息
     * @param deptNo
     * @return
     */
    @ApiOperation(value = "通过部门号查询部门信息")
    @GetMapping("/departments/{deptNo}")
    public ResponseEntity<Departments> findDepartmentsById(@PathVariable("deptNo") String deptNo){
        Optional<Departments> departmentsData = departmentsRepository.findById(deptNo);
        if(departmentsData.isPresent())
            return new ResponseEntity<>(departmentsData.get(),HttpStatus.OK);
        else
            return new ResponseEntity<>(HttpStatus.NOT_FOUND);
    }

    /**
     * 新增部门信息
     * @param departments
     * @return
     */
    @ApiOperation(value = "新增部门信息")
    @PostMapping("/departments")
    @CrossOrigin
    public ResponseEntity<Departments> addDepartments(@RequestBody Departments departments){
        try {
            Departments resDepartments = departmentsRepository.save(departments);
            //new Departments(departments.getDeptNo(),departments.getDeptName())

            return new ResponseEntity<>(resDepartments,HttpStatus.CREATED);
        } catch (Exception e){
            return new ResponseEntity<>(null,HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }

    /**
     * 更新部门新信息
     * @param deptNo
     * @param departments
     * @return
     */
    @ApiOperation(value = "更新部门信息")
    @PutMapping("/departments/{deptNo}")
    public ResponseEntity<Departments> updateDepartments(
            @PathVariable("deptNo") String deptNo,@RequestBody Departments departments){
        Optional<Departments> departmentsData = departmentsRepository.findById(deptNo);
        if(departmentsData.isPresent()) {
            Departments updateDepartments = departmentsData.get();
            updateDepartments.setDeptName(departments.getDeptName());
            return new ResponseEntity<>(
                    departmentsRepository.save(updateDepartments),HttpStatus.OK);
        }else{
            return new ResponseEntity<>(HttpStatus.NOT_FOUND);
        }
    }

    /**
     * 通过部门号删除部门信息
     * @param deptNo
     * @return
     */
    @ApiOperation(value = "通过部门号删除部门信息")
    @DeleteMapping("/departments/{deptNo}")
    public ResponseEntity<HttpStatus> deleteDepartments(@PathVariable("deptNo") String deptNo){
        try {
            departmentsRepository.deleteById(deptNo);
            return new ResponseEntity<>(HttpStatus.NO_CONTENT);
        } catch (Exception e){
            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }

    /**
     * 删除所有的部门信息
     * @return
     */
    @ApiOperation(value = "删除所有的部门")
    @DeleteMapping("/departments")
    public ResponseEntity<HttpStatus> deleteAllDepartments(){
        try{
            departmentsRepository.deleteAll();
            return new ResponseEntity<>(HttpStatus.OK);
        } catch (Exception e){
            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }

    /**
     * 根据部门名字查找部门信息
     * @return
     */
    @ApiOperation(value = "根据部门名字查找部门信息")
    @GetMapping("/departments/deptName/{deptName}")
    public ResponseEntity<List<Departments>> findByDeptName(@PathVariable String deptName){
        try{
            List<Departments> departments = departmentsRepository.findByDeptName(deptName);
            if(departments.isEmpty())
                return new ResponseEntity<>(HttpStatus.NO_CONTENT);
            return new ResponseEntity<>(departments,HttpStatus.OK);
        } catch (Exception e){
            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }
}

测试

在这里插入图片描述

查找所有的部门信息:GET http://localhost:8082/api/findAll

通过部门号查询:GET http://localhost:8082/api/departments/1004

增加部门:POST http://localhost:8082/api/departments {“deptNo”:“1005”,“deptName”:“E”} application/json

更新部门:PUT http://localhost:8082/api/departments/1007 {“deptNo”:“1007”,“deptName”:“H”} application/json

根据部门号删除部门:DELETE http://localhost:8082/api/departments/1005

删除所有部门:DELETE http://localhost:8082/api/departments

通过部门名查找:GET http://localhost:8082/api/departments/deptName/A

参考

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#reference

https://spring.io/guides/tutorials/rest/

https://bezkoder.com/spring-boot-jpa-crud-rest-api/

https://www.baeldung.com/building-a-restful-web-service-with-spring-and-java-based-configuration

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值