本篇涉及技术栈:
spring boot
spring cloud
mybatis
vue
目标:
基础的查询功能,完成nacos的注册与发现
小白第一个分布式项目,可能有地方没有领悟到位,还请海涵
本篇项目结构:
父项目:Qiqi-java
子模块:Qiqi-common、Qiqi-provider
Qiqi-common结构:
简介:Qiqi-common主要用于查询电影
common:公共返回类型Result
controller:controller和dto、request等用于与前端交互的类
entity:实体类
exception:全局异常
mapper:mapper类
service:Iservice和serviceImpl
Qiqi-provider结构:
简介:Qiqi-provider主要用于查询和操作电影详细情况
common:公共返回类型Result
controller:controller和dto、request等用于与前端交互的类
entity:实体类
exception:全局异常
mapper:mapper类
service:Iservice和serviceImpl
Sql数据表:
-- 电影详情表
CREATE TABLE `basics` (
`tconst` String NOT NULL COMMENT '唯一识别符',
`titleType` varchar(50) NOT NULL COMMENT '视频类型(电影 or 视频)',
`primaryTitle` varchar(255) NOT NULL COMMENT '当前标题',
`oldTitle` varchar(255) NOT NULL COMMENT '原始标题',
`isAdult` tinyint NOT NULL COMMENT '是否面向成人(0否 1是)',
`startYear` datetime NOT NULL COMMENT '连载开始时间',
`endYear` datetime DEFAULT NULL COMMENT '连载结束时间,未结束为 ''\\n''',
`runtimeMinutes` bigint NOT NULL COMMENT '总分钟数',
`genres` varchar(255) NOT NULL COMMENT '作品类型(爱情、动作等)',
PRIMARY KEY (`tconst`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-- 电影总览表(电影详情表外层)
CREATE TABLE `akas` (
`tconst` String NOT NULL COMMENT '唯一标识符',
`title` varchar(255) NOT NULL COMMENT '当前标题',
`region` varchar(255) NOT NULL COMMENT '语言地区(缩写,例如CN)',
`language` varchar(255) NOT NULL COMMENT '使用的语言',
`types` varchar(255) DEFAULT NULL COMMENT '播放形式(剧场上映、电视播放),可为空',
`attributes` varchar(255) DEFAULT NULL COMMENT '其他特征,如修订版、加长版,可为空',
`isOrlginalTitle` tinyint NOT NULL COMMENT '是否为原始标题,是则1 否则0',
`id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-- 季度剧集信息表
CREATE TABLE `episode` (
`tconst` varchar(255) NOT NULL COMMENT '唯一标识符',
`parentTconst` varchar(255) NOT NULL COMMENT '父标识符',
`seasonNumber` int NOT NULL COMMENT '季度编号,表示某系列第几季',
`episodeNumber` int NOT NULL COMMENT '剧集编号,表示当前季度的第几集',
PRIMARY KEY (`tconst`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
两个模块的实体类:
package com.example.Qiqijava.qiqicommon.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
@Data
public class Basics {
/**
* 唯一标识符
* 自增
* 非空
*/
private String tconst;
/**
* 视频类型(电影 or 视频)
* 非空
*/
private String titleType;
/**
* 当前标题
* 非空
*/
private String primaryTitle;
/**
* 原始标题
* 非空
*/
private String oldTitle;
/**
* 是否面向成人
* 0否 1是
* 非空
*/
private char isAdult;
/**
* 连载开始时间
* 非空
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date startYear;
/**
* 连载结束时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date endYear;
/**
* 总时长
* 非空
*/
private Long runtimeMinutes;
/**
* 作品类型
* 爱情、动作、科幻等
*/
private String genres;
/**
* id
* 非空
*/
private Integer id;
}
package com.example.qiqijava.qiqiprovider.entity;
import lombok.Data;
@Data
public class Akas {
/**
* 唯一标识符
* 非空
*/
private String tconst;
/**
* 当前标题
* 非空
*/
private String title;
/**
* 语言地区
* 非空
*/
private String region;
/**
* 使用的语言编码
* 非空
*/
private String language;
/**
* 播放形式
*/
private String types;
/**
* 其他特征
*/
private String attributes;
/**
* 是否为原始标题
* 非空
*/
private char isOrlginalTitle;
/**
* id
* 自增
* 非空
*/
private Integer id;
}
service层(只展示impl)
package com.example.Qiqijava.qiqicommon.service.impl;
import com.example.Qiqijava.qiqicommon.controller.request.BaseRequest;
import com.example.Qiqijava.qiqicommon.entity.Akas;
import com.example.Qiqijava.qiqicommon.entity.Basics;
import com.example.Qiqijava.qiqicommon.mapper.BasicsMapper;
import com.example.Qiqijava.qiqicommon.service.IBasicsService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
//service的作用就是聚合业务,将业务放到service里面写
@Slf4j
@Service
@Transactional
public class BasicsService implements IBasicsService {
@Autowired
BasicsMapper basicsMapper;
List<Akas> temporary ;
@Override
public List<Basics> list() {
return basicsMapper.list();
}
@Override
public PageInfo<Basics> page(BaseRequest baseRequest){
PageHelper.startPage(baseRequest.getPageNum(),baseRequest.getPageSize());
List<Basics> basicsList = basicsMapper.listByCondition(baseRequest);
return new PageInfo<>(basicsList);
}
@Override
public PageInfo<Akas> akasPage(Integer id) {
return null;
}
@Override
public void save(Basics obj) {
}
@Override
public Basics getById(Integer d_id) {
return basicsMapper.getById(d_id);
}
@Override
public void update(Basics obj) {
basicsMapper.updateById(obj);
}
@Override
public void deleteById(Integer d_id) {
basicsMapper.deleteById(d_id);
}
@Override
public PageInfo<Akas> getByIdAkas(String tconst) {
System.out.println("++++++++++++++++++++++++++++++++++++");
System.out.println("tconst ===>" + tconst);
temporary = basicsMapper.listByConditionAkas(tconst);
System.out.println("++++++++++++++++++++++++++++++++++++");
System.out.println("temporary ====> " + temporary);
return new PageInfo<>(temporary);
}
}
package com.example.qiqijava.qiqiprovider.service.impl;
import com.example.qiqijava.qiqiprovider.entity.Akas;
import com.example.qiqijava.qiqiprovider.mapper.AkasMapper;
import com.example.qiqijava.qiqiprovider.service.IAkasService;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
//service的作用就是聚合业务,将业务放到service里面写
@Slf4j
@Service
@Transactional
public class AkasService implements IAkasService {
@Autowired
AkasMapper akasMapper;
List<Akas> temporary ;
@Override
public List<Akas> list() {
return null;
}
@Override
public void save(Akas obj) {
}
@Override
public Akas getById(Integer d_id) {
return akasMapper.getById(d_id);
}
@Override
public void update(Akas obj) {
akasMapper.updateById(obj);
}
@Override
public void deleteById(Integer d_id) {
akasMapper.deleteById(d_id);
}
@Override
public PageInfo<Akas> getByIdAkas(String tconst) {
System.out.println("++++++++++++++++++++++++++++++++++++");
System.out.println("tconst ===>" + tconst);
temporary = akasMapper.listByConditionAkas(tconst);
System.out.println("++++++++++++++++++++++++++++++++++++");
System.out.println("temporary ====> " + temporary);
return new PageInfo<>(temporary);
}
}
mapper:
package com.example.Qiqijava.qiqicommon.mapper;
import com.example.Qiqijava.qiqicommon.controller.request.BaseRequest;
import com.example.Qiqijava.qiqicommon.entity.Akas;
import com.example.Qiqijava.qiqicommon.entity.Basics;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
@Mapper
@Repository
public interface BasicsMapper {
List<Basics> list();
List<Basics> listByCondition(BaseRequest baseRequest);
List<Akas> listByConditionAkas(String tconst);
void save(Basics obj);
Basics getById(Integer d_id);
void updateById(Basics obj);
void deleteById(Integer d_id);
List<Akas> getByIdAkas(Integer id);
}
package com.example.qiqijava.qiqiprovider.mapper;
import com.example.qiqijava.qiqiprovider.entity.Akas;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
@Mapper
@Repository
public interface AkasMapper {
void save(Akas obj);
Akas getById(Integer d_id);
void updateById(Akas obj);
void deleteById(Integer d_id);
List<Akas> listByConditionAkas(String tconst);
}
controller:
package com.example.Qiqijava.qiqicommon.controller;
import com.example.Qiqijava.qiqicommon.common.Result;
import com.example.Qiqijava.qiqicommon.controller.request.BasicsPageRequest;
import com.example.Qiqijava.qiqicommon.entity.Basics;
import com.example.Qiqijava.qiqicommon.service.IBasicsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@CrossOrigin
@RestController
@RequestMapping("/basics")
public class BasicsController {
@Autowired
IBasicsService basicsService;
//总查询
@GetMapping("/page")
public Result page(BasicsPageRequest basicsPageRequest){
System.out.println("++++++++++++++++++++++++++++++++++++");
System.out.println("basics ====> " + basicsService.page(basicsPageRequest));
return Result.success(basicsService.page(basicsPageRequest
));
}
//修改查询
@GetMapping("/{d_id}")
public Result getById(@PathVariable Integer d_id){
Basics medicinal = basicsService.getById(d_id);
return Result.success(medicinal);
}
//增加
@PostMapping("/save")
public Result save(@RequestBody Basics obj){
basicsService.save(obj);
return Result.success();
}
//修改
@PostMapping("/update")
public Result update(@RequestBody Basics obj){
basicsService.update(obj);
return Result.success();
}
//删除
@DeleteMapping("/del/{d_id}")
public Result del(@PathVariable Integer d_id){
basicsService.deleteById(d_id);
return Result.success();
}
//
}
package com.example.qiqijava.qiqiprovider.controller;
import com.example.qiqijava.qiqiprovider.common.Result;
import com.example.qiqijava.qiqiprovider.entity.Akas;
import com.example.qiqijava.qiqiprovider.service.IAkasService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@CrossOrigin
@RestController
@RequestMapping("/akas")
public class AkasController {
@Autowired
IAkasService akasService;
//总查询
@GetMapping("/akaslists/{tconst}")
public Result akaslist(@PathVariable String tconst){
return Result.success( akasService.getByIdAkas(tconst));
}
//修改查询
@GetMapping("/{d_id}")
public Result getById(@PathVariable Integer d_id){
Akas medicinal = akasService.getById(d_id);
return Result.success(medicinal);
}
//增加
@PostMapping("/save")
public Result save(@RequestBody Akas obj){
akasService.save(obj);
return Result.success();
}
//修改
@PostMapping("/update")
public Result update(@RequestBody Akas obj){
akasService.update(obj);
return Result.success();
}
//删除
@DeleteMapping("/del/{d_id}")
public Result del(@PathVariable Integer d_id){
akasService.deleteById(d_id);
return Result.success();
}
//
}
application.yml
server:
port: 9091
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3307/qiqi
username: root
password: 123123
cloud:
nacos:
discovery:
server-addr: localhost:8848
application:
name: qiqi-provinder
mybatis:
mapper-locations: classpath:mapping/*.xml
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
server:
port: 9090
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3307/qiqi
username: root
password: 123123
cloud:
nacos:
discovery:
server-addr: localhost:8848
application:
name: qiqi-common
mybatis:
mapper-locations: classpath:mapping/*.xml
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
至此,已经完成了基础的查询功能,并完成了nacos的注册与发现功能