数据库操作的方法签名 在 MyBatis 或 JPA 等ORM框架的上下文中,指的是在 Mapper 接口 或 Dao 接口 中声明的、用于执行数据库操作的方法的结构定义

它主要由以下几个部分组成:

一、方法签名的核心组成部分

一个典型的数据库操作方法签名包括:

  1. 访问修饰符 (public)

  2. 返回类型 (intvoidUserList<User> 等)

  3. 方法名称 (insertdeleteByIdselectUserByName 等)

  4. 参数列表 ((User user)(Integer id)(String name, Integer age) 等)

  5. 可选的注解 (@Param@Insert@Select 等)


二、不同数据库操作的方法签名示例

我们结合 MyBatis 的 Mapper 接口来看一些具体的例子。

1. 插入操作 (Insert)

 
// 返回插入的行数(通常为1)
int insert(User user);

// 返回插入的行数,并且要求获取自增主键(主键值会回填到参数对象中)
int insert(User user); // 配合XML中的 useGeneratedKeys="true"

// 返回布尔值表示成功与否(不常用,但可行)
boolean insertUser(User user);

2. 删除操作 (Delete)

 
// 根据主键删除,返回删除的行数
int deleteById(Integer id);

// 根据实体条件删除,返回删除的行数
int deleteByEntity(User user);

// 根据Map条件删除
int deleteByMap(Map<String, Object> params);

3. 更新操作 (Update)

 
// 更新一个实体,返回受影响的行数
int update(User user);

// 根据主键更新
int updateById(User user);

4. 查询操作 (Select) - 返回类型最丰富

返回单个对象:

 
// 根据主键查询,可能返回null
User selectById(Integer id);
User getById(Integer id); // get和select通常可以互换

// 根据条件查询单个对象
User selectByUsername(String username);
User selectByUsernameAndPassword(@Param("username") String username, 
                                 @Param("password") String password); // 多参数使用@Param

返回集合(列表):

 
// 查询所有用户
List<User> selectAll();
List<User> findAll();

// 根据条件查询列表
List<User> selectByAgeGreaterThan(Integer age);
List<User> selectByEntity(User user); // 以非空属性作为条件
List<User> selectByMap(Map<String, Object> params);

返回特殊类型:

 
// 查询数量
Long selectCount();

// 查询某个字段
String selectUsernameById(Integer id);

// 查询结果封装到Map中(key为记录的某个字段,value为实体)
@MapKey("id") // 指定用id字段作为Map的key
Map<Integer, User> selectAllAsMap();

三、方法签名与 XML 映射的绑定规则

方法签名之所以能工作,是因为它与 Mapper XML 文件中的定义严格对应。MyBatis 通过以下规则进行绑定:

  1. 方法名 = SQL语句的id

     
    // 接口中的方法名
    User selectUserById(Integer id);
     
    <!-- XML中SQL的id必须与方法名一致 -->
    <select id="selectUserById" resultType="User">
        SELECT * FROM user WHERE id = #{id}
    </select>
  2. 参数类型 = parameterType

    • 如果只有一个参数,#{...} 里的名字可以任意,但通常与参数名一致。

    • 如果有多个参数,必须使用 @Param 注解#{...} 里的名字就是注解的值。

     
    // 多参数示例
    User selectByUsernameAndPassword(@Param("uname") String username, 
                                    @Param("pwd") String password);
     
    <select id="selectByUsernameAndPassword" resultType="User">
        SELECT * FROM user 
        WHERE username = #{uname} AND password = #{pwd}
    </select>
  3. 返回类型 = resultType / resultMap

    • 返回单个对象:resultType="User" 或 resultMap="UserMap"

    • 返回集合:同样是 resultType="User" 或 resultMap="UserMap",MyBatis 会自动识别并包装成 List。


四、在你项目中的具体例子

根据你之前的 BaseDao<T> 接口,我们可以看到一系列非常标准的方法签名:

java
public interface BaseDao<T>{
    // 插入:返回int,参数是泛型实体T
    int insert(T entity);

    // 删除:返回void或int,参数是主键ID(Serializable或具体类型)
    void deleteById(Serializable id);

    // 更新:返回void或int,参数是泛型实体T
    void update(T entity);

    // 查询单个:返回泛型T,参数是主键ID
    T getById(Serializable id);

    // 查询列表:返回List<T>,参数是Map或实体
    List<T> listByMap(Map<String,Object> params);
    List<T> listAllByEntity(T entity);
}

总结

数据库操作的方法签名的本质是:一个在Java接口中定义的、与Mapper XML文件中的SQL语句id一一对应的、包含了完整参数和返回类型信息的方法声明。

它的核心作用是建立Java方法调用和SQL语句执行之间的桥梁。MyBatis框架在运行时,会根据这个签名找到对应的SQL,将参数传递过去,并按照声明的返回类型来处理结果。

posted on 2025-09-23 08:35  fafrkvit  阅读(14)  评论(0)    收藏  举报