黑马程序员最新MybatisPlus全套视频教程,4小时快速精通mybatis-plus框架
简介
在MyBatis-Plus
框架中,Service
接口的作用是为实体类提供一系列的通用CRUD
(增删改查)操作方法。通常情况下,Service
接口中的方法会对应数据库表中的操作,例如插入一条数据、根据主键查询数据、更新数据等。
Service
接口与继承BaseMapper
的区别在于,Service
接口封装了一些常用的数据库操作方法,使得开发者可以直接调用这些方法,而不需要自己手动编写SQL语句和操作数据库。这样可以减少开发者的工作量,并提高开发效率。
另外,Service
接口还可以定义一些业务相关的方法,例如根据条件查询数据、批量插入数据等。这些方法可以根据具体的业务需求来定义,提供了更加灵活的操作方式。
而继承BaseMapper
接口,则是为了实现自定义的数据库操作方法。通过继承BaseMapper
接口,可以使用MyBatis-Plus
提供的一系列的数据库操作方法,例如插入、更新、删除等。这样可以方便地使用MyBatis-Plus的功能,并减少手动编写SQL语句的工作量。
总之,Service
接口和继承BaseMapper
接口都是为了简化数据库操作的方式,提高开发效率,并提供了一些常用的数据库操作方法。具体使用哪种方式,可以根据具体的业务需求和开发习惯来选择。
基本步骤
1、需要有一个自己的Service
接口,这个接口要继承
UserService
// 自定义的接口,继承mybatis-plus中的IService接口
public interface UserService extends IService<User> {
}
2、对自己的Service
接口进行继承并实现
UserServiceImpl
// 1、继承mybatis-plus提供的Service实现类,指定对应的mapper接口和实体类
// 2、继承自定义的UserService接口
// 3、添加上@Service注解
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}
3、使用mybatis-plus
实现好的方法进行查询
UserController
@Controller
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/userlist")
@ResponseBody
public List<User> selectAllUser() {
// 查询所有用户,调用mybatis-plus实现的方法
List<User> users = userService.list();
return users;
}
}
文件梳理
现有文件如下
UserController
定义前端访问的接口,后端调用UserServiceImpl
中的方法来处理数据库数据
User
实体类,与数据库表对应
UserMapper
定义操作sql的方法,主要是特殊需要写sql的方法,普通操作数据库可以通过mybatis-plus
提供的方法实现
UserServiceImpl
UserService
的实现类,编写主要的业务逻辑。
UserService
定义提供哪些操作方法。UserService
类似饭店,提供了菜单列表,而UserServiceImpl
就是具体做菜的厨师。
UserMapper.xml
编写具体的sql语句
现在假设mybatis-plus
没有提供查询名称为李四的用户,这时可以通过编写sql实现。
UserController
public List<User> selectAllUser() {
// 查询名称为李四的用户
List<User> users = userService.getLisi();
return users;
}
UserService
public interface UserService extends IService<User> {
// 获取李四
List<User> getLisi();
}
UserServiceImpl
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
@Override
public List<User> getLisi() {
// 调用baseMapper定义的操作sql的方法
// 这里不需要使用userMapper,因为ServiceImpl里有baseMapper,baseMapper实际上就是UserMapper
List<User> userList = baseMapper.getLisi();
return userList;
}
}
在UserServiceImpl
中也可以直接调用ServiceImpl
提供的方法
UserMapper
@Mapper
public interface UserMapper extends BaseMapper<User> {
List<User> getLisi();
}
UserMapper.xml
<select id="getLisi" resultType="org.example.springboot.entity.User">
select * from user where name = '李四'
</select>
这个流程感觉怪怪的,但是好像就是这样写,具体为啥不清楚,比较刚开始学习
ServiceImpl常用方法
mybatis-plus
在ServiceImpl
实现了很多方法。
一般查询单挑数据的方法是get
开头、多条数据是list
开头;
删除方法是remove
开头;
新增方法是save
开头;
更新方法是update
开头;
对于mybatis-plus
没有提供的,可以通过自定义mapper
接口,执行sql
语句来实现。
在使用BaseMapper
我们可以使用提供好的Lambda
表达式。当我们使用Service
时也可以使用Lambda
表达式。
UserController
public List<User> selectAllUser() {
// 使用Lambda表达式查询所有年龄大于30的男生
int age = 30;
int sex = 1;
List<User> users = userService.getAllBoy(age,sex);
return users;
}
UserService
// 查询男生
List<User> getAllBoy(@Param("age") Integer age, @Param("sex") Integer sex);
UserServiceImpl
// 查询男生
@Override
public List<User> getAllBoy(@Param("age") Integer age, @Param("sex") Integer sex) {
// 这里不需要使用if判断值是否存在,而是使用lambdaQuery处理
List<User> userList = lambdaQuery()
.gt(age != null, User::getAge, age) // 年龄存在时条件生效
.eq(sex != null, User::getSex, sex) // 性别存在时条件生效
.list(); // 返回一个集合
return userList;
}