项目基本搭建
一、 前提环境准备
JDK1.8+以上
Maven3.5+以上
IDEA(旗舰版)
PostMan(以上软件有需要的可以私信我)
二、基本的包结构及相关介绍
controler层
controller通过service的接口来控制业务流程,也可通过接收前端传过来的参数进行业务操作。
domain层
是数据库在项目中的类,包含实体类的属性和对应属性的set、get方法。
mapper层
也称Dao层,会定义实际使用到的方法,比如增删改查。数据源和数据库连接的参数都是在配置文件中进行配置的,配置文件一般在同层的XML文件夹中。对数据进行持久化操作。
service层
主要是针对具体的问题的操作,把一些数据层的操作进行组合,间接与数据库打交道(提供操作数据库的方法)。
要做这一层的话,要先设计接口,在实现类。
utils层
工具类层,通用的、与业务无关的,可以独立出来,可供其他项目使用
基本逻辑:
新手小白,个人见解,如有疑问还请指出,谢谢。
三、首先创建一个Maven项目
可以在线创建网址请点击
HTTP接口GET请求方法
定义一个工具类接口
utils层
package net.xdclass.demoproject.utils;
public class JsonData {
private int code;
private String msg;
private Object data;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public JsonData(int code, Object data){
this.code=code;
this.data=data;
}
public JsonData(int code,Object data,String msg){
this.code=code;
this.data=data;
this.msg=msg;
}
public static JsonData buildSucess(Object data){
return new JsonData(0,data);
}
public static JsonData buildErro(String msg){
return new JsonData(-1,msg);
}
public static JsonData buildSucess(String msg,int code){
return new JsonData(code,msg);
}
}
GET请求一般用于查询请求
视频列表查询为例
domain层
package net.xdclass.demoproject.domain;
//import javax.xml.crypto.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.Date;
import java.io.Serializable;
import java.util.List;
public class Video implements Serializable {
private int id;
private String title;
private String summary; //概要
private int price; //价格
@JsonProperty("conver_Img") //另存名
private String converImg; //封面图
@JsonProperty("crete_Time")
@JsonFormat(pattern="yyyy-MM-dd hh:mm:ss",locale="zh",timezone="GMT+8") //日期格式化
private Date creteTime; //创建时间
@JsonProperty("chapter_list")
// @JsonInclude(JsonInclude.Include.NON_NULL)
private List<Chapter> chapterlist;
public List<Chapter> getChapterlist() {
return chapterlist;
}
public void setChapterlist(List<Chapter> chapterlist) {
this.chapterlist = chapterlist;
} //视频里面章信息
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getSummary() {
return summary;
}
public void setSummary(String summary) {
this.summary = summary;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getConverImg() {
return converImg;
}
public void setConverImg(String converImg) {
this.converImg = converImg;
}
public Date getCreteTime() {
return creteTime;
}
public void setCreteTime(Date creteTime) {
this.creteTime = creteTime;
}
public Video(int id, String title) {
this.id = id;
this.title = title;
this.creteTime = new Date();
}
@Override
public String toString() {
return "Video{" +
"id=" + id +
", title='" + title + '\'' +
", summary='" + summary + '\'' +
", price=" + price +
", converImg='" + converImg + '\'' +
", creteTime=" + creteTime +
", chapterlist=" + chapterlist +
'}';
}
}
mapper层
@Repository //mapper层注释
public class VideoMapper {
//模仿数据库数据
private static Map<Integer, Video> videoMap = new HashMap<>();
static {
videoMap.put(1,new Video(1,"xd"));
videoMap.put(2,new Video(2,"xid"));
videoMap.put(3,new Video(3,"xud"));
videoMap.put(4,new Video(4,"xdd"));
}
// 将map集合转换成list集合
public List<Video> listVideo (){
List<Video> list =new ArrayList<>();
list.addAll( videoMap.values());
return list;
}
}
service层
@Service //service蹭注释
public class VideoServiceimpl implements VideoService {
@Autowired //相当于new一个videoMapper,可直接调用
private VideoMapper videoMapper;
// 重写接口里面的方法,返回给list
@Override
public List<Video> listVideo() {
return videoMapper.listVideo();
}
}
controler层
@RestController //返回json格式;不用Controller是因为这个无法返回json格式
@RequestMapping("/api/v1/pub/video") //相当于url路径
public class VideoController {
@Autowired
private VideoService videoService;
// @RequestMapping(value = "list",method = RequestMethod.GET)
@GetMapping("list")
public JsonData list(){
List<Video> list= videoService.listVideo();
return JsonData.buildSucess(list);
}
测试结果(返回mapper里面的信息)
用户登录接口(Post)
controler层
@PostMapping("login")
public JsonData login(@RequestBody User user){
System.out.println("user" + user.toString());
// 调用service的login方法
String token= userService.login(user.getUsername(),user.getPwd());
//如果token不为空则调用成功否则错误
return token != null?JsonData.buildSucess(token):JsonData.buildErro("账号密码错误");
}
mapper层
@Repository
public class UserMapper {
private static Map<String , User> videoMap= new HashMap<>();
static {
videoMap.put("xd1",new User(1,"xd1","123"));
videoMap.put("jack",new User(2,"jack","1234"));
videoMap.put("xd3",new User(3,"xd3","12345"));
videoMap.put("xd4",new User(4,"xd4","1234567"));
}
public User login(String usernam ,String pwd){
User user= videoMap.get(usernam);
//判断是否为空
if (user==null){
return null;
}
if (user.getPwd().equals(pwd)){
return user;
}
return null;
}
service层
@Service
public class UserServiceimpl implements UserService {
private static Map<String, User> map=new HashMap<>();
@Autowired
private UserMapper userMapper;
// 调用mapper层判断是否为空,不为空给每一个用户设置一个id
@Override
public String login(String username, String pwd) {
User user= userMapper.login(username,pwd);
if (user==null){
return null;
}else {
String token= UUID.randomUUID().toString();
System.out.println(token);
map.put(token,user);
return token;
}
}
实现
对象数组提交接口
以视频里面的章节为例
新建一个domain
注意事项:
修改别名的时候之后也要用别名
指定字段不返回:@JsonIgnore
指定日期格式:@JsonFormat(pattern=“yyyy-MM-dd hh:mm:ss”,locale=“zh”,timezone=“GMT+8”)
空字段不返回:@JsonInclude(Include.NON_NULL)
指定别名:@JsonProperty