MyBatis是一个开源的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis免除了几乎所有的JDBC代码和手动设置参数以及获取结果集的工作。MyBatis可以使用注解进行单表操作,从而避免编写繁琐的Mapper映射文件。以下是对MyBatis注解单表操作的介绍,包括案例和解释:
常用注解
- @Select:用于执行查询操作,后面跟SQL语句。
- @Update:用于执行更新操作,后面跟SQL语句。
- @Insert:用于执行插入操作,后面跟SQL语句。
- @Delete:用于执行删除操作,后面跟SQL语句。
- @Param:用于传递多个参数给SQL语句。
案例
下面是UserMapper
接口文件的详细解释,该接口使用了 MyBatis 的注解来进行单表操作。
import org.apache.ibatis.annotations.*;
import java.util.List;
// 定义 UserMapper 接口,用于操作 tb_user 表
public interface UserMapper {
// 使用 @Select 注解执行一个简单的查询,返回 tb_user 表中的所有用户
// SQL 语句中的 u 是表的别名,这里其实可以省略,因为只是简单查询所有列
@Select("select * from tb_user u")
List<User> selectUserAll(); // 返回一个 User 对象列表
// 使用 @Select 注解执行带参数的查询,根据用户名模糊匹配查询用户
// #{name} 是 MyBatis 的参数占位符,它会自动将方法参数中的 username 值替换到 SQL 语句中
// concat("%", #{name}, "%") 用于构造 LIKE 查询的模糊匹配条件
@Select("select * from tb_user where username like concat(\"%\",#{name},\"%\")")
List<User> selectUserByName(String username); // 根据用户名返回匹配的 User 对象列表
// 使用 @Insert 注解执行插入操作,将 User 对象的信息插入到 tb_user 表中
// #{username} 和 #{password} 是 MyBatis 的参数占位符,它们会自动将 User 对象中的属性值替换到 SQL 语句中
@Insert("INSERT INTO tb_user (username, password) VALUES (#{username}, #{password})")
int insertUserInfo(User user); // 插入成功返回 1,失败返回 0 或抛出异常
// 使用 @Update 注解执行更新操作,更新 tb_user 表中指定 ID 的用户信息
// 这里的 SQL 语句通过 where 子句指定了要更新的记录(通过 ID),并使用 MyBatis 的参数占位符 #{...} 来动态设置字段值
@Update("update tb_user set "
+ " username=#{username}, password=#{password}"
+ " where id = #{id}")
int updateUserInfo(User user); // 更新成功返回影响的行数,通常为 1 或 0
// 使用 @Delete 注解执行删除操作,删除 tb_user 表中指定 ID 的用户
// #{id} 是 MyBatis 的参数占位符,用于指定要删除的记录 ID
@Delete("delete from tb_user where id = #{id}")
int deleteUserById(int id); // 删除成功返回影响的行数,通常为 1 或 0
}
注解解释
- @Select: 用于执行查询操作。它接收一个 SQL 语句作为参数,并返回一个结果集(通常是列表或单个对象)。
- @Insert: 用于执行插入操作。它接收一个 SQL 语句作为参数,并返回一个整数,表示影响的行数。
- @Update: 用于执行更新操作。它接收一个 SQL 语句作为参数,并返回一个整数,表示影响的行数。
- @Delete: 用于执行删除操作。它接收一个 SQL 语句作为参数,并返回一个整数,表示影响的行数。
参数占位符
- #{...}: MyBatis 的参数占位符,用于在 SQL 语句中插入方法参数的值。MyBatis 会自动处理这些占位符,将它们替换为实际的值,并进行必要的转义以防止 SQL 注入攻击。
使用场景
这个 UserMapper
接口定义了基本的 CRUD(创建、读取、更新、删除)操作,适用于对单个表(在这个例子中是 tb_user
表)进行基本的数据库操作。通过 MyBatis 的注解方式,可以简化代码,避免编写繁琐的 XML 配置,同时保持 SQL 语句的清晰和可读性。