本文将详细讲解 Mybatis Mapper 配置,涵盖文章管理和统计功能,包含增删改查、自动生成主键、分页查询、统计等功能。
目录
- 文章管理 Mapper
- 统计信息 Mapper
- 自定义 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 更新文章信息,可以使用set
和if
标签选择性更新字段。
总结
本文详细讲解了 Mybatis Mapper 配置,涵盖了文章管理和统计功能的实现。通过使用注解和 XML 配置方式,我们可以轻松地定义 SQL 语句,并实现各种数据操作功能。
注意: 以上代码示例仅供参考,实际应用中可能需要根据具体需求进行修改。
希望本文能够帮助你更好地理解 Mybatis Mapper 配置,并运用到实际项目开发中。