SpringBoot&MyBatisPlus

157 阅读2分钟

这是我参与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测试一下