简明易懂Spring Boot
为了尽快开发出一个能用的原型,用最快的速度搞了一下后端的接口。
项目结构
Entity层
Java Beans,也就是,实体的抽象。
Mapper层
和Entity对应的数据库操作,相当于运行SQL语句。
Service层
业务逻辑,针对的是具体问题,调用mapper层的方法。
Controller层
和前端交互,接受前端传递的参数,调用service的方法,返回需要的数据。
环境和框架
数据库 MySQL8.0
Spring Boot + Mybatis Plus
流程
建立项目
IDEA选择spring模板,Web下勾选SpringWeb,SQL勾选MySQL Driver,JDBC API 和 MyBatis Framework。
其余的项目名之类的设置好一路next下去就好。
添加项目依赖
因为spring boot项目使用的是maven,因此在pom.xml内添加即可。
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
额外用到的是lombok和mybatis plus。
链接数据库
数据库使用的是MySQL,比之前的达梦简单不少。按照数据库的过程略过。
链接数据库需要配置resources下的application.properties,格式如下:
spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase
spring.datasource.username=root
spring.datasource.password=Lm_14538
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
其中url最后的是数据库名,mysql的话是建立数据库时指定的。
数据库测试表
原型阶段只需要一个密钥表,需要的数据有密钥名和密钥本身,主键为ID,建表语句如下:
create table keys (
id bigint(20) not null primary key ,
name varchar(20) not null ,
data varchar(255) not null
)
建立对应的实体类
@Data
@TableName("mykeys")
public class Key {
private Long id;
private String name;
private String data;
}
因为使用了Lombok所以用@Data可以自动生成getter、setter、toString等一堆重复的玩意。
另外官方建议使用基本变量的包装类。
Mapper和Service
因为使用了Mybatis Plus,所以这两个的写法很简单。
Mapper
@Mapper
public interface KeyMapper extends BaseMapper<Key> {
}
Service
public interface KeyService extends IService<Key> {
}
@Service
public class KeyServiceImpl extends ServiceImpl<KeyMapper, Key> implements KeyService{
}
只需要继承两个类就可以实现基本的数据库操作,对于当前的原型来说已经够用了。
Controller
接口也就是在这里写的,命名方式参照之前的Rest部分。
@RestController
@RequestMapping("keys")
public class KeyController {
//等价于@Autowired 现在官方更推荐下面的方式
final
KeyService keyService;
public KeyController(KeyService keyService) {
this.keyService = keyService;
}
@GetMapping
public ResponseEntity getAllKeys() {
List<Key> keys = keyService.list();
return ResponseEntity.ok(keys);
}
}
@RestController
将返回的对象数据直接以 JSON 或 XML 形式写入HTTP 响应(Response)中,因为项目是前后端分离的,前端显示也是调用接口获得Json数据,因此用这个就可以了。
@RequestMapping 参数指定了url
@GetMapping
等价于 @RequestMapping(method = RequestMethod.POST) 其他的HTTP方法都有对应。
另外几个没有用到的,但后面可能有用。
@PathVariable 取url地址中的参数。
@RequestParam url的查询参数值。
@RequestBody 可以将 HttpRequest body 中的 JSON 类型数据反序列化为合适的 Java 类型。
返回值ResponseEntity: 表示整个HTTP Response:状态码,标头和正文内容。我们可以使用它来自定义HTTP Response 的内容。
测试
运行项目,浏览器访问 localhost:8080/keys 可以获得Json格式的所有密钥。