ä¸ãMybatis-Plusä»ç»
Mybatis-plusæ¯Mybatisçå¢å¼ºå·¥å ·å ï¼å ¶å®ç½çä»ç»å¦ä¸ï¼
- 润ç©ç»æ 声ï¼åªåå¢å¼ºä¸åæ¹åï¼å¼å ¥å®ä¸ä¼å¯¹ç°æå·¥ç¨äº§çå½±åï¼å¦ä¸è¬é¡ºæ»ã
- æçè³ä¸ï¼åªéç®åé ç½®ï¼å³å¯å¿«éè¿è¡å表CRUDæä½ï¼ä»èèç大éæ¶é´ã
- 丰å¯åè½ï¼ä»£ç çæãèªå¨å页ãé»è¾å é¤ãèªå¨å¡«å çåè½ä¸åºä¿±å ¨ã
å ¶ä¼ç¹å¦ä¸ï¼
- æ ä¾µå ¥ï¼Mybatis-Plus å¨ Mybatis çåºç¡ä¸è¿è¡æ©å±ï¼åªåå¢å¼ºä¸åæ¹åï¼å¼å ¥ Mybatis-Plus ä¸ä¼å¯¹æ¨ç°æç Mybatis ææ¶äº§çä»»ä½å½±åï¼èä¸ MP æ¯æææ Mybatis åççç¹æ§
- ä¾èµå°ï¼ä» ä» ä¾èµ Mybatis 以å Mybatis-Spring
- æèå°ï¼å¯å¨å³ä¼èªå¨æ³¨å ¥åºæ¬CURDï¼æ§è½åºæ¬æ æèï¼ç´æ¥é¢å对象æä½
- éç¨CRUDæä½ï¼å ç½®éç¨ Mapperãéç¨ Serviceï¼ä» ä» éè¿å°éé ç½®å³å¯å®ç°å表大é¨å CRUD æä½ï¼æ´æ强大çæ¡ä»¶æé å¨ï¼æ»¡è¶³å类使ç¨éæ±
- å¤ç§ä¸»é®çç¥ï¼æ¯æå¤è¾¾4ç§ä¸»é®çç¥ï¼å å«åå¸å¼å¯ä¸IDçæå¨ï¼ï¼å¯èªç±é ç½®ï¼å®ç¾è§£å³ä¸»é®é®é¢
- æ¯æActiveRecordï¼æ¯æ ActiveRecord å½¢å¼è°ç¨ï¼å®ä½ç±»åªéç»§æ¿ Model ç±»å³å¯å®ç°åºæ¬ CRUD æä½
- æ¯æ代ç çæï¼éç¨ä»£ç æè Maven æ件å¯å¿«éçæ Mapper ã Model ã Service ã Controller å±ä»£ç ï¼æ¯æ模æ¿å¼æï¼æ´æè¶ å¤èªå®ä¹é ç½®çæ¨æ¥ä½¿ç¨ï¼P.S. æ¯ Mybatis å®æ¹ç Generator æ´å 强大ï¼ï¼
- æ¯æèªå®ä¹å ¨å±éç¨æä½ï¼æ¯æå ¨å±éç¨æ¹æ³æ³¨å ¥( Write once, use anywhere )
- å ç½®å页æ件ï¼åºäºMybatisç©çå页ï¼å¼åè æ éå ³å¿å ·ä½æä½ï¼é 置好æ件ä¹åï¼åå页çåäºååºæ¬Listæ¥è¯¢
- å ç½®æ§è½åææ件ï¼å¯è¾åºSqlè¯å¥ä»¥åå ¶æ§è¡æ¶é´ï¼å»ºè®®å¼åæµè¯æ¶å¯ç¨è¯¥åè½ï¼è½ææ解å³æ ¢æ¥è¯¢
- å ç½®å ¨å±æ¦æªæ件ï¼æä¾å ¨è¡¨ delete ã update æä½æºè½åæé»æï¼é¢é²è¯¯æä½
äºãSpring boot æ´åMybatis-plus
2.1 pomä¸å¼å ¥Mybatis-plusä¾èµ
<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3.1</version>
</dependency>
注ï¼å¦ææ¯gradleï¼å¼å ¥çæ¹å¼å¦ä¸ï¼
implementation group: 'com.baomidou', name: 'mybatis-plus-boot-starter', version: '3.5.3.1'
2.2 å建ä¸å¼ User表
å建对åºçæ°æ®è¡¨ Schema ç表ç»æå表æ°æ®ï¼
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `user_base_info`
-- ----------------------------
DROP TABLE IF EXISTS `user_base_info`;
CREATE TABLE `user_base_info` (
`id` int NOT NULL AUTO_INCREMENT COMMENT '主é®ID',
`u_id` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT 'ç¨æ·ID',
`name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT 'ç¨æ·å',
`cn_name` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT 'ä¸æå',
`sex` char(3) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT 'æ§å«',
`alias` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT 'å«å',
`web_chat` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '微信å·',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
表ä¸æå ¥æ°æ®
-- ----------------------------
-- Records of user_base_info
-- ----------------------------
INSERT INTO `user_base_info` VALUES ('1', '001', 'holmium', 'é¬', '1', 'èå¸å±±æ', 'holmium');
INSERT INTO `user_base_info` VALUES ('2', '001', 'test', 'æµè¯', '0', 'ç¾å¥³', 'èå¸å±±æ');
2.3 Mybatis-plusé ç½®
#mybatis-plus
mybatis-plus:
## è¿ä¸ªå¯ä»¥ä¸ç¨é
ç½®ï¼å å
¶é»è®¤å°±æ¯è¿ä¸ªè·¯å¾
mapper-locations: classpath:/mapper/*Mapper.xml
#å®ä½æ«æï¼å¤ä¸ªpackageç¨éå·æè
åå·åé
typeAliasesPackage: com.holmium.springboot.repository.*.entity
global-config:
# æ°æ®åºç¸å
³é
ç½®
db-config:
#主é®ç±»å AUTO:"æ°æ®åºIDèªå¢", INPUT:"ç¨æ·è¾å
¥ID",ID_WORKER:"å
¨å±å¯ä¸ID (æ°åç±»åå¯ä¸ID)", UUID:"å
¨å±å¯ä¸ID UUID";
id-type: AUTO
#å段çç¥ IGNORED:"忽ç¥å¤æ",NOT_NULL:"é NULL å¤æ"),NOT_EMPTY:"é空å¤æ"
field-strategy: not_empty
#驼峰ä¸å线转æ¢
column-underline: true
#æ°æ®åºå¤§åä¸å线转æ¢
#capital-mode: true
#é»è¾å é¤é
ç½®
logic-delete-value: 0
logic-not-delete-value: 1
db-type: h2
#å·æ°mapper è°è¯ç¥å¨
refresh: true
# åçé
ç½®
configuration:
map-underscore-to-camel-case: true
cache-enabled: false
2.4 å建ä¸ä¸ªå®ä½
//BasePo,åç»å¯ä»¥ç»§ç»æ©å±
@Data
public class BasePo {
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
}
package com.holmium.springboot.infra.user.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Getter;
import lombok.Setter;
/**
* @author holmium
* @description:
* @date 2023å¹´04æ20æ¥16:19
*/
@TableName(value = "user_base_info", autoResultMap = true)
@Getter
@Setter
public class UserPo extends BasePo {
/**
* ç¨æ·ID
*/
@TableField(value = "u_id")
String uId;
/**
* ç¨æ·å
*/
@TableField(value = "name")
String name;
/**
* ä¸æå称
*/
@TableField(value = "cn_name")
String cnName;
/**
* æ§å«ï¼1-ç· 0-女
*/
@TableField(value = "sex")
String sex;
/**
* å«å
*/
@TableField(value = "alias")
String alias;
/**
* 微信å·
*/
@TableField(value = "web_chat")
String webChat;
}
2.5 å建ä¸ä¸ªMapperæ¥å£
package com.holmium.springboot.infra.user.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.holmium.springboot.infra.user.entity.UserPo;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserMapper extends BaseMapper<UserPo> {
}
2.6 ä¿®æ¹æå¡æ¥å£
//å¦æä¸ç解ï¼å¯ä»¥çä¹åçæç«
@RestController
@RequestMapping("/user/center")
public class UserApi {
@Resource
UserAppImpl userApp;
@GetMapping(value = "/userinfo")
public UserVo gerUserInfo(@RequestParam("id") String id) throws Exception {
return userApp.getUserInfoByUserId(id);
}
}
2.7 å¨å¯å¨ç±»ä¸æ·»å @MapperScan 注解ï¼æ«æ Mapper æ件夹
@SpringBootApplication
@MapperScan("com.holmium.springboot.infra.*.mapper") //æ·»å mapperæ«æ
public class HolmiumApplication {
public static void main(String[] args) {
SpringApplication.run(HolmiumApplication.class, args);
}
}
2.8 æµè¯
å¦å¾1
2.9 å°ç»
éè¿ä»¥ä¸çæ¥éª¤ï¼æ们å®ç°äºå¯¹User表çæ¥è¯¢åè½ï¼å¯ä»¥çå°å¯¹äºç®åçCRUDæä½ï¼Mybatis-Plusåªéè¦å®ä¹ä¸ä¸ªMapperæ¥å£å³å¯å®ç°ï¼çæ£åå°å¦ä»æ说çé£æ ·ï¼ç®åé ç½®ãæçè³ä¸ã
ä¸ãMybatis-plus é¨åå段注解åæ¥è¯¢
3.1 主é®
3.1.1 主é®çæçç¥
主é®çæçç¥ä¸å ±æä¾çäºç§ï¼
AUTO(0),éå¢çç¥ï¼å¦æ使ç¨è¯¥çç¥å¿ é¡»è¦æ±æ°æ®è¡¨çåä¹æ¯éå¢ã NONE(1),没æçç¥ï¼å¿ 须人为çè¾å ¥idå¼ INPUT(2),没æçç¥ï¼å¿ 须人为çè¾å ¥idå¼ ASSIGN_ID(3), éæºçæä¸ä¸ªLongç±»åçå¼ã该å¼ä¸å®æ¯å¯ä¸ãèä¸æ¯æ¬¡çæé½ä¸ä¼ç¸åãç®æ³ï¼éªè±ç®æ³ã éååå¸å¼ä¸»é®ã ASSIGN_UUID(4); éæºäº§çä¸ä¸ªStringç±»åçå¼ã该å¼ä¹æ¯å¯ä¸çã
3.1.2 使ç¨æ¹å¼
éè¿é ç½®æ件ä¸ï¼é ç½®id-typeå±æ§ï¼
mybatis-plus:
global-config:
# æ°æ®åºç¸å
³é
ç½®
db-config:
#主é®ç±»å AUTO:"æ°æ®åºIDèªå¢", INPUT:"ç¨æ·è¾å
¥ID",ID_WORKER:"å
¨å±å¯ä¸ID (æ°åç±»åå¯ä¸ID)", UUID:"å
¨å±å¯ä¸ID UUID";
id-type: AUTO
ä¹å¯å¨å¯¹è±¡å±æ§ä¸è¿è¡æ³¨è§£è®¾ç½®:
@Data
public class BasePo {
//é
置为æ°æ®åºIDèªå¢
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
}
3.2 å é¤
å®é å¼åè¿ç¨ä¸ï¼å¯¹æ°æ®é½ä¸ä¼ç´æ¥å é¤ï¼é½ä¼éç¨é»è¾å é¤çæ¹å¼ãæè°çé»è¾å é¤ï¼åªæ¯å°æ°æ®ç½®ä¸ºä¸ä¸ªç¶æï¼è¿ä¸ªç¶æ代表æ°æ®ä¸ºå é¤ç¶æï¼ä¸è¬èªå·±ç¨åºä¸åçè¯ï¼å°±è®¾ç½®ä¸ä¸ªç¶æå段ï¼ç»å段èµå¼ä¸º0 æ D代表å é¤ãèMybatis-plusæä¾äº@TableLogic注解ï¼å®ç°é»è¾å é¤ã åªå¯¹èªå¨æ³¨å ¥ç sql èµ·æ:
- æå ¥: ä¸ä½éå¶
- æ¥æ¾: 追å where æ¡ä»¶è¿æ»¤æå·²å é¤æ°æ®,ä¸ä½¿ç¨ wrapper.entity çæç where æ¡ä»¶ä¼å¿½ç¥è¯¥å段
- æ´æ°: 追å where æ¡ä»¶é²æ¢æ´æ°å°å·²å é¤æ°æ®,ä¸ä½¿ç¨ wrapper.entity çæç where æ¡ä»¶ä¼å¿½ç¥è¯¥å段
- å é¤: 转å为 æ´æ°
@Data
public class BasePo {
/**
* 主é®
*/
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
* æ¯å¦å é¤:0表示æªå é¤ 1表示å é¤.
*/
@TableLogic
private Boolean deleted;
}
3.3 èªå¨å¡«å
å®é å¼åä¸ï¼æ们ä¼å¨è¡¨ä¸è®°å½æ°æ®å建æ¶é´ãå建人ãä¿®æ¹æ¶é´ãä¿®æ¹äººå 个å段ï¼ä½æ¯å 个å段å¦ææ们æ¯æ¬¡é½è¦è¿è¡èµå¼ï¼ä»£ç æ¯è¾åä½ï¼Mybatis-plusæä¾çèªå¨å¡«å åè½ã
3.3.1 å¢å å ¬å ±å±æ§å¯¹è±¡ï¼
@Data
public class BasePo {
/**
* 主é®
*/
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
* å建æ¶é´
*/
@TableField(fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/**
* æåæ´æ°æ¶é´
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
/**
* å建è
ï¼é»è®¤ç³»ç»User ç id ç¼å·
* <p>
* ä½¿ç¨ String ç±»åçåå æ¯ï¼æªæ¥å¯è½ä¼åå¨éæ°å¼çæ
åµï¼ç好æå±æ§ã
*/
@TableField(fill = FieldFill.INSERT, jdbcType = JdbcType.VARCHAR)
private String creator;
/**
* æ´æ°è
ï¼é»è®¤ç³»ç»User ç id ç¼å·
* <p>
* ä½¿ç¨ String ç±»åçåå æ¯ï¼æªæ¥å¯è½ä¼åå¨éæ°å¼çæ
åµï¼ç好æå±æ§ã
*/
@TableField(fill = FieldFill.INSERT_UPDATE, jdbcType = JdbcType.VARCHAR)
private String updater;
/**
* æ¯å¦å é¤
*/
@TableLogic
private Boolean deleted;
}
3.3.2 èªå®ä¹å®ç°ç±» MyMetaObjectHandler
public class DefaultDbFieldHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
if (Objects.nonNull(metaObject) && metaObject.getOriginalObject() instanceof BaseEntity) {
BaseEntity baseDO = (BaseEntity) metaObject.getOriginalObject();
Date current = new Date();
// å建æ¶é´ä¸ºç©ºï¼å以å½åæ¶é´ä¸ºæå
¥æ¶é´
if (Objects.isNull(baseDO.getCreateTime())) {
baseDO.setCreateTime(current);
}
// æ´æ°æ¶é´ä¸ºç©ºï¼å以å½åæ¶é´ä¸ºæ´æ°æ¶é´
if (Objects.isNull(baseDO.getUpdateTime())) {
baseDO.setUpdateTime(current);
}
Long userId = WebUtils.getLoginUserId();
// å½åç»å½ç¨æ·ä¸ä¸ºç©ºï¼å建人为空ï¼åå½åç»å½ç¨æ·ä¸ºå建人
if (Objects.nonNull(userId) && Objects.isNull(baseDO.getCreator())) {
baseDO.setCreator(userId.toString());
}
// å½åç»å½ç¨æ·ä¸ä¸ºç©ºï¼æ´æ°äººä¸ºç©ºï¼åå½åç»å½ç¨æ·ä¸ºæ´æ°äºº
if (Objects.nonNull(userId) && Objects.isNull(baseDO.getUpdater())) {
baseDO.setUpdater(userId.toString());
}
}
}
@Override
public void updateFill(MetaObject metaObject) {
// æ´æ°æ¶é´ä¸ºç©ºï¼å以å½åæ¶é´ä¸ºæ´æ°æ¶é´
Object modifyTime = getFieldValByName("updateTime", metaObject);
if (Objects.isNull(modifyTime)) {
setFieldValByName("updateTime", new Date(), metaObject);
}
// å½åç»å½ç¨æ·ä¸ä¸ºç©ºï¼æ´æ°äººä¸ºç©ºï¼åå½åç»å½ç¨æ·ä¸ºæ´æ°äºº
Object modifier = getFieldValByName("updater", metaObject);
Long userId = WebUtils.getLoginUserId();
if (Objects.nonNull(userId) && Objects.isNull(modifier)) {
setFieldValByName("updater", userId.toString(), metaObject);
}
}
}
3.4 æ¡ä»¶æ¥è¯¢
3.4.1 æ ¹æ®åç§æ¡ä»¶æ¥è¯¢
Wrapper:å°è£ äºå ³äºæ¥è¯¢çåç§æ¡ä»¶æ¹æ³ã
æä¸ä¸ªåç±»æ常ç¨: LambdaQueryWrapperæ¥è¯¢æ¡ä»¶ LambdaUpdateWrapperä¿®æ¹æ¡ä»¶ LambdaQueryWrapperæ¥è¯¢ä½¿ç¨lambda表达å¼æ¡ä»¶
-
LambdaQueryWrapper selectPage(userDo, new LambdaQueryWrapperX<UserPo>()
.likeIfPresent(UserPo::getName, userDo.getName())
.likeIfPresent(UserPo::getSex, userDo.getSex())
.betweenIfPresent(UserPo::getCreateTime, userDo.getCreateTime())
.orderByDesc(UserPo::getId))
- LambdaUpdateWrapper
update(update, new LambdaUpdateWrapper<UserPo>()
.eq(UserPo::getId, id).eq(UserPo::getName, name))
-
LambdaQueryWrapper new LambdaQueryWrapper<UserDo>()
.eq(UserPo::getId, id)
.eq(UserPo::getName, name);
3.5 å页æ¥è¯¢
- æ·»å å页æ¦æªå¨
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
// å页æ件
mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return mybatisPlusInterceptor;
}
- å页æ¥è¯¢
Page<UserPo> page = userMapper.selectPage(page, wrapper);//ææ¥è¯¢çç»æèªå¨å°è£
å°Page对象ä¸
3.5 å°ç»
å°æ¤ç®åçæ¥è¯¢åºæ¬å·²ä»ç»å®æ¯ï¼å¯æ»¡è¶³ä»80%çæ¥å¸¸å¼åéæ±ã
åãå¼å ¥å¯¹è±¡è½¬æ¢ç»ä»¶mapstruct
ä»ä¸è¿°ä»£ç ä¸å¯ä»¥çå°ï¼æ们ä»æ°æ®åºæ¥è¯¢åºæ¥çç»ææ¯è½¬æ¢ä¸ºä¸ä¸ªæ³XXXPoç对象ï¼èæ¥å£è¿åçæ¯XXXVo对象ãå¨å®é 项ç®ä¸ï¼ä¸è¬ä¸ä¸ªprojecté½ä¼åå¾å¤å±ï¼æ¯å±é½ä¼å®ä¹èªå·±ç对象ï¼å¦ï¼POãVOãDAOãBOãDTOãPOJOççã
- DO(Data Object):æ¤å¯¹è±¡ä¸æ°æ®åºè¡¨ç»æä¸ä¸å¯¹åºï¼éè¿ DAO å±åä¸ä¼ è¾æ°æ®æºå¯¹è±¡ã
- DTO(Data Transfer Object):æ°æ®ä¼ è¾å¯¹è±¡ï¼Service æ Manager åå¤ä¼ è¾ç对象ã
- BO(Business Object):ä¸å¡å¯¹è±¡ï¼ç± Service å±è¾åºçå°è£ ä¸å¡é»è¾ç对象ã
- AO(ApplicationObject):åºç¨å¯¹è±¡ï¼å¨Webå±ä¸Serviceå±ä¹é´æ½è±¡çå¤ç¨å¯¹è±¡æ¨¡åï¼ æ为贴è¿å±ç¤ºå±ï¼å¤ç¨åº¦ä¸é«ã
- VO(View Object):æ¾ç¤ºå±å¯¹è±¡ï¼éå¸¸æ¯ Web å模æ¿æ¸²æå¼æå±ä¼ è¾ç对象ã
- POJOæ¯DO/DTO/BO/VOçç»ç§°ï¼ç¦æ¢å½åæxxxPOJOã
è¿äºå¯¹è±¡å¨ä¼ éè¿ç¨ä¸ï¼éè¦ç¸äºè½¬æ¢ï¼å¦ææ工书åï¼å¾å¾ä¼éè¿getxxxï¼åsetxxxï¼æä½èµ·æ¥é常ç¹çï¼é£æ没æä¸ç§æ¹å¼æ¯è¾ç®åå®ç°è½ï¼ä¸é¢æ们ä»ç»ä¸ä¸ªå¯¹è±¡è½¬æ¢çç»ä»¶mapstructã
4.1 pomä¸å¼å ¥ä¾èµå
<!-- https://mvnrepository.com/artifact/org.mapstruct/mapstruct -->
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.5.4.Final</version>
</dependency>
4.2 å建ä¸ä¸ªConvertæ¥å£
package com.holmium.springboot.app.user.convert;
import com.holmium.springboot.api.user.vo.UserVo;
import com.holmium.springboot.common.user.app.dto.UserDto;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
/**
* @author holmium
* @date 2023å¹´04æ16æ¥ 20:24
*/
@Mapper
public interface UserAppConvert {
UserAppConvert INSTANCES = Mappers.getMapper(UserAppConvert.class);
UserVo voToDto(UserDto userDto);
}
é¿å
è¿éç@Mapper注解åä¸è¿°Mybatis-plusä¸ç@Mapper注解ç¸åï¼å¾å®¹æå¼å ¥é误ï¼å¯¼è´ä¼æ¥éã
è¿éçMapperæ¯import org.mapstruct.Mapper;
mybatis-plusä¸ç@Mapper, import org.apache.ibatis.annotations.Mapper;
ä¸å®è¦æ³¨æçæ¸ æ¥å¼å ¥çç±»
4.3 å¨ç±»ä¸å¼ç¨
@Service
public class UserAppImpl implements UserApp {
@Resource
public UserDomain userDomain;
@Override
public UserVo getUserInfoByUserId(String userId) throws Exception {
//è¿æ ·å°±å®ç°äºå¯¹è±¡è½¬æ¢
return UserAppConvert.INSTANCES.voToDto(userDomain.getUserInfoByUid(userId));
}
}
4.4 对象å±æ§ä¸åæä¹è½¬æ¢
ä¸è¿°æ¯ä¸¤ä¸ªå¯¹è±¡ä¸å±æ§ç¸åè¯ï¼å¯ä»¥ä¸ç¨åå ¶ä»ä»»ä½æä½ï¼å°±å¯ä»¥äºé¡¹å¯¹è±¡äºè½¬ï¼ä½å®é å¨å¼åä¸ï¼ä¸¤ä¸ªå¯¹è±¡å±æ§ä¸å¯è½å®å ¨ä¸æ ·ãèä¸è¿°æä½åªè½å°ç¸åå±æ§å转æ¢ï¼ä¸åçå±æ§æ²¡æ³äºç¸è½¬æ¢ï¼å¯¼è´å¯¹è±¡æé¨åæ°æ®ä¸¢å¤±ï¼é£æä¹è§£å³ï¼å¯å¨è½¬æ¢æ¹æ³ä¸å å ¥@Mappings注解ï¼å¦ä¸ï¼
@Mapper
public interface UserAppConvert {
UserAppConvert INSTANCES = Mappers.getMapper(UserAppConvert.class);
@Mappings({
//å±æ§ä¸ä¸è´è½¬æ¢
@Mapping(source = "name", target = "userName"),
//ç±»åä¸ä¸è´è½¬æ¢
@Mapping(target = "createTime", expression = "java(com.java.mmzsblog.util.DateTransform.strToDate(source.getCreateTime()))"),
})
UserVo voToDto(UserDto userDto);
}
è¿æ ·å°±è§£å³äºä¸å对象å±æ§åå±æ§ç±»åä¸ä¸è´è½¬æ¢é®é¢ã
äºãåå¨æå
æªæ¢æ¬ç¯æç« ï¼æ们已ç»å°å¦ä½å建ä¸ä¸ªSpring boot å·¥ç¨ï¼å¦ä½å¼åä¸ä¸ªæå¡ï¼ä»¥åä»æ°æ®åºæ»è·åæ°æ®åºæ¬å·²å®æãæ ¹æ®è¿ä¸ç³»åæç« ï¼å¤§å®¶åæ¥å¸¸çå¼åèç³»åºæ¬å¤ã
åç»ç« èå°ædruidåmybatis-plusçæ´å转æ¢æstarterçæ¹å¼ï¼å¯¹å ¶åä¸å®çå°è£ ã
åæ¶æ们ä¼å°ç³»ç»çåºç¨æ¶æ转æ¢æDDD模å¼æ¶æï¼åç»æå°ç¨å¤ä¸ªç¯å¹ ä»ç»DDDæ¶æã请æç»å ³æ³¨è·è¸ªã