文章目录
基础微服务-标签CRUD
1. 模块搭建tensquare_base
- 搭建基础微服务模块tensquare_base , pom.xml引入依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>com.tensquare</groupId> <artifactId>tensquare_common</artifactId> <version>1.0-SNAPSHOT</version> </dependency>
- 创建启动类
提示:IDEA创建main方法的快捷键是 psvmpackage com.tensquare.base; /** * Created by 37269 on 2018/6/1. */ @SpringBootApplication public class BaseApplication { public static void main(String[] args) { SpringApplication.run(BaseApplication.class); } @ Bean public IdWorker idWorker(){ return new IdWorker(1,1); } }
- 在resources下创建application.yml
server: port: 9001 spring: application: name: tensquare‐base #指定服务名 datasource: driverClassName: com.mysql.jdbc.Driver url: jdbc:mysql://192.168.184.134:3306/tensquare_base? characterEncoding=utf‐8 username: root password: 123456 jpa: database: MySQL show‐sql: true generate‐ddl: true
2. 标签管理-CRUD
2.1 表结构分析
- 表名称:tb_label
字段名称 字段含义 字段类型 备注 id ID 文本 labelname 标签名称 文本 state 状态 文本 0:无效 1:有效 count 使用数量 整型 fans 关注数 整型 recommend 是否推荐 文本 0:不推荐 1:推荐 - 建数据库:
/*!40101 SET NAMES utf8 */; /*!40101 SET SQL_MODE=''*/; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; CREATE DATABASE /*!32312 IF NOT EXISTS*/`tensquare_base` /*!40100 DEFAULT CHARACTER SET utf8 */; USE `tensquare_base`;
- 建表语句:
/*Table structure for table `tb_label` */ DROP TABLE IF EXISTS `tb_label`; CREATE TABLE `tb_label` ( `id` varchar(20) NOT NULL COMMENT '标签ID', `labelname` varchar(100) DEFAULT NULL COMMENT '标签名称', `state` varchar(1) DEFAULT NULL COMMENT '状态', `count` bigint(20) DEFAULT NULL COMMENT '使用数量', `recommend` varchar(1) DEFAULT NULL COMMENT '是否推荐', `fans` bigint(20) DEFAULT NULL COMMENT '粉丝数', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='标签'; /*Data for the table `tb_label` */ insert into `tb_label`(`id`,`labelname`,`state`,`count`,`recommend`,`fans`) values ('1','java','1',NULL,NULL,NULL), ('2','PHP','1',NULL,NULL,NULL), ('3','C++','1',NULL,NULL,NULL), ('4','python','1',NULL,NULL,NULL);
2.2 CRUD的实现
-
实体类
创建com.tensquare.base包,包下创建pojo包 ,包下创建实体类Labelpackage com.tensquare.base.pojo; /** * 标签的实体类 */ @Entity @Table(name = "tb_label") public class Label implements Serializable { @Id private String id; private String labelname; private String state; private Integer count; private Integer fans; private String recommend; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getLabelname() { return labelname; } public void setLabelname(String labelname) { this.labelname = labelname; } public String getState() { return state; } public void setState(String state) { this.state = state; } public Integer getCount() { return count; } public void setCount(Integer count) { this.count = count; } public Integer getFans() { return fans; } public void setFans(Integer fans) { this.fans = fans; } public String getRecommend() { return recommend; } public void setRecommend(String recommend) { this.recommend = recommend; } }
-
创建数据访问接口
com.tensquare.base包下创建dao包,包下创建LabelDao接口package com.tensquare.base.dao; import com.tensquare.base.pojo.Label; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; /** * 标签的持久层接口 */ public interface LabelDao extends JpaRepository<Label, String>, JpaSpecificationExecutor<Label> { }
JpaRepository提供了基本的增删改查
JpaSpecificationExecutor用于做复杂的条件查询 -
业务逻辑类
com.tensquare.base包下创建service包,包下创建LabelService类。 在这个类中,我们
实现基本的增删改查功能package com.tensquare.base.service; /** * 标签的业务层 */ @Service public class LabelService { @Autowired private LabelDao labelDao; @Autowired private IdWorker idWorker; /** * 查询所有标签 * @return */ public List<Label> findAll(){ return labelDao.findAll(); } /** * 根据id查询 * @param id * @return */ public Label findById(String id) { return labelDao.findById(id).get(); } /** * 保存 * @param label */ public void save(Label label) { //设置id label.setId(String.valueOf(idWorker.nextId())); labelDao.save(label); } /** * 更新 * @param label */ public void update(Label label) { labelDao.save(label); } /** * 删除 * @param id */ public void delete(String id) { labelDao.deleteById(id); } }
-
控制器类
com.tensquare.user包下创建controller包,创建UserControllerpackage com.tensquare.base.web; /** * 标签控制器 */ @RestController @RequestMapping("/label") @CrossOrigin // 当前的控制器支持跨域访问 public class LabelController { @Autowired private LabelService labelService; /** * 查询所有 * @return */ @RequestMapping(method = RequestMethod.GET) public Result findAll() { List<Label> labels = labelService.findAll(); return new Result(true, StatusCode.OK,"查询成功",labels); } /** * 根据id查询 * @param id * @return */ @RequestMapping(value = "/{id}",method = RequestMethod.GET) public Result findById(@PathVariable("id") String id) { Label label = labelService.findById(id); return new Result(true, StatusCode.OK,"查询id成功",label); } /** * 保存 * @param label * @return */ @RequestMapping(method = RequestMethod.POST) public Result save(@RequestBody Label label) { labelService.save(label); return new Result(true, StatusCode.OK,"保存成功"); } /** * 更新 * @param label * @return */ @RequestMapping(value = "/{id}",method = RequestMethod.PUT) public Result update(@PathVariable("id") String id,@RequestBody Label label) { label.setId(id); labelService.update(label); return new Result(true, StatusCode.OK,"更新成功"); } /** * 根据id删除 * @param id * @return */ @RequestMapping(value = "/{id}",method = RequestMethod.DELETE) public Result delete(@PathVariable("id") String id) { labelService.delete(id); return new Result(true, StatusCode.OK,"删除成功"); } }
@CrossOrigin
用于解决跨域调用
2.3 功能测试
- 测试查询全部数据
使用浏览器测试GET方法 http://localhost:9001/label - 测试根据ID查询标签
使用浏览器测试GET方法 http://localhost:9001/label/1 - 测试增加
使用postMan工具来进行测试POST PUT DELETE等方法。
- 测试修改
- 测试删除
3. 公共异常处理
为了使我们的代码更容易维护,我们创建一个类集中处理异常
在om.tensquare.user.controller包下创建公共异常处理类BaseExceptionHandler
package com.tensquare.base;
import entity.Result;
import entity.StatusCode;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* 统一异常处理类
*/
@ControllerAdvice
public class BaseExceptionHandler {
@ExceptionHandler(value = Exception.class)
@ResponseBody
public Result error(Exception e) {
e.printStackTrace();
return new Result(false, StatusCode.ERROR, e.getMessage());
}
}
4. 跨域处理
跨域是什么?浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域 。我们是采用前后端分离开发的,也是前后端分离部署的,必然会存在跨域问题。 怎么解决跨域?很简单,只需要在controller类上添加注解@CrossOrigin
即可!这个注解其实是CORS的实现。
CORS(Cross-Origin Resource Sharing, 跨源资源共享)是W3C出的一个标准,其思想是使用自定义的HTTP头部让浏览器与服务器进行沟通,从而决定请求或响应是应该成功,还是应该失败。因此,要想实现CORS进行跨域,需要服务器进行一些设置,同时前端也需要做一些配置和分析。本文简单的对服务端的配置和前端的一些设置进行分析。