一. MP简介

我们知道,Mybatis属于一个半自动的ORM框架。之所以说Mybatis是一个半自动的ORM框架,原因是它还需要我们自己在注解或是映射文件中编写SQL语句,并没有实现完全的自动化。SQL语句的编写,虽然增加了项目和业务需求实现的灵活性,但对一些基本表的操作而言,无疑增加了数据库操作的复杂度,显得没有那么方便。

而Mybatis-Plus则是全自动的ORM框架,按照开闭原则,在不影响Mybatis现有功能的情况下,实现了对Mybatis的功能增强。如果你之前有过Mybatis的使用经验,现在学习Mybatis-Plus简直就是手到擒来。

图片

今天就带大家来学习一下Mybatis-Plus框架的基本使用,请掏出小本本吧。

二. Mybatis-Plus特点MP具有如下基本特点:通过在实体类中与数据库表进行映射;无需编写SQL语句,简化了CRUD操作;通常适用于单表。

三. MP使用

接下来会在SpringBoot项目环境中,带着大家一起使用Mybatis-Plus。

1、新建SpringBoot项目创建SpringBoot项目的过程,在这里就给大家省略了,如果有不熟悉的同学,可以参考之前关于SpringBoot的教程文章

2、添加核心依赖我们在SpringBoot项目中添加需要用到的核心依赖包。

<dependencies>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- MySql -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.47</version>
</dependency>
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.3.1.tmp</version>
</dependency>
<!-- 连接池 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.8</version>
</dependency>
<!--简化bean代码的工具包-->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
    <version>1.18.4</version>
</dependency>
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.6.4</version>
</dependency>

</dependencies>

图片
 所以,实体类中就可以省去CRUD方法的代码实现。package com.qf.pro.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qf.pro.pojo.User;

