目录
1. springboot是什么?
2. 入门实例 - HelloWorld
2.1 搭建一个springboot项目
2.2 入门实例 - HelloWorld
3. springboot的配置修改
3.1 修改内置服务器端口号
3.2 在访问项目路径加上项目名
4. 响应封装类配置
4.1 原始我们将数据 响应 是这样的
4.2 响应封装类 (简易开发!类型通用助开发)
1. springboot是什么?
Spring Boot它本身并不提供Spring框架的核心特性以及扩展功能,只是用于快速、敏捷地开发新一代基于Spring框架的应用程序。也就是说,它并不是用来替代Spring的解决方案,而是和Spring框架紧密结合用于提升Spring开发者体验的工具
同时它集成了大量常用的第三方库配置(例如Jackson, JDBC, Mongo, Redis, Mail等),
Spring Boot应用中这些第三方库几乎可以零配置的开箱即用(out-of-the-box),大部分的Spring Boot应用都只需要非常少量的配置代码,开发者能够更加专注于业务逻辑
- 注1:敏捷式开发
- 注2:spring boot其实不是什么新的框架,它默认配置了很多框架的使用方式,
就像maven整合了所有的jar包,spring boot整合了所有的框架
2. 入门实例 - HelloWorld
2.1 搭建一个springboot项目
2.2 入门实例 - HelloWorld
com.jmh.spring包下新建一个子包 controller
controller包下新建一个HelloWorldController类开始编写代码
package com.jmh.springboot.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* @author 蒋明辉
* @data 2022/9/26 16:03
*/
@RestController
public class HelloWorldController {
@RequestMapping("/helloWorld")
public String demo01(){
return "HelloWorld";
}
}
运行启动入口类的main方法
网页输入 http:localhost:8080/helloWorld 访问 HelloWorld
- 注1:包和类不能乱改,只能在com.jmh.springboot建子包,因为程序只加载 Application.java所在包及其子包下的内容
com.zking.springboot
controller
service
mapper
model
- 注2:内嵌的Tomcat
1. 使用内嵌Tomcat的好处
web应用之间互不影响(springcloud)
外置
2. 访问地址简化
http://localhost:8080/mvc/xxx 内置
http://localhost:8080/xxx
3. springboot的配置修改
3.1 修改内置服务器端口号
application.properties 配置文件添加以下内容
server.port=8081
3.2 在访问项目路径加上项目名
application.properties 配置文件添加以下内容
server.servlet.context-path=/springboot
运行启动入口类的main方法
http:localhost:8081/springboot/helloWorld 访问 HelloWorld
4. 响应封装类配置
- 实体类 Book
package com.jmh.springboot.model;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author 蒋明辉
* @data 2022/9/26 16:46
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Book {
private int id; //编号
private String name; //名称
private float price; //价格
}
4.1 原始我们将数据 响应 是这样的
HelloWorldController
package com.jmh.springboot.controller;
import com.jmh.springboot.model.Book;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author 蒋明辉
* @data 2022/9/26 16:03
*/
@RestController
public class HelloWorldController {
/**
* 增加
*/
@RequestMapping("/addBook")
public Map<String,Object> add(Book book){
Map<String, Object> map = new HashMap<>();
try {
map.put("code",200);
map.put("msg","增加成功");
}catch (Exception e){
map.put("code",500);
map.put("msg","增加失败");
}
return map;
}
/**
* 删除
*/
@RequestMapping("/delBook")
public Map<String,Object> delBook(Book book){
Map<String, Object> map = new HashMap<>();
try {
map.put("code",200);
map.put("msg","删除成功");
}catch (Exception e){
map.put("code",500);
map.put("msg","删除失败");
}
return map;
}
/**
* 编辑
*/
@RequestMapping("/editBook")
public Map<String,Object> editBook(Book book){
Map<String, Object> map = new HashMap<>();
try {
map.put("code",200);
map.put("msg","编辑成功");
}catch (Exception e){
map.put("code",500);
map.put("msg","编辑失败");
}
return map;
}
/**
* 查询单个
*/
@RequestMapping("/querySingleBook")
public Book querySingleBook(Book book){
return Book.builder().id(1).name("金梅瓶").price(99f).build();
}
/**
* 查询全部
*/
@RequestMapping("/queryBookAll")
public List<Book> queryBookAll(Book book){
List<Book> list = new ArrayList<>();
list.add(Book.builder().id(1).name("金梅瓶").price(99f).build());
return list;
}
}
- 缺点!!!数据类型太多不通用不方便开发!!!
4.2 响应封装类 (简易开发!类型通用助开发)
PageBean
package com.jmh.springboot.utils;
import org.springframework.stereotype.Component;
import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
public class PageBean{
//页码
private int page=1;
//每页显示多少条记录
private int rows=10;
//总记录数
private int total=0;
//是否分页,分页标记,默认分页
private boolean pagintaion=true;
//上一次的请求路径
private String url;
//上一次的请求参数
private Map<String,String[]> map;
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public Map<String, String[]> getMap() {
return map;
}
public void setMap(Map<String, String[]> map) {
this.map = map;
}
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public int getRows() {
return rows;
}
public void setRows(int rows) {
this.rows = rows;
}
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
public boolean isPagintaion() {
return pagintaion;
}
public void setPagintaion(boolean pagintaion) {
this.pagintaion = pagintaion;
}
public PageBean() {
super();
}
public void setPage(String page) {
if(null!=page&&!"".equals(page))
this.page=Integer.parseInt(page);
}
public void setRows(String rows) {
if(null!=rows&&!"".equals(rows))
this.rows=Integer.parseInt(rows);
}
public void setPagintaion(String pagination) {
if(null!=pagination&&!"".equals(pagination))
this.pagintaion=Boolean.parseBoolean(pagination);
}
/**
* 获取sql语句的开始查询位置
* @return
*/
public int getStartIndex() {
//(1-1)*10=0 limit 0,10
//(2-1)*10=10 limit 10,10
return (this.page-1)*this.rows;
}
/**
* 获取最大页码
* @return
*/
public int getMaxPager() {
int maxPager=this.total/this.rows;
if(this.total%this.rows!=0)
maxPager++;
return maxPager;
}
/**
* 上一页
* @return
*/
public int getProviousPager() {
int provPager=this.page-1;
if(provPager<=1)
provPager=1;
return provPager;
}
/**
* 下一页
* @return
*/
public int getNextPager() {
int nextPager=this.page+1;
if(nextPager>=getMaxPager())
nextPager=getMaxPager();
return nextPager;
}
public void setRequest(HttpServletRequest req) {
String page=req.getParameter("page");
String rows=req.getParameter("rows");
String pagination=req.getParameter("pagination");
//设置参数
this.setPage(page);
this.setRows(rows);
this.setPagintaion(pagination);
//设置url请求路径
this.url=req.getRequestURI();
//设置请求参数
this.map=req.getParameterMap();
}
@Override
public String toString() {
return "PageBean [page=" + page + ", rows=" + rows + ", total=" + total + ", pagintaion=" + pagintaion
+ ", url=" + url + ", map=" + map + "]";
}
}
PageAspect
package com.zking.ssm.aspect;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.zking.ssm.util.PageBean;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
@Aspect
public class PageAspect {
//环绕通知:前+后
//切入点:* *..*Service.*Pager(..) 代表多个连接点集合
//* 代表方法返回值不限
//*.. 代表包名不限
//*Service 代表以Service结尾的类或者是接口
//*Pager 代表以Pager结尾的方法
//(..) 代表方法的参数不限
//适配器=通知+切入点
@Around(value="execution(* *..*Service.*Pager(..))")
public Object invoke(ProceedingJoinPoint joinPoint) throws Throwable {
//获取目标的执行参数
Object[] params = joinPoint.getArgs();
//定义PageBean对象
PageBean pageBean=null;
//循环参数
for (Object param : params) {
//判断参数的类型是否是PageBean
if(param instanceof PageBean){
pageBean= (PageBean) param;
break;
}
}
//判断是否分页
if(null!=pageBean&&pageBean.isPagintaion())
PageHelper.startPage(pageBean.getPage(),pageBean.getRows());
//执行目标方法
Object returnValue = joinPoint.proceed(params);
if(null!=pageBean&&pageBean.isPagintaion()) {
if(returnValue instanceof List){
List list= (List) returnValue;
PageInfo pageInfo = new PageInfo(list);
pageBean.setTotal((int) pageInfo.getTotal());
}
}
return returnValue;
}
}
JsonResponseStatus
package com.jmh.springboot.utils;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
/**
* @author 蒋明辉
* @data 2022/9/26 17:36
*/
@Getter
@NoArgsConstructor
@AllArgsConstructor
public enum JsonResponseStatus {
success(200,"ok"),
error(500,"内部异常"),
operation_success(2000,"操作成功"),
operation_failed(5000,"操作失败"),
name_empty(20000,"用户名不能为空"),
pwd_empty(50000,"密码不能为空")
;
//响应代码
private int code;
//响应信息
private String msg;
}
JsonResponseBody
package com.jmh.springboot.utils;
import lombok.Data;
/**
* @author 蒋明辉
* @data 2022/9/26 17:38
*/
@Data
public class JsonResponseBody<T> {
//响应代码
private int code;
//响应信息
private String msg;
//响应数据
private T obj;
//响应总记录数
private int total=0;
public JsonResponseBody(){
this.code=JsonResponseStatus.success.getCode();
this.msg=JsonResponseStatus.success.getMsg();
}
public JsonResponseBody(JsonResponseStatus jsonResponseStatus){
this.code=jsonResponseStatus.getCode();
this.msg=jsonResponseStatus.getMsg();
}
public JsonResponseBody(T obj){
this.obj=obj;
this.code=JsonResponseStatus.success.getCode();
this.msg=JsonResponseStatus.success.getMsg();
}
public JsonResponseBody(T obj,int total){
this.obj=obj;
this.total=total;
this.code=JsonResponseStatus.success.getCode();
this.msg=JsonResponseStatus.success.getMsg();
}
}
HelloWorldController
package com.jmh.springboot.controller;
import com.jmh.springboot.model.Book;
import com.jmh.springboot.utils.JsonResponseBody;
import com.jmh.springboot.utils.JsonResponseStatus;
import com.jmh.springboot.utils.PageBean;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author 蒋明辉
* @data 2022/9/26 16:03
*/
@RestController
public class HelloWorldController {
/**
* 增加
*/
@RequestMapping("/addBook")
public JsonResponseBody<?> add(Book book){
try {
return new JsonResponseBody<>(JsonResponseStatus.operation_success);
}catch (Exception e){
return new JsonResponseBody<>(JsonResponseStatus.operation_failed);
}
}
/**
* 删除
*/
@RequestMapping("/delBook")
public JsonResponseBody<?> delBook(Book book){
try {
return new JsonResponseBody<>(JsonResponseStatus.operation_success);
}catch (Exception e){
return new JsonResponseBody<>(JsonResponseStatus.operation_failed);
}
}
/**
* 编辑
*/
@RequestMapping("/editBook")
public JsonResponseBody<?> editBook(Book book){
try {
return new JsonResponseBody<>(JsonResponseStatus.operation_success);
}catch (Exception e){
return new JsonResponseBody<>(JsonResponseStatus.operation_failed);
}
}
/**
* 查询单个
*/
@RequestMapping("/querySingleBook")
public JsonResponseBody<Book> querySingleBook(Book book){
Book b = Book.builder().id(1).name("金梅瓶").price(99f).build();
return new JsonResponseBody<>(b);
}
/**
* 查询全部
*/
@RequestMapping("/queryBookAll")
public JsonResponseBody<List<Book>> queryBookAll(Book book){
List<Book> list = new ArrayList<>();
list.add(Book.builder().id(1).name("金梅瓶").price(99f).build());
return new JsonResponseBody<>(list);
}
/**
* 带有分页的查询全部
*/
@RequestMapping("/queryBookPager")
public JsonResponseBody<List<Book>> queryBookPager(HttpServletRequest rep,Book book){
PageBean pageBean=new PageBean();
pageBean.setRequest(rep);
pageBean.setTotal(800);
List<Book> list = new ArrayList<>();
list.add(Book.builder().id(1).name("金梅瓶").price(99f).build());
return new JsonResponseBody<>(list,pageBean.getTotal());
}
}