前言
MyBatis-Plus对mybatis一些简单crud语句进行了的封装,因此对于不复杂的单表,可以直接使用提供出来的API即可。
CRUD接口
通过官网可以看到有两种CRUD接口,一种是Mapper,一种是Service。这两种具体是怎么回事呢?简单说一下,Mapper是相对基础一点的接口,Service是对Mapper再进行了一次封装的接口,Service内部也会调用Mapper的方法。单纯查询效果来说,两者是一样的。只要根据Web框架的层级去使用就好了,Service放Service层,Mapper放Mapper层。
下面展示一下例子。Mapper的例子上一篇文章已经试过了,这里尝试Service的例子
Service示例
在Service层添加UserService接口,继承IService接口。相关的业务逻辑接口可以在下面定义,本例子先留空
package com.sadoshi.mybatisplus.springboottest.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.sadoshi.mybatisplus.springboottest.model.User;
public interface UserService extends IService<User>{
}
接着创建其实现类UserServiceImpl,这个类要继承ServiceImpl<UserMapper, User>类,这样Service和Mapper就关联起来了。
package com.sadoshi.mybatisplus.springboottest.serviceImpl;
import org.springframework.stereotype.Component;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sadoshi.mybatisplus.springboottest.mapper.UserMapper;
import com.sadoshi.mybatisplus.springboottest.model.User;
import com.sadoshi.mybatisplus.springboottest.service.UserService;
@Component
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService{
}
接着在UserComponent这个组件类上添加测试方法,同时把UserServiceImpl自动注入到里面。这个方法很简单,同样是select all的效果,查出所有user表里面的数据。
package com.sadoshi.mybatisplus.springboottest.component;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.sadoshi.mybatisplus.springboottest.mapper.UserMapper;
import com.sadoshi.mybatisplus.springboottest.model.User;
import com.sadoshi.mybatisplus.springboottest.serviceImpl.UserServiceImpl;
@Component
public class UserComponent {
@Autowired
private UserMapper userMapper;
@Autowired
private UserServiceImpl userServiceImpl;
/*
......
*/
public void testServiceImpl() {
List<User> resultList = userServiceImpl.list();
for(User user : resultList) {
System.out.println(user);
}
}
}
然后在主类App上调用testServiceImpl方法即可,查看控制台结果
Wrapper的使用
几年前做项目的时候,本来项目是用mybatis的。后来新招了一个主程来负责这个项目,他引入MyBatis-Plus,然后冒出来一大堆wrapper,我当时也有点蒙。其实wrapper的使用很简单,可能官网都不屑于写个简单的例子,但一开始接触的同学可能和我一样有些懵逼,稍微给个例子看看估计就明白了。
往UserComponent中添加testQueryWrapper方法。这里设置查询name字段等于tom的记录。
package com.sadoshi.mybatisplus.springboottest.component;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.sadoshi.mybatisplus.springboottest.mapper.UserMapper;
import com.sadoshi.mybatisplus.springboottest.model.User;
import com.sadoshi.mybatisplus.springboottest.serviceImpl.UserServiceImpl;
@Component
public class UserComponent {
/*
......
*/
public void testQueryWrapper() {
System.out.println(("----- QueryWrapper test ------"));
QueryWrapper<User> warpper = new QueryWrapper<>();
warpper.eq("name", "Tom");
List<User> resultList = userMapper.selectList(warpper);
for(User user : resultList) {
System.out.println(user);
}
}
}
执行testQueryWrapper方法,得到结果。
wrapper除了QueryWrapper,还有UpdateWrapper,对应update操作。具体的wrapper方法可以通过官网查找,因为有很多,而且可以各种搭配使用,就不一一展示了。
分页
Mybatis-Plus也提供了分页的功能,首先引入插件
package com.sadoshi.mybatisplus.springboottest.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
接着我们写一个测试分页。Page有两个两个参数,第一个代表展示第几页(从1开始算),第二个代表一页有多少条记录。这里wrapper我们先留空。
package com.sadoshi.mybatisplus.springboottest.component;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sadoshi.mybatisplus.springboottest.mapper.UserMapper;
import com.sadoshi.mybatisplus.springboottest.model.User;
import com.sadoshi.mybatisplus.springboottest.serviceImpl.UserServiceImpl;
@Component
public class UserComponent {
@Autowired
private UserMapper userMapper;
/*
......
*/
public void testPage() {
Page page = new Page(2,3);
QueryWrapper<User> warpper = new QueryWrapper<>();
userMapper.selectPage(page, warpper);
}
}
执行后看控制台,已查出4、5、6三条记录了,执行正确。看输出的信息,这个分页插件,底层也是通过limit实现的。