什么是 MyBatis 注解?
MyBatis 是一个老牌而强大的 ORM 框架,通过配置文件或注解来实现数据库操作。在注解模式中,你可以不用写 XML 配置文件,而是通过在代码中直接使用 Java 注解来实现。这种方式更简洁,会让你的项目代码极大约简化,同时保持构件的结构化。
MyBatis 注解的优势
-
优化代码结构: 较乎使用 XML 配置,注解使用更简洁。所有于 SQL 直接直观地位于接口中,汇总于一个场景中。
-
清除多余配置文件: 不再需要类似 mapper.xml 文件,不用经常分布多个文件。
-
高效开发: 使用注解可有效减少配置项,实现高效开发。
-
便于维护: 如果 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. 创建项目和配置
-
在项目中安装 MyBatis 和 Spring Boot。
-
配置数据库连接:
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。