一、十次方项目工程搭建
-
利用工具idea2020.3.1创建父工程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cAKZ6RxK-1610363457447)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210111123144451.png)]
-
删掉src文件夹(可以不删,因为这个文件夹没啥用)
-
创建utils工具类
-
创建StatusCode类
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LddKakxj-1610363457453)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210111123704515.png)]
以上是我们所需要用到的前端状态返回码
-
-
创建result包
创建无分页结果类Result
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kJWY5PZX-1610363457457)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210111124504456.png)]
并写好get和set方法
创建有分页结果类PageResult
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8vJxfjSM-1610363457461)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210111125033180.png)]
注意:这里的PageResult类没有写flag,code,msg等参数,是因为在后面我们可以直接将PageResult放入Result中,这样可以提高效率
-
创建vo包。在vo包下建Label实体类
package com.tensquare.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "tb_label")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Label {
@Id
private String id;//OID编号
@Column(name = "labelname")
private String labelname;//标签名称
@Column(name = "state")
private String state;//状态
@Column(name = "count")
private Long count;//使用数量
@Column(name = "fans")
private Long fans;//关注数
@Column(name = "recommend")
private String recommend;//是否推荐
}
创建dao包,健LabelDao接口
package com.tensquare.dao;
import com.tensquare.vo.Label;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
public interface LabelDao extends JpaRepository<Label,String>, JpaSpecificationExecutor<Label> {
}
LabelDao继承了两个接口JpaRepository和JpaSpecificationExecutor。其中jparepoditory有:
List<T> findAll();
List<T> findAll(Sort var1);
List<T> findAllById(Iterable<ID> var1);
<S extends T> List<S> saveAll(Iterable<S> var1);
void flush();
<S extends T> S saveAndFlush(S var1);
void deleteInBatch(Iterable<T> var1);
void deleteAllInBatch();
T getOne(ID var1);
<S extends T> List<S> findAll(Example<S> var1);
<S extends T> List<S> findAll(Example<S> var1, Sort var2);
关于这两个接口的区别,这里有详细的介绍
[]: https://cloud.tencent.com/developer/article/1429349
- 建service包,包下建LabelService类
@Service
public class LabelService {
@Autowired
private LabelDao labelDao;
@Autowired
private IdWorker idWorker;
/**
* 查询全部
* @return
**/
public List<Label> findAll(){
return labelDao.findAll();
}
/**
* 根据ID查询标签
* @return
*/
public Label findById(String id){
return labelDao.findById(id).get();
}
/**
* 增加标签
* @param label
*/
public void add(Label label){
label.setId( idWorker.nextId()+"" );//设置ID
labelDao.save(label);
}
/**
* 修改标签
* @param label
*/
public void update(Label label){
labelDao.save(label);
}
/**
* 删除标签
* @param id
*/
public void deleteById(String id){
labelDao.deleteById(id);
}
-
建controller包,建LabelController类
@RestController @RequestMapping("label") public class LabelController { @Autowired private LabelService labelService; /** * 查询全部列表 * @return */ @RequestMapping(method = RequestMethod.GET) public Result<List> findAll(){ return new Result<>(true, StatusCode.OK,"查询成功", labelService.findAll() ); } /** * 根据ID查询标签 * @param id * @return */ @RequestMapping(value="/{id}",method = RequestMethod.GET) public Result<Label> findById(@PathVariable String id){ return new Result<>(true,StatusCode.OK,"查询成功",labelService.findById(id)); } /** * 增加标签 * * @param label * @return */ @RequestMapping(method = RequestMethod.POST) public Result add( @RequestBody Label label){ labelService.add(label); return new Result(true,StatusCode.OK,"增加成功"); } /** * 修改标签 * @param label * @return */ @RequestMapping(value="/{id}" ,method = RequestMethod.PUT) public Result update( @RequestBody Label label,@PathVariable String id){ label.setId(id); labelService.update(label); return new Result(true,StatusCode.OK,"修改成功"); } /** * 删除标签 * @param id * @return **/ @RequestMapping(value="/{id}" ,method = RequestMethod.DELETE) public Result deleteById(@PathVariable String id){ labelService.deleteById(id); return new Result(true,StatusCode.OK,"删除成功"); } }
-
用postman工具进行测试。
-
建统一异常处理类
@ControllerAdvice public class BaseExceptionHandler { @ExceptionHandler(value = Exception.class) @ResponseBody public Result error(Exception e) { e.printStackTrace();//在控制台打印错误 if(e.getMessage().contains("exists")){ return new Result(false, StatusCode.ERROR, "标签不存在"); }else{ return new Result(false, StatusCode.ERROR, e.getMessage()); } } }