数据库操作的方法签名 在 MyBatis 或 JPA 等ORM框架的上下文中,指的是在 Mapper 接口 或 Dao 接口 中声明的、用于执行数据库操作的方法的结构定义。
它主要由以下几个部分组成:
一、方法签名的核心组成部分
一个典型的数据库操作方法签名包括:
-
访问修饰符 (
public
) -
返回类型 (
int
,void
,User
,List<User>
等) -
方法名称 (
insert
,deleteById
,selectUserByName
等) -
参数列表 (
(User user)
,(Integer id)
,(String name, Integer age)
等) -
可选的注解 (
@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 通过以下规则进行绑定:
-
方法名 = SQL语句的id
// 接口中的方法名 User selectUserById(Integer id);
<!-- XML中SQL的id必须与方法名一致 --> <select id="selectUserById" resultType="User">SELECT * FROM user WHERE id = #{id} </select>
-
参数类型 = 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>
-
-
返回类型 = resultType / resultMap
-
返回单个对象:
resultType="User"
或resultMap="UserMap"
-
返回集合:同样是
resultType="User"
或resultMap="UserMap"
,MyBatis 会自动识别并包装成 List。
-
四、在你项目中的具体例子
根据你之前的 BaseDao<T>
接口,我们可以看到一系列非常标准的方法签名:
public interface BaseDao<T>{// 插入:返回int,参数是泛型实体Tint insert(T entity);// 删除:返回void或int,参数是主键ID(Serializable或具体类型)void deleteById(Serializable id);// 更新:返回void或int,参数是泛型实体Tvoid update(T entity);// 查询单个:返回泛型T,参数是主键IDT 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,将参数传递过去,并按照声明的返回类型来处理结果。