IService
是 MyBatis-Plus 中的一个接口,提供了通用的 CRUD 操作,简化了数据库操作的代码。下面是 IService
的用法详解及示例代码。
1. 引入依赖
确保在你的 pom.xml
中添加了 MyBatis-Plus 的依赖:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.0</version> <!-- 请根据实际情况使用最新版本 -->
</dependency>
2. 创建实体类
首先,创建一个实体类,例如 User
:
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
@TableName("user") // 指定表名
public class User {
@TableId // 主键
private Long id;
private String name;
private Integer age;
// Getters and Setters
}
3. 创建 Mapper 接口
创建一个 Mapper 接口,继承 BaseMapper
:
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface UserMapper extends BaseMapper<User> {
}
4. 创建 Service 接口
创建一个 Service 接口,继承 IService
:
import com.baomidou.mybatisplus.extension.service.IService;
public interface UserService extends IService<User> {
}
5. 创建 Service 实现类
实现 Service 接口:
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
// 可以添加自定义的方法
}
6. 使用 Service
在你的 Controller 中使用 UserService
:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
@PostMapping
public boolean saveUser(@RequestBody User user) {
return userService.save(user);
}
@GetMapping("/{id}")
public User getUser(@PathVariable Long id) {
return userService.getById(id);
}
@GetMapping
public List<User> getAllUsers() {
return userService.list();
}
@PutMapping
public boolean updateUser(@RequestBody User user) {
return userService.updateById(user);
}
@DeleteMapping("/{id}")
public boolean deleteUser(@PathVariable Long id) {
return userService.removeById(id);
}
}
7. 常用方法
IService
提供了一些常用方法,包括:
save(T entity)
:保存一个实体removeById(Serializable id)
:根据 ID 删除updateById(T entity)
:根据 ID 更新getById(Serializable id)
:根据 ID 查询list()
:查询所有记录count()
:查询总数
总结
通过继承 IService
,你可以快速实现 CRUD 操作,减少了代码量。MyBatis-Plus 还支持很多功能,如条件构造器、分页等,可以进一步提高开发效率。
在 MyBatis-Plus 中,可以在服务实现类中添加自定义方法,以实现特定的业务逻辑。下面是如何在 UserServiceImpl
中添加自定义方法的示例。
1. 添加自定义方法到 Service 接口
首先,在 UserService
接口中定义你想要的自定义方法。例如,我们可以添加一个方法来根据年龄查询用户列表:
import java.util.List;
public interface UserService extends IService<User> {
List<User> findByAge(Integer age); // 自定义方法
}
2. 在 Service 实现类中实现自定义方法
接下来,在 UserServiceImpl
中实现这个方法。你可以使用 UserMapper
来执行自定义查询:
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
// 实现自定义方法
@Override
public List<User> findByAge(Integer age) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("age", age); // 添加条件
return this.list(queryWrapper); // 调用基类方法查询
}
}
3. 在 Controller 中使用自定义方法
最后,可以在控制器中调用这个自定义方法。例如,添加一个新的 API 端点来根据年龄查询用户:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
// 其他 CRUD 方法...
@GetMapping("/age/{age}")
public List<User> getUsersByAge(@PathVariable Integer age) {
return userService.findByAge(age); // 调用自定义方法
}
}
4. 完整的示例
现在你的 UserService
和 UserServiceImpl
中已经有了自定义方法,而 UserController
也可以根据年龄查询用户。以下是最终的代码片段:
UserService.java
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
public interface UserService extends IService<User> {
List<User> findByAge(Integer age); // 自定义方法
}
UserServiceImpl.java
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
@Override
public List<User> findByAge(Integer age) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("age", age);
return this.list(queryWrapper);
}
}
UserController.java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
// 其他 CRUD 方法...
@GetMapping("/age/{age}")
public List<User> getUsersByAge(@PathVariable Integer age) {
return userService.findByAge(age);
}
}
总结
通过这种方式,你可以轻松地在服务层添加自定义方法,利用 MyBatis-Plus 提供的强大功能来实现复杂的业务逻辑。