这是我参与11月更文挑战的第23天,活动详情查看:2021最后一次更文挑战 之前就有说过MybatisPlus,但是当时没有结合这么多,今天就整体的说一下,当下开发用的最多的两大神器的结合
还是我们只前的测试项目,我们导入MybatisPlus的jar
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3.4</version>
</dependency>
我们通过maven查看,我们发现,在MybatisPlus中已经包含了jdbc和mybatis的包,所以我们取消导入,避免jar冲突
我们的MybatisPlus帮我们配置了很多东西,就不单个列举了,想知道的可以自己搜索配置类查看一下底层配置。
现在我们就可以直接开发了
准备一张user表
为我们的表创建好实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class User {
private Integer id;
private String username;
private String password;
private String email;
}
因为我们集成了MybatisPlus,我们不需要那些麻烦的sql语句,只要我们的mapper继承BaseMapper就可以
public interface UserMapper extends BaseMapper<User> {
}
我们测试一下
@Autowired
UserMapper userMapper;
@Test
void testUserMapper(){
User user = userMapper.selectById(1);
log.info("用户信息:{}",user);
}
如过我们的实体类和我们表中的字段不一样,那么可能会报错,我们在我们多余的字段下添加@TableField(exist = false)
这时候我们就有一个问题,我们的数据库中有那么多的表,我们的查询是怎么找到我们的User表呢?其实他是参照我们的实体类名称去自动匹配的,如果有一天,我们的表名,和我们的实体类名称不匹配,我们就可以使用@TableName标签
crud功能实现
我们刚刚都是一些测试的代码,我们很多的目录结构都是不标准的,我们需要先写出我们的Service接口,再去写它的实现类
但是,这样,我们去开发的时候,我们就要先在接口中添加方法,再去写它的实现类,就会十分的麻烦,我们的MybatisPlus也帮我们做了优化
首先,在我们的Service接口中去继承IService<>,我们添加的泛型就是我们需要操作的类型
public interface UserService extends IService<User> {
}
他是我们的顶级Service,在其中,有很多的实现方法,当我们接口去继承他的时候,我们下面的实现类,就需要去实现很多的方法
所以我们的实现类就需要去继承他的一个实现类ServiceImpl
public class UserServiceImpl extends ServiceImpl<UserMapper,User> implements UserService {
}
这时候我们看到,就算我们不需要写什么方法,他就会有很多提供好的方法,当我们需要一些特殊,或者复杂的操作时,我们再去编写我们的方法。测试一下我们的代码
@Autowired
UserService userService;
@GetMapping("/test")
public String test(Model model){
List<User> list = userService.list();
model.addAttribute("user",list);
return model.toString();
}
我们没有页面,也就只能用Postman测试一下