springboot,更新数据的2种写法

 

BookDao.java

以下为2种传参方式,都可用

/**
 * 图书Mapper
 * */
@Repository
@Mapper
//@CacheNamespace(flushInterval = 300000L)//缓存五分钟过期(必须加这句,不然会报错)
public interface BookDao extends BaseMapper<Book> {

    /**
     * 根据bookId,更新bookName(方法1)
     */
    int updateBookNameByBookId(Map<String, Object> params);
    /**
     * 根据bookId,更新bookName(方法2)
     */
    int updateBookNameByBookId2(@Param("bookId") String bookId, @Param("bookName") String bookName);
}

  

BookDao.xml

<?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.touchzh.www.modules.book.dao.BookDao">
    <!--<cache-ref namespace="com.touchzh.www.modules.book.dao.BookDao"/>-->

    <!--根据book_id修改book_name,方法1-->
    <update id="updateBookNameByBookId" parameterType="map">
        update lib_book set book_name = #{bookName} where book_id = #{bookId}
    </update>

    <!--根据book_id修改book_name,方法2-->
    <update id="updateBookNameByBookId2">
        update lib_book set book_name = #{bookName} where book_id = #{bookId}
    </update>
</mapper>

  

在Service中调用

baseMapper.updateBookNameByBookId(params);//方法1
baseMapper.updateBookNameByBookId2(bookId,bookName);//方法2

  

哪一种方法更好?

这两种传参方式在功能上是等价的,都可以用来根据 bookId 更新 bookName。但是,它们的设计和适用场景有所不同。

updateBookNameByBookId(Map<String, Object> params) 方法使用一个 Map 参数,适合当你需要传递多个参数到数据库更新语句时。这种方式更灵活,因为你可以在一个 Map 中传递任意多的键值对。然而,它也要求调用者正确地设置 Map 中的键(在这种情况下是 bookId 和 bookName),这可能会增加出错的可能性。

updateBookNameByBookId2(@Param("bookId") String bookId, @Param("bookName") String bookName) 方法使用两个单独的参数,这使得代码更清晰和直接。你直接传递 bookId 和 bookName,然后在 MyBatis 的 XML 映射文件中通过 @Param 注解明确指出这些参数的名称。这种方式对于简单的更新操作来说更简单,更易于理解和使用。

"哪种更好一些"这个问题没有明确的答案,它取决于你的具体需求和偏好。如果你需要一个更灵活的方法来处理多个参数,那么第一种方法可能更适合你。如果你需要一个更直接和清晰的方法来处理简单的更新操作,那么第二种方法可能更适合你。

在大多数情况下,我会推荐第二种方法,因为它更直观和易于理解。然而,如果你的更新操作需要多个参数,或者参数的数量可能会变化,那么第一种方法可能会更方便。

 

posted @ 2023-12-22 16:30  牛大胆V5  阅读(316)  评论(0)    收藏  举报