mybatis注解方式通过@select、@insert等直接定义sql,适合简单静态场景;需接口+@mapper/@mapperscan,支持pojo/map参数及多种返回类型,但不支持动态sql,复杂逻辑推荐xml。

MyBatis 的注解方式可以直接在接口方法上使用 @Select、@Insert、@Update、@Delete 等注解定义 SQL,无需 XML 映射文件。这种方式适合简单、静态的 SQL 场景,代码更紧凑,但复杂动态 SQL 仍推荐用 XML。
基础配置与接口定义
确保项目已引入 MyBatis 和数据库驱动依赖,并在 Spring Boot 中启用 Mapper 扫描(如 @MapperScan("com.example.mapper"))。Mapper 必须是接口,不能是类:
- 接口需用
@Mapper标记(或通过@MapperScan批量注册) - 方法参数可直接作为 SQL 参数(支持单个参数、
@Param命名、POJO 或 Map) - 返回类型支持基本类型、POJO、List、Map 或 void(增删改常用)
@Select 查询操作
用于执行 SELECT 语句,支持单条记录和集合查询:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 单个参数直接引用:
@Select("SELECT * FROM user WHERE id = #{id}"),方法声明为User selectById(int id) - 多个参数需用
@Param明确命名:@Select("SELECT * FROM user WHERE name = #{name} AND age > #{minAge}"),方法为List<user> selectByNameAndAge(@Param("name") String name, @Param("minAge") int minAge)</user> - 返回 Map 时,列名自动映射为 key:
@Select("SELECT id, name FROM user LIMIT 1") Map<string object> selectFirstAsMap()</string>
@Insert、@Update、@Delete 操作
增删改操作默认不返回结果集,常配合 @Options(useGeneratedKeys = true, keyProperty = "id") 获取自增主键:
-
@Insert("INSERT INTO user(name, age) VALUES(#{name}, #{age})"),插入后可通过 POJO 的id字段获取生成值(需搭配@Options) -
@Update("UPDATE user SET name = #{name} WHERE id = #{id}"),参数为 POJO 或@Param注解的多个字段 -
@Delete("DELETE FROM user WHERE id = #{id}"),返回影响行数(int 类型),可用于判断是否删除成功
注意事项与限制
注解方式简洁,但有明显局限性:
- 不支持动态 SQL(如
<if></if>、<foreach></foreach>),复杂条件需拼接字符串(易出错且难维护) - 长 SQL 会降低可读性,建议超过 3 行时改用 XML
- 注解中不能直接写多行 SQL(Java 字符串换行需加
+连接),可用三重引号(Java 15+)或提取为常量 - 联合查询或嵌套结果需配合
@Results+@Result手动映射,不如 XML 的<resultmap></resultmap>直观
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










