项目版本
- 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