# MyBatis教程 - 9 使用注解开发
MyBatis 提供了注解开发的方式,可以让开发者不依赖 XxxMapper.xml
配置文件,直接在 XxxMapper.java
接口上使用注解来编写 SQL 语句。
但是对于复杂的 SQL 语句,使用注解的方式不易处理,所以针对简单的 SQL,可以使用注解的开发方式,而对于复杂的 SQL 还是建议使用 XxxMapper.xml
的 SQL 映射文件来完成。
# 9.1 注解方式实现增删改查
下面使用注解的开发方式,实现 User 表的增删改查,对于简单的 SQL,使用注解的方式还是非常方便的。
# 1 定义Mapper接口
还是在 UserMapper.java 中定义增删改查的相关接口,并在接口上使用注解定义 SQL 语句。
UserMapper.java :
package com.foooor.mybatis.mapper;
import com.foooor.mybatis.pojo.User;
import org.apache.ibatis.annotations.*;
public interface UserMapper {
/**
* 根据id查询用户信息
*/
@Select("SELECT * FROM tb_user WHERE id = #{id}")
User selectById(@Param("id") int id);
/**
* 插入用户信息
*/
@Insert("INSERT INTO tb_user(username, password, email, age, create_time, update_time) VALUES (#{username}, #{password}, #{email}, #{age}, #{createTime}, #{updateTime})")
@Options(useGeneratedKeys = true, keyProperty = "id")
int insert(User user);
/**
* 更新用户信息
*/
@Update("UPDATE tb_user SET username = #{username}, password = #{password}, email = #{email}, age = #{age}, update_time = #{updateTime} WHERE id = #{id}")
int update(User user);
/**
* 根据id删除用户信息
*/
@Delete("DELETE FROM tb_user WHERE id = #{id}")
int deleteById(@Param("id") int id);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
不用使用 UserMapper.xml
映射文件了,直接就可以测试了。
当然,我们可以同时使用注解和 XxxMapper.xml 进行混合开发,但是不能给一个接口同时添加注解和在 XxxMapper.xml 文件中进行 SQL 映射,会报错!
# 2 使用注解开发的优缺点
- 优点:
- 简洁:使用注解避免了冗长的 XML 配置,直接将 SQL 语句放在接口上,代码更加简洁。
- 易维护:SQL 语句和代码在一起,便于查看和修改。
- 缺点:
- 复杂 SQL 不易处理:当 SQL 语句变得非常复杂时,注解会显得力不从心。此时,还是需要回到 XML 配置中编写复杂的 SQL 语句。
- 可读性:对于非常长的 SQL 语句,直接写在注解中会导致代码可读性下降。
# 9.2 @Results和@Result注解
当查询数据库的字段名称和 Java 实体类中的属性名称不对应的时候,可以使用 @Results
和 @Result
注解。
@Results
注解是用来定义一组 @Result
的容器,用于指定 SQL 查询结果与实体类属性的映射规则。
举个栗子:
内容未完......
← 08-多对一和一对多 10-动态SQL →