Mybatis Mapper 配置详解:文章管理和统计

本文将详细讲解 Mybatis Mapper 配置,涵盖文章管理和统计功能,包含增删改查、自动生成主键、分页查询、统计等功能。

目录

  1. 文章管理 Mapper
  2. 统计信息 Mapper
  3. 自定义 Mapper

1. 文章管理 Mapper

import com.itheima.model.domain.Article;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface ArticleMapper {
    // 根据id查询文章信息
    @Select("SELECT * FROM t_article WHERE id=#{id}")
    public Article selectArticleWithId(Integer id);

    // 发表文章,同时使用@Options注解获取自动生成的主键id
    @Insert("INSERT INTO t_article (title,created,modified,tags,categories," +
            " allow_comment, thumbnail, content)" +
            " VALUES (#{title},#{created}, #{modified}, #{tags}, #{categories}," +
            " #{allowComment}, #{thumbnail}, #{content})")
    @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
    public Integer publishArticle(Article article);

    // 文章发分页查询
    @Select("SELECT * FROM t_article ORDER BY id DESC")
    public List<Article> selectArticleWithPage();

    // 通过id删除文章
    @Delete("DELETE FROM t_article WHERE id=#{id}")
    public void deleteArticleWithId(int id);

    // 站点服务统计,统计文章数量
    @Select("SELECT COUNT(1) FROM t_article")
    public Integer countArticle();

    // 通过id更新文章
    public Integer updateArticleWithId(Article article);
}

代码解析:

  • @Mapper 注解:标明这是一个 MyBatis 的 Mapper 接口。
  • @Select, @Insert, @Delete, @Update 注解:分别用于定义 SQL 语句的类型。
  • #{id}:表示参数占位符,对应方法参数的值。
  • @Options 注解:用于控制插入数据后,自动生成主键的设置。

说明:

  • selectArticleWithId 方法:根据文章 ID 查询文章信息。
  • publishArticle 方法:发表文章,使用 @Options 注解获取自动生成的主键 ID。
  • selectArticleWithPage 方法:分页查询文章列表。
  • deleteArticleWithId 方法:根据文章 ID 删除文章。
  • countArticle 方法:统计文章数量。
  • updateArticleWithId 方法:根据文章 ID 更新文章信息。

2. 统计信息 Mapper

import com.itheima.model.domain.Article;
import com.itheima.model.domain.Statistic;
import org.apache.ibatis.annotations.*;
import java.util.List;


@Mapper
public interface StatisticMapper {
    // 新增文章对应的统计信息
    @Insert("INSERT INTO t_statistic(article_id,hits,comments_num) values (#{id},0,0)")
    public void addStatistic(Article article);

    // 根据文章id查询点击量和评论量相关信息
    @Select("SELECT * FROM t_statistic WHERE article_id=#{articleId}")
    public Statistic selectStatisticWithArticleId(Integer articleId);

    // 通过文章id更新点击量
    @Update("UPDATE t_statistic SET hits=#{hits} " +
            "WHERE article_id=#{articleId}")
    public void updateArticleHitsWithId(Statistic statistic);

    // 通过文章id更新评论量
    @Update("UPDATE t_statistic SET comments_num=#{commentsNum} " +
            "WHERE article_id=#{articleId}")
    public void updateArticleCommentsWithId(Statistic statistic);

    // 根据文章id删除统计数据
    @Delete("DELETE FROM t_statistic WHERE article_id=#{aid}")
    public void deleteStatisticWithId(int aid);

    // 统计文章热度信息
    @Select("SELECT * FROM t_statistic WHERE hits !='0' " +
            "ORDER BY hits DESC, comments_num DESC")
    public List<Statistic> getStatistic();

    // 统计博客文章总访问量
    @Select("SELECT SUM(hits) FROM t_statistic")
    public long getTotalVisit();

    // 统计博客文章总评论量
    @Select("SELECT SUM(comments_num) FROM t_statistic")
    public long getTotalComment();
}

代码解析:

  • @Mapper 注解:标明这是一个 MyBatis 的 Mapper 接口。
  • @Select, @Insert, @Delete, @Update 注解:分别用于定义 SQL 语句的类型。
  • #{id}#{articleId}#{aid}#{hits}#{commentsNum}:表示参数占位符,对应方法参数的值。

说明:

  • addStatistic 方法:新增文章对应的统计信息。
  • selectStatisticWithArticleId 方法:根据文章 ID 查询点击量和评论量相关信息。
  • updateArticleHitsWithId 方法:通过文章 ID 更新点击量。
  • updateArticleCommentsWithId 方法:通过文章 ID 更新评论量。
  • deleteStatisticWithId 方法:根据文章 ID 删除统计数据。
  • getStatistic 方法:统计文章热度信息,按照点击量和评论量排序。
  • getTotalVisit 方法:统计博客文章总访问量。
  • getTotalComment 方法:统计博客文章总评论量。

3. 自定义 Mapper

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itheima.dao.ArticleMapper">
    <update id="updateArticleWithId" parameterType="Article">
        update t_article
        <set>
            <if test="title != null">
                title = #{title},
            </if>
            <if test="created != null">
                created = #{created},
            </if>
            <if test="modified != null">
                modified = #{modified},
            </if>
            <if test="tags != null">
                tags = #{tags},
            </if>
            <if test="categories != null">
                categories = #{categories},
            </if>
            <if test="hits != null">
                hits = #{hits},
            </if>
            <if test="commentsNum != null">
                comments_num = #{commentsNum},
            </if>
            <if test="allowComment != null">
                allow_comment = #{allowComment},
            </if>
            <if test="thumbnail != null">
                thumbnail = #{thumbnail},
            </if>
            <if test="content != null">
                content = #{content},
            </if>
        </set>
        where id = #{id}
    </update>
</mapper>

代码解析:

  • <mapper> 标签:定义一个 Mapper,namespace 属性指定 Mapper 接口的类名。
  • <update> 标签:定义一个更新操作,id 属性指定方法名,parameterType 属性指定参数类型。
  • <set> 标签:用于设置要更新的字段,可以根据条件选择性更新。
  • <if> 标签:用于判断条件是否成立,根据条件选择是否更新对应字段。

说明:

  • updateArticleWithId 方法:根据文章 ID 更新文章信息,可以使用 setif 标签选择性更新字段。

总结

本文详细讲解了 Mybatis Mapper 配置,涵盖了文章管理和统计功能的实现。通过使用注解和 XML 配置方式,我们可以轻松地定义 SQL 语句,并实现各种数据操作功能。

注意: 以上代码示例仅供参考,实际应用中可能需要根据具体需求进行修改。

希望本文能够帮助你更好地理解 Mybatis Mapper 配置,并运用到实际项目开发中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值