WordPress 基础配置
域名与托管
域名
域名是网站的名称,用户在浏览器中输入以访问网站的 URL 地址。对于 WordPress 网站,需要拥有独特的域名。可通过域名注册商(如 GoDaddy、Namecheap)注册,建议选择简洁易记且与主题相关的名称。
托管
托管是指将网站文件存储在网络服务器上。WordPress 托管服务通常提供一键安装、自动更新和备份功能。
- 共享托管:经济实惠,适合小型网站。
- 管理型托管:提供更全面的管理服务和技术支持,适合高流量或企业级网站。
添加新页面与文章
添加新页面
- 登录后台(通常为
域名/wp-admin)。
- 进入'页面' -> '新建页面'。
- 编辑标题和内容,设置页面属性(如父页面、模板)。
- 发布或保存草稿。
添加新文章
- 登录后台。
- 进入'文章' -> '写文章'。
- 填写标题和内容,设置特色图像、分类和标签。
- 设置可见性并发布。
开发环境配置
IDEA 与数据库连接
在 IDEA 中连接数据库时,若未显示表结构,需通过 Tools -> Manage Shown Schemas 选择对应的数据库模式。
插件安装
建议安装 MyBatisX 插件以辅助开发:
- File -> Settings -> Plugins。
- 搜索
MyBatisX 并安装,重启 IDEA。
Maven 配置
检查 Maven 配置文件路径(File -> Settings -> Search Maven),确保使用稳定的 Maven 版本。建议使用较新的 IDEA 版本(如 2023+)以获得更好的兼容性。
MyBatis-Plus 接口开发
以下是一套基于 Spring Boot + MyBatis-Plus 的好友关系 RESTful 接口设计示例。
1. 接口清单
| 功能 | 方法 | 路径 | 参数 |
|---|
| 添加好友 | POST | /friends | {userId, friendId} |
| 删除好友 | DELETE | /friends | {userId, friendId} |
| 查询列表 | GET | /friends/{userId} | - |
| 检查关系 | GET | /friends/check | userId, friendId |
2. Controller 层实现
@RestController
@RequestMapping("/friends")
@RequiredArgsConstructor
public class FriendController {
private final FriendService friendService;
@PostMapping
public Result<Boolean> addFriend(@RequestBody @Valid FriendRequest request) {
return Result.success(friendService.addFriend(request.getUserId(), request.getFriendId()));
}
@DeleteMapping
public Result<Boolean> deleteFriend(@RequestBody @Valid FriendRequest request) {
return Result.success(friendService.deleteFriend(request.getUserId(), request.getFriendId()));
}
@GetMapping("/{userId}")
public Result<List<FriendDTO>> getFriends(@PathVariable Integer userId) {
return Result.success(friendService.getFriends(userId));
}
@GetMapping("/check")
public Result<Boolean> isFriend(@RequestParam Integer userId, @RequestParam Integer friendId) {
return Result.success(friendService.isFriend(userId, friendId));
}
@Data
static class FriendRequest {
@NotNull
private Integer userId;
@NotNull
private Integer friendId;
}
}
3. Service 层实现
@Service
@RequiredArgsConstructor
public class FriendServiceImpl implements FriendService {
private final UserMapper userMapper;
private final FriendRelationMapper relationMapper;
@Override
@Transactional
public boolean addFriend(Integer userId, Integer friendId) {
checkUserExists(userId);
checkUserExists(friendId);
if (relationMapper.existsRelation(userId, friendId)) {
return false;
}
relationMapper.insert(new FriendRelation(userId, friendId));
relationMapper.insert(new FriendRelation(friendId, userId));
return true;
}
@Override
@Transactional
public boolean deleteFriend(Integer userId, Integer friendId) {
relationMapper.deleteRelation(userId, friendId);
relationMapper.deleteRelation(friendId, userId);
return true;
}
@Override
public List<FriendDTO> getFriends(Integer userId) {
return relationMapper.selectFriendList(userId).stream()
.map(user -> new FriendDTO(user.getId(), user.getNickname(), user.getAvatar()))
.collect(Collectors.toList());
}
@Override
public {
relationMapper.existsRelation(userId, friendId);
}
{
(userMapper.selectById(userId) == ) {
();
}
}
}
4. Mapper 层(MyBatis-Plus)
(1) 实体类
@Data
@TableName("user_friend_relation")
public class FriendRelation {
@TableId(type = IdType.AUTO)
private Long id;
private Integer userId;
private Integer friendId;
private LocalDateTime createTime;
}
(2) Mapper 接口
public interface FriendRelationMapper extends BaseMapper<FriendRelation> {
@Select("SELECT COUNT(1) FROM user_friend_relation " +
"WHERE user_id = #{userId} AND friend_id = #{friendId}")
boolean existsRelation(@Param("userId") Integer userId, @Param("friendId") Integer friendId);
@Delete("DELETE FROM user_friend_relation " +
"WHERE user_id = #{userId} AND friend_id = #{friendId}")
int deleteRelation(@Param("userId") Integer userId, @Param("friendId") Integer friendId);
@Select("SELECT u.* FROM user u " +
"JOIN user_friend_relation r ON u.id = r.friend_id " +
"WHERE r.user_id = #{userId}")
List<User> selectFriendList(Integer userId);
}
5. 统一返回结构
@Data
public class Result<T> {
private int code;
private String msg;
private T data;
public static <T> Result<T> success(T data) {
Result<T> result = new Result<>();
result.setCode(200);
result.setMsg("success");
result.setData(data);
return result;
}
}
数据库优化
Email 字段索引
为 email 字段建立索引是数据库优化的重要实践:
- 提高查询性能:将查找复杂度从 O(n) 降至 O(log n)。
- 保证唯一性:通过唯一索引避免重复注册。
- 支持高级查询:优化前缀查询或模糊查询。
注意事项:
- 权衡写入性能,索引会略微降低增删改速度。
- 选择合适的索引类型(普通索引 vs 唯一索引)。
- 考虑长度限制,例如 MySQL 支持前缀索引。
示例:
CREATE UNIQUE INDEX idx_email ON users(email);
前端依赖问题排查
OpenAPI 报错解决
在使用 openapi 生成代码时,若遇到 Cannot find module 'tslib' 错误,可按以下步骤处理:
- 手动安装 tslib:
npm install tslib --save
yarn add tslib
- 验证依赖结构:检查
node_modules/tslib 是否存在。
- 验证 package.json:确保包含
tslib 依赖项。
- 重新运行命令:执行
npm run openapi。
总结
本文涵盖了 WordPress 基础部署流程、Spring Boot 结合 MyBatis-Plus 的 CRUD 接口实现、数据库索引优化策略以及前端 Node.js 依赖缺失问题的解决方案。在实际开发中,应注重代码规范、事务控制及性能优化。