public interface UserDao extends BaseMapper<User> {

//BaseMapper<User> 默认封装了CRUD方法,通过泛型制定了所操作的实体类及表

}

  1. 编写配置类这样当SpringBoot启动时,就可以扫描到dao层代码所在的包。package com.qf.mp2103.dao;

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@MapperScan("com.qf.mp2103.dao")
public class MybatisPlusConfig {

@Bean
public PaginationInterceptor paginationInterceptor(){

    return new PaginationInterceptor();
}

}

  1. 业务实现我们要在业务逻辑层里调用各种CRUD方法,这也是Mybatis-Plus比较核心、重要的点,MybatisPlus会根据之前的配置自动生成SQL语句。package com.qf.mp2103.service.impl;

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.qf.mp2103.dao.UsersDao;
import com.qf.mp2103.pojo.Users;
import com.qf.mp2103.service.UsersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class UserServiceImpl implements UsersService {

@Autowired
private UsersDao usersDao;

@Override
public List<Users> findUsers() {
    //mybatisplus 自动生成/提供的查询方法
    //由于是无条件查询,参数null
    return usersDao.selectList(null);
}

@Override
public List<Users> findUsersByCondition(String name) {
    //创建QueryWrapper对象
    QueryWrapper<Users> wrapper=new QueryWrapper<Users>();
    //通过wrapper对象来设置查询条件
    //参数1:字段表名
    //参数2:所赋值
    //eq  等于
    wrapper.eq("name",name);

    return usersDao.selectList(wrapper);
}

@Override
public List<Users> findUsersByCondition2(int startAge, int endAge) {
    QueryWrapper<Users> wrapper=new QueryWrapper<Users>();
    //年龄的范围
    wrapper.between("age",startAge,endAge);
    return usersDao.selectList(wrapper);
}

@Override
public List<Users> findUsersByCondition3(Users users) {
    //多条件查询
    QueryWrapper<Users> wrapper=new QueryWrapper<Users>();
    //where name='' and age <=

// wrapper.eq(true,"name",users.getUserName());
//// wrapper.le(true,"age",users.getAge());

    //where name='' or age >=
    wrapper.eq(true,"name",users.getUserName());
    wrapper.ge(false,"age",users.getAge());
    return usersDao.selectList(wrapper);
}

@Override
public List<Users> findUsersByCondition4(Users users) {
    //模糊查询
    QueryWrapper<Users> wrapper=new QueryWrapper<Users>();
    //%关键字%
    wrapper.like("name",users.getUserName());
    //%明
    //wrapper.likeLeft()
    //李%
    //wrapper.likeRight();
    return usersDao.selectList(wrapper);
}

//排序查询
@Override
public List<Users> findUsers2() {
    QueryWrapper<Users> wrapper=new QueryWrapper<Users>();
    //设置排序条件
    wrapper.orderByDesc("id");

    return usersDao.selectList(wrapper);
}

@Override
public List<Users> findUsersByPage(int page, int size) {
    //用于分页查询
    //select * from users  limit X,X
    QueryWrapper<Users> wrapper=new QueryWrapper<Users>();
    int start=(page-1)*size;
    //拼接
    wrapper.last("limit "+start+","+size);
    return usersDao.selectList(wrapper);
}

@Override
public List<Users> findUsers3() {
    //查询指定列
    QueryWrapper<Users> wrapper=new QueryWrapper<Users>();
    //设置查询的列
    wrapper.select("id","email");

    return usersDao.selectList(wrapper);
}

@Override
public boolean addUser(Users users) {
    //添加用户
    int result=usersDao.insert(users);
    return result==1;
}

@Override
public boolean deleteUser(int id) {
    //删除用户--单个删除
    int result=usersDao.deleteById(id);
    //批量删除
    //usersDao.deleteBatchIds(List<Integer> list);
    return result==1;
}

@Override
public boolean updateUser(Users users) {
    //要求表中的主键列是id的名字,使用id列作为条件
    int result=usersDao.updateById(users);
    //如果主键列的名字不是id,或者条件不是主键id

// QueryWrapper<Users> wrapper=new QueryWrapper<Users>();
// wrapper.eq("email",users.getEmail());
// int result2=usersDao.update(users,wrapper);

    return result==1;
}

@Override
public Users findUersById(int id) {
    //根据主键id查询单个对象
    return usersDao.selectById(id);
}

@Override
public List<Users> findUsersByIds(List<Integer> list) {
    //根据id批量查询
    return usersDao.selectBatchIds(list);
}

@Override
public Map<String,Object> findUsersByPage2(int page, int size) {
    //如果还有其他条件查询,声明条件构造器进行

    //创建分页插件对象
    //参数1:显示第几页数据
    //参数2:每页显示几条数据
    Page<Users> page1=new Page<Users>(page,size);
    //根据分页插件对象里的分页条件查询数据
    IPage<Users> iPage=usersDao.selectPage(page1,null);

    Map<String,Object> map=new HashMap<String, Object>();
    //获取总记录数  iPage.getTotal()
    map.put("totalCount",iPage.getTotal());
    //获取总页数 iPage.getPages()
    map.put("totalPage",iPage.getPages());
    //获取分页数据
    map.put("data",iPage.getRecords());
    return map;
}

@Override
public List<Users> findUsers4(int age1, int age2, String email) {
    QueryWrapper<Users> queryWrapper=new QueryWrapper<Users>();
    queryWrapper.ge("age",age1).le("age",age2).or().likeRight("email",email);

    return usersDao.selectList(queryWrapper);
}

@Override
public Users findUsers5(int id) {
    //创建实体类对象
    Users user=new Users();
    user.setId(id);
    //声明对象接收查询返回的结果
    Users getUser=user.selectById(id);
    return getUser;
}

@Override
public void addUsers2(Users users) {
    //添加方法
    users.insert();
}

@Override
public void updateUsers2(Users users) {
    //根据主键更新
    users.updateById();
}

@Override
public void deleteUsers2(Users users) {
    //根据主键删除
    users.deleteById();
}

public Users findOne(String name){
    //根据其他条件查询单个数据,如果多于1条数据,则报异常
    //条件构造器
    QueryWrapper queryWrapper=new QueryWrapper();
    queryWrapper.eq("name",name);
    return usersDao.selectOne(queryWrapper);
}
//查询总记录数
public int getUserCount(){
    //可以声明条件构造器
    return usersDao.selectCount(null);
}

}
这样通过以上几个步骤,我们就学会了Mybatis-Plus的基本使用,希望今天的文章可以教会大家如何使用Mybatis-Plus。如果你还有疑惑,可以留言我哦。


编程世界
7 声望1 粉丝

和大家一起分享java、web前端、Python、大数据等方面技术知识,探讨IT编程技术相关问题!