前一段时间,我在帮师兄们开发微信小程序后台的时候用到了一个新的框架Spring Boot(新是对我来说,可能很多人都是已经能熟练使用这个框架了)。
Spring Boot 与普通的MVC框架(Servlet、Service、DTO和DAO)类似,Spring Boot 分别有Controller、Service、DTO和DAO,就这样看来,Spring Boot 和普通的MVC框架不同的地方应该就是C层了,在我之前参与的使用普通MVC框架的web项目中,是通过在表单传值的时候穿一个属性名为flag的值,根据该属性的值判断用户需要执行的业务操作,而在Spring Boot 的Controller层中则是为每一个业务方法设定一个唯一的url,这样用户需要执行哪个业务操作就直接通过其对应的url访问并传参即可。比如同样是实现一个删除操作,普通MVC框架中的servlet写法和Spring Boot框架中的controller写法分别如下:
ActivityServlet.java
package ;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Servlet extends HttpServlet {
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException{
request.setCharacterEncoding("utf-8");
String flag = request.getParameter("flag");
if("findActivity".equals(flag)){
this.findActivity(request, response);
}
}
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException{
this.doGet(request,response);
}
//例子
public void findActivity(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String a_id = request.getParameter("id");
ActivityService as = new ActivityService();
as.findActivity(id);
response.sendRedirect("activity.jsp");
}
}
ActivityController.java
@RestController
@RequestMapping(value = "/activity")
public class ActivityController {
@Resource
private ActivityService activityService;
//Post请求
@PostMapping(value = "/findActivity")
public void findActivity(@RequestParam("id") Integer id){
activityService.findActivity(id);
}
//Get请求
@GetMapping(value = "/findActivity/{id}")
public void findActivity(@PathVariable("id") Integer id){
activityService.findActivity(id);
}
}
若要访问ActivityController中的findActivity方法,若是Post请求则只要通过“服务器ip/activity/findActivity”即可,若本机是服务器则在浏览器地址栏输入"localhost:8080/activity/findActivity"即可访问,若是Get请求,也以本机为服务器为例,假设需要删除的活动id为1,则在浏览器地址栏输入"localhost:8080/activity/findActivity/1"即可。
Spring Boot 中的Service层与普通MVC框架的Service没有多少区别,而DTO和DAO则与普通MVC框架有所不同。
Activity.java
@Entity
public class Activity{
@Id
@GenerateValue
//活动id
private String Integer id;
//活动名称
private String name;
//活动地点
private String place;
public Activity(){
}
public void setId(Integer id){
this.id = id;
}
public Integer getId(){
return id;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setPlace(String place){
this.place = place;
}
public String getPlace(){
return place;
}
}
ActivityDAO.java
public interface ActivityDAO extends JpaRepository<Activity, Integer>{
//根据活动id查询活动信息
Activity findById(Integer id);
}
DAO中不需要我们自己写数据库操作的代码,只需定义方法,Spring Boot框架就会应用Spring Data JPA将方法名按其规则解析成相应的SQL语句进行数据库操作,十分的方便。这里需要主要的一点是DTO中的属性名应与数据库中的字段名一致,并且不能出现下划线,因为Spring Data JPA在对DAO的方法名解析时,下划线是被视作分割点的。
例如在Activity.java中,若活动id的属性名为a_id,则根据活动id查询活动信息的方法名应写作findByA_id,在Spring Data JPA进行方法名解析时,会将其分割为find by a id,而不是find by a_id,如此便会导致程序出错,所以DTO的属性名不能有下划线。
以上为我个人学习笔记心得,作为一个大学生还是自学的编程,想来可能有很多错误的地方,望技术大神多多指正。