首页 > 其他分享 >(分层解耦)实现统计网站访问量

(分层解耦)实现统计网站访问量

时间:2024-06-05 10:02:06浏览次数:23  
标签:count 网站 分层 访问量 date LocalDate public recordVisit

1. 数据库设计

首先,设计一个简单的表来存储访问数据:

CREATE TABLE visit_count (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    date DATE UNIQUE,
    count BIGINT DEFAULT 0
);

在这个表中,date字段表示日期,count字段表示当天的访问量。

2. Mapper层

创建一个Mapper接口以及其XML配置,用于实现访问数据库的操作:

VisitCountMapper.java:

public interface VisitCountMapper {
    // 获取指定日期的访问量
    Long getVisitCountByDate(LocalDate date);

    // 为指定日期的访问量增加一
    void increaseVisitCount(LocalDate date);

    // 如果指定日期的记录不存在,则插入一条新记录
    void insertVisitCount(LocalDate date);
}

VisitCountMapper.xml:

<mapper namespace="your.package.VisitCountMapper">
    <select id="getVisitCountByDate" resultType="Long">
        SELECT count FROM visit_count WHERE date = #{date}
    </select>

    <update id="increaseVisitCount">
        UPDATE visit_count SET count = count + 1 WHERE date = #{date}
    </update>

    <insert id="insertVisitCount">
        INSERT INTO visit_count (date, count) VALUES (#{date}, 0)
    </insert>
</mapper>

3. Service层

接下来,编写Service层的代码来处理业务逻辑:

VisitCountService.java:

public interface VisitCountService {
    void recordVisit();
}

@Service
public class VisitCountServiceImpl implements VisitCountService {
    @Autowired
    private VisitCountMapper visitCountMapper;

    @Override
    public Long recordVisit() {
        LocalDate today = LocalDate.now();
        Long visits = visitCountMapper.getVisitCountByDate(today);
        
        if (visits == null) {
            // 当天记录不存在,插入新记录
            visitCountMapper.insertVisitCount(today);
        }

        // 为当天的访问量加一
        visitCountMapper.increaseVisitCount(today);
        return visits;
    }
}

4. Controller层

在Controller层,可以处理HTTP请求并调用recordVisit方法:

VisitCountController.java:

@RestController
public class VisitCountController {

    @Autowired
    private VisitCountService visitCountService;

    // 此处将访问首页的次数作为访问量
    @GetMapping("/home")
    public Result countVisit() {
        Long res = visitCountService.recordVisit();
        return new Result(1,"访问量+1",res);//res即为当日首页的访问量
    }
}

每当/home接口被调用时,访问量就会被记录下来。

不过,实际应用中,访问量更多被用于每篇文章或帖子的访问量,针对每个页面都写一个代码未免有些繁琐,大家可以在Service层或用Spring的@ControllerAdvice结合HandlerInterceptor在Controller层中的每个请求处理中统一调用recordVisit()方法,从而达到统计所有页面访问量的目的。

标签:count,网站,分层,访问量,date,LocalDate,public,recordVisit
From: https://blog.csdn.net/millerperez/article/details/139459267

相关文章