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

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()方法,从而达到统计所有页面访问量的目的。

  • 23
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值