MyBatis 注解使用指南

什么是 MyBatis 注解?

MyBatis 是一个老牌而强大的 ORM 框架,通过配置文件或注解来实现数据库操作。在注解模式中,你可以不用写 XML 配置文件,而是通过在代码中直接使用 Java 注解来实现。这种方式更简洁,会让你的项目代码极大约简化,同时保持构件的结构化。


MyBatis 注解的优势

  1. 优化代码结构: 较乎使用 XML 配置,注解使用更简洁。所有于 SQL 直接直观地位于接口中,汇总于一个场景中。

  2. 清除多余配置文件: 不再需要类似 mapper.xml 文件,不用经常分布多个文件。

  3. 高效开发: 使用注解可有效减少配置项,实现高效开发。

  4. 便于维护: 如果 SQL 改变,直接在注解中修改,尽量减少与业务无关的连结。


常用注解

1. @Mapper

这是基础注解,在接口上标记,用来告诉 MyBatis 这是一个数据操作的指导接口,通常配合 Spring 使用:

复制代码
@Mapper
public interface UserMapper {
    @Select("SELECT * FROM user WHERE id = #{id}")
    User getUserById(int id);
}

2. @Select

用于执行查询操作,在接口方法上有明确的 SQL 声明:

复制代码
@Mapper
public interface UserMapper {
    @Select("SELECT * FROM user")
    List<User> getAllUsers();
}

3. @Insert

用于执行插入操作:

复制代码
@Mapper
public interface UserMapper {
    @Insert("INSERT INTO user (name, age) VALUES (#{name}, #{age})")
    void insertUser(@Param("name") String name, @Param("age") int age);
}

4. @Update

用于执行更新操作:

复制代码
@Mapper
public interface UserMapper {
    @Update("UPDATE user SET name = #{name} WHERE id = #{id}")
    void updateUser(@Param("id") int id, @Param("name") String name);
}

5. @Delete

用于执行删除操作:

复制代码
@Mapper
public interface UserMapper {
    @Delete("DELETE FROM user WHERE id = #{id}")
    void deleteUser(int id);
}

应用实例

1. 创建数据表

复制代码
CREATE TABLE user (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50),
    age INT
);

2. 创建项目和配置

  1. 在项目中安装 MyBatis 和 Spring Boot。

  2. 配置数据库连接:

    spring:
    datasource:
    url: jdbc:mysql://localhost:3306/test
    username: root
    password: root
    mybatis:
    mapper-locations: classpath:mapper/*.xml

3. 代码实现

Mapper 接口
复制代码
@Mapper
public interface UserMapper {

    @Select("SELECT * FROM user WHERE id = #{id}")
    User getUserById(int id);

    @Insert("INSERT INTO user (name, age) VALUES (#{name}, #{age})")
    void insertUser(@Param("name") String name, @Param("age") int age);

    @Update("UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id}")
    void updateUser(@Param("id") int id, @Param("name") String name, @Param("age") int age);

    @Delete("DELETE FROM user WHERE id = #{id}")
    void deleteUser(int id);

    @Select("SELECT * FROM user")
    List<User> getAllUsers();
}
服务层
复制代码
@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    public User getUserById(int id) {
        return userMapper.getUserById(id);
    }

    public void createUser(String name, int age) {
        userMapper.insertUser(name, age);
    }

    public void updateUser(int id, String name, int age) {
        userMapper.updateUser(id, name, age);
    }

    public void deleteUser(int id) {
        userMapper.deleteUser(id);
    }

    public List<User> getAllUsers() {
        return userMapper.getAllUsers();
    }
}
控制器
复制代码
@RestController
@RequestMapping("/users")
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/{id}")
    public User getUserById(@PathVariable int id) {
        return userService.getUserById(id);
    }

    @PostMapping
    public void createUser(@RequestParam String name, @RequestParam int age) {
        userService.createUser(name, age);
    }

    @PutMapping("/{id}")
    public void updateUser(@PathVariable int id, @RequestParam String name, @RequestParam int age) {
        userService.updateUser(id, name, age);
    }

    @DeleteMapping("/{id}")
    public void deleteUser(@PathVariable int id) {
        userService.deleteUser(id);
    }

    @GetMapping
    public List<User> getAllUsers() {
        return userService.getAllUsers();
    }
}

结论

使用 MyBatis 注解可以大大简化代码,更加直观。对于较少复杂的场景,注解完全可以替代 XML。但在 SQL 过于复杂或有尊尼与业务关联的情况下,依然需要考虑 XML。

相关推荐
乌鸦乌鸦你的小虎牙10 小时前
qt 5.12.8 配置报错(交叉编译环境)
开发语言·数据库·qt
无心水10 小时前
【OpenClaw:实战部署】5、全平台部署OpenClaw(Win/Mac/Linux/云服务器)——10分钟跑通第一个本地AI智能体
java·人工智能·ai·智能体·ai智能体·ai架构·openclaw
feifeigo12310 小时前
Leslie人口模型MATLAB实现(中长期人口预测)
开发语言·matlab
写代码的二次猿11 小时前
安装openfold(顺利解决版)
开发语言·python·深度学习
一只大袋鼠11 小时前
Redis 安装+基于短信验证码登录功能的完整实现
java·开发语言·数据库·redis·缓存·学习笔记
※DX3906※12 小时前
Java排序算法--全面详解面试中涉及的排序
java·开发语言·数据结构·面试·排序算法
笨笨马甲12 小时前
Qt QSS使用指南
开发语言·qt
cur1es13 小时前
【JVM类加载&双亲委派模型&垃圾回收机制】
java·jvm·gc·垃圾回收·类加载·双亲委派模型
Mr.朱鹏13 小时前
JVM-GC垃圾回收案例
java·jvm·spring boot·算法·spring·spring cloud·java-ee
焦糖玛奇朵婷13 小时前
实测扭蛋机小程序:开发简单,互动有趣
java·大数据·程序人生·小程序·软件需求