å¨å端å¼åè¿ç¨ä¸ï¼æ们ç»ä¸å¼çå°±æ¯æ°æ®ç»æ设计以åå ³èçé®é¢ã
ç¶èå¨ä¼ ç»çåä½æ¶æçå¼åä¸ï¼è§£å³æ°æ®å ³èçé®é¢å¹¶ä¸é¾ï¼éè¿å ³ç³»åæ°æ®åºä¸çå ³èæ¥è¯¢åè½ï¼ä»¥åMyBatisç级èåè½å³å¯å®ç°ã
ä½æ¯å¨åå¸å¼å¾®æå¡ä¸ï¼æ´ä¸ªç³»ç»é½è¢«æåæäºä¸ä¸ªä¸ªåç¬ç模åï¼æ¯ä¸ªæ¨¡åä¹é½æ¯ä½¿ç¨çåç¬çæ°æ®åºãè¿ç§æ åµä¸ï¼åå¦ä½è§£å³ä¸å模åä¹é´æ°æ®å ³èé®é¢å¢ï¼
äºå®ä¸ï¼åå¸å¼å¾®æå¡æ¯é常å¤æçï¼æ 论æ¯ç³»ç»æ¶æï¼è¿æ¯æ°æ®ç»æ设计ï¼é½æ²¡æä¸ä¸ªç»ä¸çæ¹æ¡ï¼å æ¤æ ¹æ®å®é æ åµè¿è¡ç¡®å®å³å¯ï¼å¯¹äºæ°æ®å ³èçè·¨åºæ¥è¯¢ï¼äºå®ä¸ä¹æå¾å¤æ¹æ³ï¼å¨ç½ä¸æå¦ä¸æè·¯ï¼
- æ°æ®åä½æ³
- è¿ç¨è¿æ¥è¡¨
- æ°æ®å¤å¶
- 使ç¨éå ³ç³»åæ°æ®åº
- ...
ä»å¤©ï¼æå°±æ¥å享ä¸ä¸ªç®åçåå¸å¼å¾®æå¡è·¨åºæ¥è¯¢æä½ï¼å¤§å®¶å¯ä»¥åèä¸ä¸ã
æ们è¿æ¯ä»ä¸å¯¹å¤ï¼å¤å¯¹å¤çè§åº¦æ¥è§£å³è¿ä¸ªé®é¢ã
1ï¼å¦ä¹ åéè¦äºè§£
å¨ç»§ç»å¾ä¸çä¹åï¼ææ³å ä»ç»ä¸ä¸è¿æ¬¡ç示ä¾ä¸æ使ç¨çç»ä»¶ï¼
- Spring Cloud 2022.0.0åSpring Cloud Alibaba 2022.0.0.0-RC1
- MyBatis-Plusä½ä¸ºORMæ¡æ¶
- Dynamic Datasourceä½ä¸ºå¤æ°æ®æºåæ¢ç»ä»¶
- Nacosä½ä¸ºæ³¨åä¸å¿
- MySQLæ°æ®åº
- OpenFeignè¿ç¨è°ç¨
å æ¤ï¼å¨å¾ä¸çä¹åï¼éè¦å ææ¡ä¸è¿°è¿äºç»ä»¶ç使ç¨ï¼æ¬æä¸åèµè¿°ã
ä¹åé½æ¯ä½¿ç¨MyBatisä½ä¸ºORMæ¡æ¶ï¼èMyBatis-Pluså¯ä»¥è§ä½å ¶å级çï¼çå»äºæ们åç¹æçMapper.xmlæ件çæ¥éª¤ï¼ä¸æç¹å«ç®åã
- MyBatis-Pluså®æ¹ææ¡£ï¼ä¼ éé¨
- Dynamic Datasourceå®æ¹ææ¡£ï¼ä¼ éé¨
- åä½æ¶æä¸æ°æ®ç»æå ³èçæä½æ¹å¼ï¼ä¼ éé¨
- Mavenå¤æ¨¡å项ç®é ç½®ï¼ä¼ éé¨
- Jackson注解è¿æ»¤å段ï¼ä¼ éé¨
å°ä¸è¿°ææåç½®å 容ææ¡ä¹åï¼åæ¥å¾ä¸çæ好ã
2ï¼è·¨åºæä½è§£å³æè·¯
æ们ä»æ°æ®çè系形å¼ï¼å³ä¸å¯¹å¤åå¤å¯¹å¤è¿ä¸¤ä¸ªè§åº¦ä¾æ¬¡è¿è¡åæã
(1) ä¸å¯¹å¤
ä¸å¯¹å¤äºå®ä¸æ¯è¾å¥½è§£å³ï¼è¿éæ使ç¨å段åä½ + è¿ç¨è°ç¨çæ¹å¼è§£å³ã
è¿é以**订å(Order)åç¨æ·(User)**为ä¾ï¼è®¢å对象ä¸é常è¦å å«ç¨æ·å ³ç³»ï¼ä¸ä¸ªç¨æ·ä¼äº§çå¤ä¸ªè®¢åï¼å æ¤ç¨æ·å订åææäºä¸å¯¹å¤çå ³ç³»ã
å¨åä½æ¶æä¸ï¼æ们å¾å®¹ææ³å°è®¾è®¡æè¿æ ·ï¼
è¿æ ·ï¼å¨æ¥è¯¢è®¢åçæ¶åï¼å¯ä»¥éè¿å ³èæ¥è¯¢çæ¹å¼å¾å°ç¨æ·å段信æ¯ã
ä½æ¯å¨åå¸å¼å¾®æå¡ä¸ï¼ç¨æ·å订å模å被æåå¼æ¥ï¼ä¸¤è çæ°æ®åºä¹åå¼äºï¼æ æ³ä½¿ç¨å ³èæ¥è¯¢äºï¼æä¹åå¢ï¼
è¿æ¶ï¼æ们å¯ä»¥å¨è®¢åç±»ä¸ï¼åä½ä¸ä¸ªuserIdå段ï¼å¯ä»¥ç´æ¥ä»æ°æ®åºååºï¼åéè¿è¿ç¨è°ç¨çæ¹å¼è°ç¨ç¨æ·æ¨¡åï¼ç¨è¿ä¸ªuserIdå»å¾å°ç¨æ·å¯¹è±¡ï¼æåç»è£ å³å¯ã
è¿æ ·ï¼è®¢åæå¡æ¥è¯¢è®¢å对象ï¼å¯ä»¥å为å¦ä¸å æ¥ï¼
- å ç´æ¥ä»æ°æ®åºååºè®¢å对象ï¼è¿æ ·ä¸è¿°Orderç±»ä¸çidãnameåuserIdé½å¯ä»¥ç´æ¥ä»æ°æ®åºååº
- ç¶åæ¿çè¿ä¸ªuserIdçå¼å»è¿ç¨è°ç¨ç¨æ·æå¡å¾å°ç¨æ·å¯¹è±¡ï¼å¡«å å°userå段
ä¸æ¤åæ¶ï¼æ们è¿å¯ä»¥æ³¨æä¸ä¸ç»èï¼
- å°Order对象è¿åç»å端æ¶ï¼å¯ä»¥è¿æ»¤æåä½å段userIdï¼èçæµéï¼éè¿Jackson注解å¯ä»¥å®ç°
- å端è¥è¦å°Order对象ä½ä¸ºåæ°ä¼ éç»å端ï¼åæ é带çuserå段å 容ï¼è¿æ ·åç«¯ä¼ æ¥åå¯ä»¥ç´æ¥ä¸¢è¿æ°æ®åºï¼å¹¶ä¸æ´å ç®æ´
(2) å¤å¯¹å¤
æ们ç¥éï¼å¤å¯¹å¤é常æ¯ä»¥æ桥表æ¹å¼å®ç°å ³èã
å¨æ¤æ们å¢å ä¸ä¸ªååç±»(Product)ï¼å订åç±»ææå¤å¯¹å¤å ³ç³»ï¼å³éè¦æ¥è¯¢ä¸ä¸ªè®¢åä¸å å«çææååï¼è¿éè¦æ¥è¯¢è¿ä¸ªåå被åªäºè®¢åå å«ã
å¨ä¼ ç»åä½æ¶æä¸ï¼æ们å¦ä¸è®¾è®¡ï¼
é£ä¹å¨åå¸å¼å¾®æå¡ä¸ï¼æ°æ®åºåå¼çæ åµä¸ï¼è¿ä¸ªæ桥表order_productæ¾å¨åªå¢ï¼
å¯ä»¥å°å ¶åç¬æ¾å¨ä¸ä¸ªæ°æ®åºä¸ï¼è¿ä¸ªæ°æ®åºå¨è¿é称ä¹ä¸ºæ桥表æ°æ®åºã
è¿æ ·ï¼æ¯å¦è¯´è®¢åæå¡æ¥è¯¢è®¢åçæ¶åï¼å¯ä»¥å为å¦ä¸å æ¥ï¼
- å ç´æ¥ä»è®¢åæ°æ®åºæ¥è¯¢åºè®¢åä¿¡æ¯ï¼è¿æ ·Orderç±»ä¸çidãnameåuserIdå°±å¾å°äº
- ç¶åä»æ桥表æ°æ®åºå»æ¥è¯¢åè¿ä¸ªè®¢åå ³èçååidï¼è¿æ ·å°±å¾å°äºä¸ä¸ªååidå表
- ç¨è¿ä¸ªååidå表å»è¿ç¨è°ç¨ååæå¡ï¼æ¥è¯¢å°æ¯ä¸ªid对åºçåå对象å¾å°ä¸ä¸ªåå对象å表
- å°ååå表ç»è£ å°Orderä¸çproductså段ä¸
é£ä¹åè¿æ¥ï¼ååæå¡ä¹æ¯éè¿ä¸æ ·çæ¹å¼å¾å°è®¢åå表并ç»è£ ã
å¯è§ï¼è¿ä¸¤ä¸ªå¤å¯¹å¤æ¨¡åï¼æä¸åç»èï¼
- éè¦ç¨å°ä¸¤ä¸ªæ°æ®åºï¼å æ¤éè¦é ç½®å¤æ°æ®æº
- 两è éè¦æ´é²æ¹éidæ¥è¯¢çæ¥å£ï¼ä½æ¯æ¹éidæ¥è¯¢çæ¶åï¼è¦æ³¨ææ»å¾ªç¯é®é¢ï¼è¿ä¸ªæ们å¨ä¸é¢ä»£ç ä¸å ·ä½æ¥ç
(3) æ»ç»
å¯è§ä¸è¿°è§£å³æ°æ®å ³èçæ¹å¼ï¼é½æ¯è¦éè¿è¿ç¨è°ç¨çæ¹å¼æ¥å®ç°ï¼è¿æ ·ç¬¦åå¾®æå¡ä¸èè´£åä¸ååï¼ä¸è¿ç¼ºç¹æ¯ç½ç»æ§è½ä¸æ¯å¾å¥½ã
ä½æ¯ï¼è¿ç§æ¹å¼è§£å³è§æ¨¡ä¸æ¯ç¹å«å¤æç项ç®å·²ç»è¶³å¤äºã
æ´ä½çç±»å¾åæ°æ®åºå¦ä¸ï¼
é£ä¹ä¸é¢ï¼æ们就æ¥å®ç°ä¸ä¸ã
3ï¼ä»£ç å®ç°
(1) ç¯å¢é ç½®
å¨å代ç ä¹åï¼æ们å è¦å¨æ¬å°æ建并è¿è¡å¥½MySQLåNacos注åä¸å¿ï¼è¿éæå·²ç»å¨æ¬å°éè¿Dockerçæ¹å¼é¨ç½²å¥½äºï¼å¤§å®¶å¯ä»¥å èªè¡é¨ç½²ã
ç¶åå¨è¿éï¼æ´ä¸ªå·¥ç¨æ¨¡åç»ç»å¦ä¸ï¼
- åæ¾å ¨é¨å®ä½ç±»ç模åï¼æ¯æ®éMaven项ç®ï¼è¢«å ¶å®æ¨¡åä¾èµ
- è¿ç¨è°ç¨å±ï¼æ¯æ®éMaven项ç®ï¼å ¶å®æå¡æ¨¡åä¾èµè¿ä¸ªæ¨¡åè¿è¡è¿ç¨è°ç¨
- 订åæå¡æ¨¡åï¼æ¯Spring Boot项ç®
- ååæå¡æ¨¡åï¼æ¯Spring Boot项ç®
- ç¨æ·æå¡æ¨¡åï¼æ¯Spring Boot项ç®
æ们ç¥éæå¡æä¾è åæå¡æ¶è´¹è å¨æ´ä¸ªåå¸å¼å¾®æå¡ä¸æ¯é常ç¸å¯¹çæ¦å¿µï¼èæå¡æ¶è´¹è æ¯éè¦è¿è¡è¿ç¨è°ç¨çï¼è¿æ ·æ¯ä¸ªæå¡æ¶è´¹è é½è¦å¼å ¥OpenFeignä¾èµå¹¶æ³¨å ¥ççï¼å æ¤æ们å¯ä»¥åç¬æææçæ¶è´¹è çè¿ç¨è°ç¨å±feignclientæ½ç¦»åºæ¥ï¼ä½ä¸ºè¿ä¸ªè¿ç¨è°ç¨æ¨¡åã
å¨æåæä¼ç»åºé¡¹ç®çä»åºçå°åï¼å¤§å®¶å¯ä»¥å¨ç¤ºä¾ä»åºä¸èªè¡æ¥çæ¯ä¸ªæ¨¡åçé ç½®æ件åä¾èµé ç½®ã
(2) æ°æ®åºçåå§å
å¨MySQLä¸éè¿ä»¥ä¸å½ä»¤ï¼å建å¦ä¸æ°æ®åºï¼
create database `db_order`;
create database `db_product`;
create database `db_user`;
create database `db_bridge`;
å¤å¶ä»£ç
ä¸è¿°db_bridgeå°±æ¯ä¸é¨åæ¾æ桥表çæ°æ®åºã
ç¶åä¾æ¬¡åå§åä¸ä¸ªæ°æ®åºã
db_orderæ°æ®åºï¼
-- 订åæ°æ®åº
drop table if exists `order_info`;
create table `order_info`
(
`id` int unsigned auto_increment,
`name` varchar(16) not null,
`user_id` int unsigned not null,
primary key (`id`)
) engine = InnoDB
default charset = utf8mb4;
-- æµè¯æ°æ®
insert into `order_info` (`name`, `user_id`)
values ('订å1', 1), -- id:1~4
('订å2', 1),
('订å3', 2),
('订å4', 3);
å¤å¶ä»£ç
db_productæ°æ®åºï¼
-- ååæ°æ®åº
drop table if exists `product`;
create table `product`
(
`id` int unsigned auto_increment,
`name` varchar(32) not null,
primary key (`id`)
) engine = InnoDB
default charset = utf8mb4;
-- åå§åæµè¯æ°æ®
insert into `product` (`name`)
values ('åå1'), -- id:1~3
('åå2'),
('åå3');
å¤å¶ä»£ç
db_useræ°æ®åºï¼
-- ç¨æ·æ°æ®åº
drop table if exists `user`;
create table `user`
(
`id` int unsigned auto_increment,
`username` varchar(16) not null,
primary key (`id`)
) engine = InnoDB
default charset = utf8mb4;
-- åå§åæ°æ®
insert into `user` (`username`)
values ('dev'), -- id:1~3
('test'),
('admin');
å¤å¶ä»£ç
db_bridgeæ°æ®åºï¼
-- å¤å¯¹å¤å
³èè®°å½æ°æ®åº
drop table if exists `order_product`;
-- 订å-ååå¤å¯¹å¤å
³è表
create table `order_product`
(
`order_id` int unsigned,
`product_id` int unsigned,
primary key (`order_id`, `product_id`)
) engine = InnoDB
default charset = utf8mb4;
-- åå§åæµè¯æ°æ®
insert into `order_product`
values (1, 1),
(1, 2),
(2, 1),
(2, 2),
(3, 2),
(3, 3),
(4, 1),
(4, 2),
(4, 3);
å¤å¶ä»£ç
(3) å®ä½ç±»çå®ä¹
ææçå®ä½ç±»åæ¾å¨db-entity模åä¸ã
é¦å æ们è¿æ¯å®ä¹ä¸ä¸ªç»æç±»Result<T>ä¸ç¨äºè¿åç»å端ï¼
package com.gitee.swsk33.dbentity.model;
import lombok.Data;
import java.io.Serializable;
/**
* è¿åç»å端çç»æ对象
*/
@Data
public class Result<T> implements Serializable {
/**
* æ¯å¦æä½æå
*/
private boolean success;
/**
* æ¶æ¯
*/
private String message;
/**
* æ°æ®
*/
private T data;
/**
* 设å®æå
*
* @param message æ¶æ¯
*/
public void setResultSuccess(String message) {
this.success = true;
this.message = message;
this.data = null;
}
/**
* 设å®æå
*
* @param message æ¶æ¯
* @param data æ°æ®
*/
public void setResultSuccess(String message, T data) {
this.success = true;
this.message = message;
this.data = data;
}
/**
* 设å®å¤±è´¥
*
* @param message æ¶æ¯
*/
public void setResultFailed(String message) {
this.success = false;
this.message = message;
this.data = null;
}
}
å¤å¶ä»£ç
ç¶åå°±æ¯æ°æ®åºå¯¹è±¡äºã
1. ç¨æ·ç±»
package com.gitee.swsk33.dbentity.dataobject;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
/**
* ç¨æ·ç±»
*/
@Data
public class User {
/**
* ç¨æ·id
*/
@TableId(type = IdType.AUTO)
private Integer id;
/**
* ç¨æ·å
*/
private String username;
}
å¤å¶ä»£ç
2. ååç±»
package com.gitee.swsk33.dbentity.dataobject;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import java.util.List;
/**
* åå表
*/
@Data
public class Product {
/**
* ååid
*/
@TableId(type = IdType.AUTO)
private Integer id;
/**
* ååå
*/
private String name;
/**
* ææè´ä¹°äºè¿ä¸ªååç订åï¼éç»è£
ï¼
*/
@TableField(exist = false)
private List<Order> orders;
}
å¤å¶ä»£ç
å¯è§è¿éç¨äº@TableField注解å°orderså段æ 注为éæ°æ®åºå段ï¼å 为è¿ä¸ªå段æ¯æ们åç»è¦æå¨ç»è£ çå¤å¯¹å¤å段ã
3. 订åç±»
package com.gitee.swsk33.dbentity.dataobject;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import java.util.List;
/**
* 订åç±»
*/
@Data
@JsonIgnoreProperties(allowSetters = true, value = {"userId"})
@TableName("order_info")
public class Order {
/**
* 订åid
*/
@TableId(type = IdType.AUTO)
private Integer id;
/**
* 订åå
*/
private String name;
/**
* å
³èç¨æ·idï¼ä¸å¯¹å¤åä½å段ï¼ä¸è¿åç»å端ï¼ä½æ¯å端ä½ä¸ºåæ°ä¼ éï¼
*/
private Integer userId;
/**
* å
³èç¨æ·ï¼éç»è£
ï¼
*/
@TableField(exist = false)
private User user;
/**
* è¿ä¸ªè®¢åä¸æå
å«çååï¼éç»è£
ï¼
*/
@TableField(exist = false)
private List<Product> products;
}
å¤å¶ä»£ç
å¯è§è¿é使ç¨äº@JsonIgnorePropertiesè¿æ»¤æäºåä½å段userIdä¸è¿åç»å端ã
(4) å个æå¡æ¨¡å
åºæ¬ä¸æ¯ä¸ªæå¡æ¨¡åä»ç¶æ¯Spring Bootçåå±æ¶æä¸çä¸å±ï¼å³daoãserviceåapiãå æ¤è¿éåªè®²å ³é®æ§çä¸è¥¿ï¼å ¶ä½ç»èå¯ä»¥å¨ææ«ç¤ºä¾ä»åºä¸ç代ç ã
æ¥ç订å模åï¼å®ä¹æ°æ®åºæä½å±OrderDAOå¦ä¸ï¼
package com.gitee.swsk33.dborder.dao;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gitee.swsk33.dbentity.dataobject.Order;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import java.util.List;
public interface OrderDAO extends BaseMapper<Order> {
/**
* æ·»å å
³èè®°å½
*
* @param orderId 订åid
* @param productId ååid
* @return å¢å è®°å½æ¡æ°
*/
@Insert("insert into `order_product` values (#{orderId}, #{productId})")
@DS("bridge")
int insertRecord(int orderId, int productId);
/**
* æ ¹æ®è®¢åidæ¥è¯¢å
¶å¯¹åºçææååidå表
*
* @param orderId 订åid
* @return ååidå表
*/
@Select("select `product_id` from `order_product` where `order_id` = #{orderId}")
@DS("bridge")
List<Integer> selectProductIds(int orderId);
/**
* å é¤åæ个订åå
³èçååidè®°å½
*
* @param orderId 订åid
* @return å é¤è®°å½æ°
*/
@Delete("delete from `order_product` where `order_id` = #{orderId}")
@DS("bridge")
int deleteProductIds(int orderId);
}
å¤å¶ä»£ç
ç±äºç»§æ¿äºMyBatis-PlusçBaseMapperï¼å æ¤åºæ¬çå¢å æ¹æ¥è¿éä¸éè¦åäºï¼æ以è¿éåªéè¦å对æ桥表æ°æ®åºä¸çæä½ï¼æ¯å¦è¯´è·åè¿ä¸ªè®¢åä¸å å«çååidå表ççï¼ä¹å¯è§è¿éåªè·åidæè æ¯ä¼ å ¥id为åæ°å¯¹æ桥表è¿è¡å¢å æ¥æä½ï¼å¹¶ä¸è¿äºæ¹æ³æ 注äº@DSåæ¢æ°æ®æºæ¥è¯¢ã
åæ¥çServiceå±ä»£ç ï¼
package com.gitee.swsk33.dborder.service.impl;
import com.gitee.swsk33.dbentity.dataobject.Order;
import com.gitee.swsk33.dbentity.dataobject.Product;
import com.gitee.swsk33.dbentity.dataobject.User;
import com.gitee.swsk33.dbentity.model.Result;
import com.gitee.swsk33.dbfeign.feignclient.ProductClient;
import com.gitee.swsk33.dbfeign.feignclient.UserClient;
import com.gitee.swsk33.dborder.dao.OrderDAO;
import com.gitee.swsk33.dborder.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class OrderServiceImpl implements OrderService {
@Autowired
private OrderDAO orderDAO;
@Autowired
private UserClient userClient;
@Autowired
private ProductClient productClient;
@Override
public Result<Void> add(Order order) {
Result<Void> result = new Result<>();
// å
ç´æ¥æå
¥
if (orderDAO.insert(order) < 1) {
result.setResultFailed("æå
¥å¤±è´¥ï¼");
return result;
}
// æå
¥åï¼æ·»å ä¸ä¹å
³èçååå¤å¯¹å¤è®°å½
for (Product each : order.getProducts()) {
orderDAO.insertRecord(order.getId(), each.getId());
}
result.setResultSuccess("æå
¥å®æï¼");
return result;
}
@Override
public Result<Void> delete(int id) {
Result<Void> result = new Result<>();
// å
ç´æ¥å é¤
if (orderDAO.deleteById(id) < 1) {
result.setResultFailed("å é¤å¤±è´¥ï¼");
return result;
}
// ç¶åå é¤å
³èé¨å
orderDAO.deleteProductIds(id);
result.setResultSuccess("å é¤æåï¼");
return result;
}
@Override
public Result<Order> getById(int id) {
Result<Order> result = new Result<>();
// å
æ¥è¯¢è®¢å
Order getOrder = orderDAO.selectById(id);
if (getOrder == null) {
result.setResultFailed("æ¥è¯¢å¤±è´¥ï¼");
return result;
}
// è¿ç¨è°ç¨ç¨æ·æ¨¡åï¼ç»è£
订åä¸çç¨æ·å¯¹è±¡å段ï¼ä¸å¯¹å¤å
³èæ¥è¯¢ï¼
User getUser = userClient.getById(getOrder.getUserId()).getData();
if (getUser == null) {
result.setResultFailed("æ¥è¯¢å¤±è´¥ï¼");
return result;
}
getOrder.setUser(getUser);
// è¿ç¨è°ç¨åå模åï¼ç»è£
订åä¸å
³èçååå表ï¼å¤å¯¹å¤å
³èæ¥è¯¢ï¼
List<Integer> productIds = orderDAO.selectProductIds(id);
getOrder.setProducts(productClient.getByBatchId(productIds).getData());
result.setResultSuccess("æ¥è¯¢æåï¼", getOrder);
return result;
}
@Override
public Result<List<Order>> getByBatchId(List<Integer> ids) {
Result<List<Order>> result = new Result<>();
// å
æ¹éæ¥è¯¢
List<Order> getOrders = orderDAO.selectBatchIds(ids);
// ç»è£
å
¶ä¸çç¨æ·å¯¹è±¡å段
for (Order each : getOrders) {
each.setUser(userClient.getById(each.getUserId()).getData());
}
// ç±äºæ¹éæ¥è¯¢ç®åä¸é¨æä¾ç»å
é¨æ¨¡åä½ä¸ºå¤å¯¹å¤å
³èæ¥è¯¢æ¶è¿ç¨è°ç¨ï¼å æ¤è¿éä¸å对æ¯ä¸ªå¯¹è±¡è¿è¡å¤å¯¹å¤æ¥è¯¢ï¼å¦åä¼é·å
¥æ»å¾ªç¯
result.setResultSuccess("æ¥è¯¢å®æï¼", getOrders);
return result;
}
}
å¤å¶ä»£ç
å¯ä»¥å ç代ç å注éï¼è¿éé¢å·²ç»å好äºå¢å æ¥è®°å½çæ¶åçæµç¨åæä½ï¼å æ¬æ¥è¯¢å¤å¯¹å¤æ桥表ä¸çid以åè¿ç¨è°ç¨ççï¼è¿ç¨è°ç¨ä»£ç è¿éä¸åèµè¿°ã
ç¶åï¼å°è¿äºæå¡æ´é²ä¸ºæ¥å£å³å¯ï¼åè¿æ¥ååæå¡æ¨¡åä¹æ¯åºæ¬ä¸æ ·çæè·¯ã
ä¸è¿°æ以ä¸éè¦æ³¨æçå°æ¹ï¼
- å°æ桥表çæä½ï¼å³å¢å ãæ¥è¯¢åå é¤è¿ä¸ªè®¢åå å«çååidçæä½ï¼å®ä¹å¨äºOrderDAOä¸ï¼åè¿æ¥å¨ååæå¡ä¸ï¼ProductDAOä¸ä¹éè¦å®ä¹å¢å ãæ¥è¯¢åå é¤åè¿ä¸ªååææå ³èç订åidçæä½ï¼å ·ä½å¯ä»¥ç项ç®æºç
- å¨æå¡ä¸ç¼åäºgetByBatchIdè¿ä¸ªæ¹æ³ä¸ç¨äºæ¨¡åè¿ç¨è°ç¨æ¥è¯¢å¤å¯¹å¤ç对象ï¼ä½æ¯å¯è§å¨è¿ä¸ªæ¹æ³ä¸æ¹éæ¥è¯¢æ¶ï¼æ²¡æ继ç»ç»è£ æ¯ä¸ªå¯¹è±¡ä¸å å«çå¤å¯¹å¤å¯¹è±¡ï¼é²æ¢æ»å¾ªç¯
对äºè¿ç¨è°ç¨ï¼éè¦æ³¨æçæ¯è¿ç¨è°ç¨å±ç代ç åè¿äºæå¡ä¸å¨ä¸ä¸ªæ¨¡åä¸ï¼å æ¤å¨æ¨¡å主类ä¸æ 注@EnableFeignClients注解å¯ç¨è¿ç¨è°ç¨åè½æ¶ï¼è¿éè¦æå®éè¦ç¨å°çè¿ç¨è°ç¨çFeignClientç±»ï¼å¦åä¼æ³¨å ¥å¤±è´¥ï¼
ææ模ååå®åï¼å¯å¨å¹¶æµè¯æ¥å£ï¼æ¥çä¸ä¸ææï¼
4ï¼æ»ç»
äºå®ä¸ï¼è§£å³åå¸å¼å¾®æå¡çè·¨åºå¢å æ¹æ¥æä½ï¼æå¾å¤çæ¹å¼ï¼è¿éåªæ¯æä¾ä¸ä¸ªæè·¯ï¼å¤§å®¶å¯ä»¥éå½é纳ï¼ä¸è½è¯´è¿éçæ¹æ¡å°±æ¯æä¼é ãæ§è½æ好çï¼è¿éè¦æ ¹æ®å®é æ åµèèã
ä½è ï¼å®ææ¶ç©º33
é¾æ¥ï¼https://juejin.cn/post/7189195971422027837