开发配置
依赖包准备
这里选用mysql作为数据库,需要用到的包有三个,需要将相关依赖写入pom.xml,如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
数据库连接设定
在src/main/resources/application.properties文件中,加入以下配置信息:
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=test
spring.datasource.password=test
spring.datasource.tomcat.max-idle=10
spring.datasource.tomcat.max-wait=10000
spring.datasource.tomcat.min-idle=5
spring.datasource.tomcat.initial-size=5
其中test是数据库名称,username和password可自行设置和修改
实体定义
我们将要操作的实体很简单,只有一个id属性和一个name属性。定义如下:
@Entity
@Table(name="T_USER")
public class User {
/**
* 用户ID
*/
@Id
@GeneratedValue
private int id;
/**
* 用户名
*/
private String name;
// GETTER和SETTER此处省略...
}
<说明>
- @Entity注解,表明了这是一个Entity,可以使用默认的ORM规则,即class名即为要更新的数据表名
- @Table注解,可以指定这个Entity要更新的数据表名,也不使用默认的ORM规则。
- @Id注解,表明了这个数据表的主键ID,这个主键可以是AUTO_INCREMENT类型的数据。
备忘
在测试中,此处的id类型使用Integer会报错,原因尚不清楚,使用int则无问题。
路由设置
以简单的User对象为例,我们来实现一个简(chou)单(lou)的的CRUD处理
Restful风格
对于简单的增删改查功能,一般的restful接口定义如下:
GET /user # 取得user列表
POST /user # 提交user
PUT /user # 更新user
PATCH /user # 更新user(个别属性)
DELETE /user/:id # 删除user
路由设置
对于纯数据的Java后端架构来讲,MVC中少了View,但M和C仍是必不可少的。Model用于管理数据实体及持久化相关的处理,Controller则是整个业务的核心。
首先,对于user的每个接口,我们在controller中定义对应请求接收方法:
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("")
public ResponseEntity<?> getList() {
return new ResponseEntity<Object>(userService.getUserList(), HttpStatus.OK);
}
@PostMapping("")
public ResponseEntity<?> create(@RequestBody User user) {
return new ResponseEntity<User>(userService.save(user), HttpStatus.CREATED);
}
@PatchMapping("")
public ResponseEntity<?> update(@RequestBody User user) {
return new ResponseEntity<User>(userService.save(user), HttpStatus.ACCEPTED);
}
@DeleteMapping("/{id}")
public ResponseEntity<?> remove(@PathVariable("id") int id) {
userService.remove(id);
return new ResponseEntity<User>(HttpStatus.ACCEPTED);
}
}
<说明>
- @RestController注解,表明这个controller专门用于Restful服务,返回值不是传统的WEB数据。
- @RequestMapping注解,表明访问的相对路径为“/user"
- @GetMapping、@PostMapping、@PatchMapping和@DeleteMapping分别对应了GET、POST、PATCH和DELETE请求,这四个方法将分别接收对应访问路径上对应方法的HTTP请求。它们也可用@RequestMapping(value="", method=RequestMethod.POST(或者GET、PATCH等)来替代。
- @PathVariable用于取得访问路径中的参数
- ResponseEntity用于返回处理结果与错误码
上面通过UserService的调用,实现了user的CRUD操作。Spring通过@Autowired注解,会自动创建UserService的实例。
CRUD操作
通过UserService的相关操作,我们可以很容易的对user表进行CRUD操作。代码如下:
@Service
public class UserService {
@Autowired
private UserRepository userRepo;
public Iterable<User> getUserList() {
return userRepo.findAll();
}
public User save(User user) {
return userRepo.save(user);
}
public void remove(int id) {
userRepo.delete(id);
}
}
<说明>
- 通过@Service注解,Spring会自动实例化到UserController中
- Service中注解了@Autowired的实例userRepo,实际上是继承了CrudRepository的一个接口。Repository在Spring的概念体系中是类似于传统DAO的实体,一个Repository对应一个数据表的操作。
- UserService中使用的findAll、save和delete方法,均是CrudRepository中预定义的方法。
对于UserRepository来讲,仅仅是一个简单的继承了CrudRepository的接口。代码如下:
public interface UserRepository extends CrudRepository<User, Integer> {}
关于Repository的说明,可以看这篇文章pring Boot学习笔记(三)Repository的使用
结果确认
简单接口测试可使用POSTMAN进行,结果如下:
取得用户列表
插入2条数据
取得用户列表
更新用户
删除用户
取得用户列表
待改进事项
目前只是实现了一个简单的CRUD操作,就这个简单流程来讲,以下几点尚欠缺:
- 返回值需要有结构化的设计
- 分页和排序功能也有欠缺。
- 缺少自动化测试
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。