欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MyBatis中XML和注解的对比及使用

程序员文章站 2022-06-02 13:51:31
MyBatis支持注解和XML两种配置。 1.基于XML的配置 当前新闻页面只显示10条消息的配置代码: List selectByUserIdAndOffset(@Pa...

MyBatis支持注解和XML两种配置。

1.基于XML的配置

当前新闻页面只显示10条消息的配置代码:

List selectByUserIdAndOffset(@Param("userId") int userId,
                                       @Param("offset") int offset,
                                       @Param("limit") int limit);

News数据库表显示10个新闻数据:(根据用户userId显示,offset为:当前显示为第几个,limit:为当前页面显示几个用户新闻消息。)

XML配置文件(文件路径要与model中DAO的文件目录一样)

<?xml version="1.0" encoding="UTF-8" ?>
<!--数据库select、insert、update、delete标签中编写查询的SQL语句,mybatis有两种方式进行数据库的操作,
1.使用注解方式
2.使用配置文件方式:
这个文件为第二种方式-->
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.news.toutiao.dao.NewsDAO">
    <!--
  为这个mapper指定一个唯一的namespace,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的
  例如:namespace="com.news.toutiao.dao.NewsDAO"(NewsDAO文件去除后缀)
-->
    <sql id="table">news</sql>
    <!--<sql id="selectFields">id,title, link, image, like_count, comment_count,created_date,user_id
    </sql>-->
    <sql id="selectFields">id,title,link,image,like_count,comment_count,created_date,user_id

    </sql>
    <select id="selectByUserIdAndOffset" resultType="com.news.toutiao.model.News">
        <!--
   在select、insert、update、delete标签中编写查询的SQL语句, 设置标签的id属性值必须是唯一的,不能够重复。使用parameterType属性
   指明查询时,使用的参数类型。resultType属性指明查询返回的结果集类型,resultType="com.news.toutiao.model.News"就表示将查询
   结果封装成一个News类的对象返回,News类就是news表所对应的实体类。
 -->
        SELECT
        <include refid="selectFields"/>
        FROM
        <include refid="table"/>

        <if test="userId != 0">
            WHERE user_id = #{userId}
        </if>
        ORDER BY id DESC
        LIMIT #{offset},#{limit}
    </select>
</mapper>

在service中调用这些 SQL 语句:

public class NewsService {
    @Autowired
    public NewsDAO newsDAO;

    public List getLatestNews(int userId,int offset,int limit)
    {
        return newsDAO.selectByUserIdAndOffset(userId,offset,limit);
    }

基于注解的配置

    @Insert({"insert into",TABLE_NAME,"(",INSERT_FIELDS,
    ") values (#{title},#{link},#{image},#{likeCount},#{commentCount},#{createdDate},#{userId})"})
    int addNews(News news);

    @Select({"select ", SELECT_FILEDS , " from ", TABLE_NAME, " where id=#{id}"})
    News getById(int id);

    @Update({"update ", TABLE_NAME, " set comment_count = #{commentCount} where id=#{id}"})
    int updateCommentCount(@Param("id") int id, @Param("commentCount") int commentCount);

在NewsService调用SQL语言;

 public int addNews(News news)
    {
        newsDAO.addNews(news);
        return  news.getId();
    }