黑马头条坑 day01

一、导入项目

1、maven配置
黑马头条坑 day01_第1张图片

2、修改字符集
黑马头条坑 day01_第2张图片

3、pom.xml 文件报错
黑马头条坑 day01_第3张图片

在这里插入图片描述

二、第14节细节

  1. @ConfigurationProperties(prefix = “mysql.core”) //取配置文件中属性的前缀 报红:
    可能是因为连接池和事务两个都加了这个注解
    黑马头条坑 day01_第4张图片
    黑马头条坑 day01_第5张图片

  2. PathMatchingResourcePatternResolver是一个Ant模式通配符的Resource查找器,可以用来查找类路径下或者文件系统中的资源。
    用来查找xml文件路径

  3. //开启自动驼峰标识转换
    org.apache.ibatis.session.Configuration mybatisConf = new org.apache.ibatis.session.Configuration();
    mybatisConf.setMapUnderscoreToCamelCase(true);
    sqlSessionFactory.setConfiguration(mybatisConf);

三、第18小节

artcle 服务的端口号 名称 都在common 工程的resources–config文件加下配置好了

黑马头条坑 day01_第6张图片

四、21小节

1、编写mapper 接口
2、编写mappe.xml

重点:
1、mapper 接口使用注解传递封装给xml的数据
黑马头条坑 day01_第7张图片
xml:接收参数
黑马头条坑 day01_第8张图片
2、xml封装返回结果集
黑马头条坑 day01_第9张图片
3、xml封装查询字段
黑马头条坑 day01_第10张图片
黑马头条坑 day01_第11张图片

五、22小节

1、mapper接口 封装list参数类型 到xml
黑马头条坑 day01_第12张图片
2、xml 用foreach 遍历lsit集合类型参数
黑马头条坑 day01_第13张图片

六、23-29 隐藏功能开发

一、用户行为保存:什么意思?
1、用户不登陆,就记录当前设备(手机)的id,和该手机(用户)的浏览记录(文章的点赞啊等)行为。下次进入时就根据行为推荐
2、用户登录了,就优先使用用户行为记录

具体步骤:

  1. 获取用id 和 前端传来的设备id
  2. 根据 当前用户id或者设备id 查询行为实体类 ap_behavior_entry
  3. 获取前台传过来的文章id 并封装
  4. 根据文章id和实体id(用户id/设备id)查询 行为表(ApShowBehavior) 行为表记录了 用户和文章id的联系/设备id和文章id的联系
  5. 数据过滤,删除表中已经存在文章id (老数据)
  6. 保存新的行为数据

核心代码:

package com.xiaoxu.behavior.service.impl;

import com.xiaoxu.behavior.service.AppShowBehaviorService;
import com.xiaoxu.model.article.pojos.ApArticle;
import com.xiaoxu.model.behavior.pojos.ApBehaviorEntry;
import com.xiaoxu.model.behavior.pojos.ApShowBehavior;
import com.xiaoxu.model.behavior.vo.ShowBehaviorVo;
import com.xiaoxu.model.common.enums.AppHttpCodeEnum;
import com.xiaoxu.model.common.vo.ResponseResult;
import com.xiaoxu.model.mappers.app.AppBehaviorEntryMapper;
import com.xiaoxu.model.mappers.app.AppShowBehaviorMapper;
import com.xiaoxu.model.user.pojos.ApUser;
import com.xiaoxu.utils.threadlocal.AppThreadLocalUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Arrays;
import java.util.List;

@Service
public class AppShowBehaviorServiceImpl implements AppShowBehaviorService {

    @Autowired
    private AppBehaviorEntryMapper appBehaviorEntryMapper;
    @Autowired
    private AppShowBehaviorMapper appShowBehaviorMapper;
    @Override
    public ResponseResult saveShowBehavior(ShowBehaviorVo vo) {
        //1、获取用id 和 前端传来的设备id
        ApUser user = AppThreadLocalUtils.getUser();//获取当前用户(已登录)
        Integer equipmentId = vo.getEquipmentId();//获取设备id
        //2、根据 当前用户id或者设备id 查询行为实体类  ap_behavior_entry
        if (user==null && equipmentId==null){
            return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_REQUIRE);
        }

        ApBehaviorEntry behaviorEntry = appBehaviorEntryMapper.findEquipmentByequipmentIdAndType0(equipmentId);
        //报空指针异常就说明设备第一次来 则先将设备添加到数据库
        if (behaviorEntry == null){//初始化第一次
         int i =   appBehaviorEntryMapper.saveBehaviorEntryByequipmentId(equipmentId);
        }

        //查询ap_behavior_entry实体 用来判断是用户还是设备
        System.out.println("equipmentId:   " + equipmentId);
        Integer userId = null; //防止参数类型不匹配 查询报错
        if (user != null){
            userId = Math.toIntExact(user.getId());
        }
        System.out.println("userId:   " + userId);
        ApBehaviorEntry apBehaviorEntry = appBehaviorEntryMapper.findbehaviorEntryByUseridOrequipmentId(userId,equipmentId);
            if (apBehaviorEntry == null){ //防止传入空值 报空指针异常
                return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID);
            }

        //3、获取前台传过来的文章id  并封装
        List<ApArticle> articleIds = vo.getArticleIds();
        //实际上是新id
        Integer[] newArtIds = new Integer[articleIds.size()];
        for (int i=0;i<articleIds.size();i++){
            newArtIds[i] = articleIds.get(i).getId();
        }
        //4、根据文章id和实体id(用户id/设备id)查询 行为表(ApShowBehavior) 行为表记录了 用户和文章id的联系/设备id和文章id的联系
        // 跟文章id匹配的实际上是老数据
       List<ApShowBehavior> apShowBehaviorList  = appShowBehaviorMapper.findShowBehaviorByEquipmentidAndarticleid(newArtIds,apBehaviorEntry.getEntryId());
       //5、数据过滤,删除表中已经存在文章id (老数据)
            //newArtIds转换成集合 因为数组没有add() remove()的方法
        List<Integer> newArtIdsList = Arrays.asList(newArtIds);
        for (ApShowBehavior item:apShowBehaviorList) {
            newArtIdsList.remove(item.getArticleId());//删除原来的数据
        }
       //6、保存新的行为数据
       //将用户最新文章id 添加到数据库
        if (!newArtIdsList.isEmpty()){
            //将集合转成数组
            Integer[] temp = (Integer[]) newArtIdsList.toArray();
            //插入新数据
            appShowBehaviorMapper.saveBehavior(apBehaviorEntry.getEntryId(),temp);
        }

        return ResponseResult.okResult(0);
    }
}

`

你可能感兴趣的:(spring,boot,学习,spring,cloud,微服务,spring)