基于Spring+JPA+Swagger的项目(1)
环境配置
- java1.8
- mysql5.7
- maven3.6.0
- lombok
- JPA
- Swagger
简单的JPA应用
- 第一步在数据库中创建相关的数据,表信息等等,创建实体类
Entity
,实体类内属性与表信息一一对应.实际上,可以直接创建实体类,JPA会自动在数据库中建表. - 第二步根据刚才的实体类创建DAO接口,直接
extends JPAReposity
即可,在JPA库中已经包含基本的查询语句,删除语句,以及插入语句,但是功能比较简单,对于复杂的语句依旧需要自定义sql语句 - 第三部创建Service,该接口中定义相关的方法,之后在ServiceImpl中实现该方法,大部分直接调用DAO中的增删改查即可
- 第四部创建Controller,在该层中,主要根据路由,获取用户访问路径,根据路径设计业务逻辑,然后直接调用ServiceImpl中的方法去实现,最后通过return,可以返回给页面String类型,直接输出到页面上.
今天遇到部分问题
@GetMapping和@PostMapping 和@RequestMapping区别
-
@GetMapping:用于将HTTP get请求映射到特定处理程序的方法注解,是一个组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写。
-
@PostMapping: 用于将HTTP post请求映射到特定处理程序的方法注解,是一个组合注解,是@RequestMapping(method = RequestMethod.POST)的缩写
-
@RequestMapping:一般情况下都是用@RequestMapping(method=RequestMethod.),因为@RequestMapping可以直接替代以上两个注解,但是以上两个注解并不能替代@RequestMapping,@RequestMapping相当于以上两个注解的父类!
在controller中通过路由传递参数进行查询的调用
- 使用@PathVariable注解
@RequestMapping(value = "/{id}/{str}")
public ModelAndView helloWorld(@PathVariable String id, @PathVariable String str) {
System.out.println(id);
System.out.println(str);
return new ModelAndView("/helloWorld");
}
-
对于要加载的类,每个类之前都要添加一个@Autowired 不然该对象Bean无法被加载,会报出NullException的错误
-
在spring中的实体类一定要和自己数据库中完全对应,否则,在Spring中的变量会自动在表中创建一个新的column
-
JPAReposity基本上实现了所有基础的sql操作,直接在DAO类中继承该类,最后直接调用就可以,基础的函数包括基础的增删改查
-
对数据库进行插入删除时,必须在Service层前加上@transaction,否则是无法执行的
-
使用List<?>统一接收List是可行的,会不会出现其他问题暂时不知
-
Entity->EntityDAO->EntityService->EntityServiceImpl->Controller
之后需要学习的部分
- 如何设计更好的路由,减少重复代码
- 在设计查询时,逻辑是否完整,例如在查询任务时,是不是用contains比全匹配更有意义
- 设计异常页面的跳转
- 自定义查询语句与删除语句,增加程序可用性
- 暴露给前端的接口,应该是Json格式,包含是否成功,msg,以及要传递的数据等等
- 使用Swagger返回接口的文档