目录
[1. @Mapper](#1. @Mapper)
[2. @Select](#2. @Select)
[3. @Insert](#3. @Insert)
[4. @Update](#4. @Update)
[5. @Delete](#5. @Delete)
[6. @Results](#6. @Results)
前言
MyBatis是一款强大的持久层框架,通过注解的方式,可以更便捷地进行数据库操作。本文将介绍MyBatis中常用的注解以及在使用这些注解时需要注意的事项。
1. @Mapper
在MyBatis中,使用 @Mapper
注解可以将一个Java接口标识为MyBatis的映射器(Mapper),告诉MyBatis这个接口是用于执行SQL语句的。
java
@Mapper
public interface UserMapper {
}
2. @Select
@Select
注解用于配置查询操作的SQL语句,可以在接口方法上使用,也可以在接口内部定义常量。
java
@Select("SELECT * FROM users WHERE id = #{id}")
User getUserById(@Param("id") Long id);
3. @Insert
@Insert
注解用于配置插入操作的SQL语句。
java
@Insert("INSERT INTO users (name, age) VALUES (#{name}, #{age})")
void insertUser(User user);
4. @Update
@Update
注解用于配置更新操作的SQL语句。
java
@Update("UPDATE users SET name = #{name} WHERE id = #{id}")
void updateUser(User user);
5. @Delete
@Delete
注解用于配置删除操作的SQL语句。
java
@Delete("DELETE FROM users WHERE id = #{id}")
void deleteUserById(@Param("id") Long id);
6. @Results
@Results
注解用于配置结果映射,将数据库查询的结果映射到Java对象中。
java
@Results({
@Result(property = "id", column = "user_id"),
@Result(property = "name", column = "user_name")
})
@Select("SELECT user_id, user_name FROM users WHERE id = #{id}")
User getUserById(@Param("id") Long id);
注意事项:
1. 命名参数与注解参数名一致: MyBatis通过参数名来匹配SQL语句中的占位符,确保注解中的参数名与SQL语句中的参数名一致。
2. 参数注解: 在方法参数上使用 @Param
注解,用于指定SQL语句中的参数名。
java
@Select("SELECT * FROM users WHERE name = #{name} AND age = #{age}")
User getUserByNameAndAge(@Param("name") String name, @Param("age") int age);
3. 动态SQL: MyBatis支持使用<if>
, <choose>
, <when>
, <otherwise>
等标签进行动态SQL的构建,可以根据不同条件动态拼接SQL语句。
**4. 使用#{}和{}的区别:** `#{}`会将参数值以占位符的形式传递给SQL,会进行预编译,防止SQL注入。`{}`则直接将参数值嵌入到SQL语句中,慎用避免SQL注入。