假设数据库中有一个表user,使用mybatis-plus操作该表:
1. 首先定义UserPO类与user表对应
@TableName(value = "user")
public class UserPO extends BasePO implements Serializable {
@TableField(..)
private .. ..;
2. 定义UserMapper,Mapper继承BaseMapper并使用泛型指定此Mapper对应的实体类
public interface UserMapper extends BaseMapper<UserPO> {
//也可以结合注解、xml方式更新表
@Delete("truncate table users")
void clearAllUser();
}
3. 定义UserService接口
public interface UserService extends IService<UserPO> {
// 方法声明
}
4. 实现UserService接口
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, UserPO> implements UserService {
@Resource
private UserMapper userMapper;
...
}
在接口实现类中可以使用BaseMapper中定义的方法,也可以使用IService中定义的方法,如果要是用BaseMapper中的方法,需要使用@Resource注解注入对应的mapper。两个类中的方法区别见官网说明CRUD 接口 | MyBatis-Plus。
二. 条件构造器lambdaQueryWrapper与queryWrapper的区别
1 QueryWrapper使用方式
QueryWrapper wrapper = new QueryWrapper()
.eq(StringUtils.isNotBlank(user.getNickName()), "nick", user.getNickName())
.eq(user.getId() != null,"id", user.getId());
List userList = userDao.selectList(wrapper);
2 LambdaQueryWrapper 使用方式
LambdaQueryWrapper wrapper = new LambdaQueryWrapper()
.eq(StringUtils.isNotBlank(user.getNickName()), User::getNickName, user.getNickName())
.eq(user.getId() != null, User::getId, user.getId());
List userList = userDao.selectList(wrapper);
3 使用区别
QueryWrapper 的列名匹配使用的是 “数据库中的字段名(一般是下划线规则)”
LambdaQueryWrapper 的列名匹配使用的是“Lambda的语法,偏向于对象”
4 LambdaQueryWrapper的优势
不同写“列名”,而是使用纯java的方式,避免了拼写错误(LambdaQueryWrapper的写法如果有错,则在编译期就会报错,而QueryWrapper需要运行的时候调用该方法才会报错)