MyBatis支持注解方式(如@Select、@Insert)直接在Mapper接口方法上编写SQL,适用于简单查询和单表操作;参数通过名称绑定或@Param显式指定,实体类参数直接引用属性名;复杂动态SQL仍推荐使用XML。

MyBatis 支持用注解(如 @Select、@Insert 等)直接在接口方法上写 SQL,避免 XML 文件,适合简单查询和单表操作。
基础注解写法
在 Mapper 接口的方法上使用 MyBatis 提供的注解,SQL 语句作为字符串传入。MyBatis 会自动绑定参数、映射结果。
- @Select:执行查询,返回单个对象或集合
-
@Insert:执行插入,可配合
@Options(useGeneratedKeys = true, keyProperty = "id")获取自增主键 - @Update 和 @Delete:分别执行更新和删除
参数传递方式
方法参数默认按名称绑定(需开启 useActualParamName=true,JDK 8+ 默认开启),也可用 @Param 显式命名:
- 单个基础类型(如
int、String):直接用#{id}或#{name} - 多个参数:必须加
@Param("xxx"),例如@Param("userId") Long id,SQL 中写#{userId} - 实体类参数:直接用属性名,如
#{username}、#{age}
简单示例
假设有个 User 类和对应的 UserMapper 接口:
立即学习“Java免费学习笔记(深入)”;
@Mapper
public interface UserMapper {
@Select("SELECT * FROM user WHERE id = #{id}")
User findById(Long id);
<pre class="brush:php;toolbar:false;">@Select("SELECT * FROM user WHERE username LIKE CONCAT('%', #{keyword}, '%')")
List<User> findByName(@Param("keyword") String keyword);
@Insert("INSERT INTO user(username, age) VALUES(#{username}, #{age})")
@Options(useGeneratedKeys = true, keyProperty = "id")
int insert(User user);}
调用 insert(user) 后,user.getId() 会被自动赋值为数据库生成的主键。
注意事项
注解方式适合逻辑清晰、SQL 简单的场景;复杂动态 SQL(如多条件拼接、<if></if> 判断)仍推荐用 XML,因为注解中写动态 SQL 难维护且易出错。
如果项目中混合使用 XML 和注解,确保接口全限定名与 XML 的 namespace 一致,否则 MyBatis 找不到对应 SQL。


















