Mybatis-plus中的通用CRUD方法和条件构造器的使用

362 阅读2分钟

通用CRUD

import com.xxxx.dao.AdminDAO;
import com.xxxx.entity.Admin;
import com.baomidou.mybatisplus.plugins.Page;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

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

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class MPCRUDTest {

    @Autowired
    private AdminDAO adminDAO;
    
    //添加
    @Test
    public void testInsert(){
        //insert
        Admin admin = new Admin();
        admin.setId("1");
        admin.setName("xiaohei");
        admin.setPassword("123456");
        adminDAO.insert(admin);
    }

    //删除
    @Test
    public void testDelete(){

        //根据id删除 deleteById
        adminDAO.deleteById("2");

        //根据columnMap条件删除 deleteByMap,其中"name"对应的是数据库中的字段
        Map<String,Object> map = new HashMap<>();
        map.put("name","xiaopang");
        adminDAO.deleteByMap(map);

        //根据id批量删除 deleteBatchIds
        List<String> idList = new ArrayList<>();
        idList.add("1");
        idList.add("2");
        adminDAO.deleteBatchIds(idList);

    }

    //修改
    @Test
    public void testUpdate(){

        //根据id修改指定列 updateById,没有指定的列不变
        Admin admin = new Admin();
        admin.setId("2");
        admin.setName("xiaopang");
        admin.setPassword("123456");
        adminDAO.updateById(admin); // 或者  adminDAO.update(admin,null);

        //修改所有的列 updateAllColumnbyId,没有指定值的列都为null
        adminDAO.updateAllColumnById(admin);

    }

    //查询
    @Test
    public void testSelect(){

        //根据id查询 selectById
        Admin admin1 = adminDAO.selectById("1");

        //根据entity条件查询 selectOne  只能查询出来一个,如果查询结果有多个会报错
        Admin admin = new Admin();
        admin.setName("xiaohei");
        Admin admin2 = adminDAO.selectOne(admin);
        System.out.println(admin2);

        //根据多个Id查询 selectBatchIds
        List<String> idList = new ArrayList<>();
        idList.add("1");
        idList.add("2");
        List<Admin> admins = adminDAO.selectBatchIds(idList);
        System.out.println(admins);

        //根据columnMap条件查询 selectByMap 查询结果可能会有多条
        Map<String, Object> map = new HashMap<>();
        map.put("password","123456");
        List<Admin> admins1 = adminDAO.selectByMap(map);//如果确定查询结果只有一条可以这样取出来  Admin admin = admins1.get(0)
        System.out.println(admins1);

        //查询总记录数 selectCount
        Integer records = adminDAO.selectCount(null);
        System.out.println(records);

        //查询所有 selectList
        List<Admin> admins2 = adminDAO.selectList(null);
        System.out.println(admins2);

        //分页查询 selectPage
        List<Admin> admins3 = adminDAO.selectPage(new Page<>(1, 3), null);
    }
}

条件构造器

注意:条件中的字段名都是数据库中的字段

1. 分页查询user表中,年龄在18~30之间且性别为男性且姓名为小黑的所有用户

    @Test
    //分页查询user表中,年龄在18~30之间且性别为男性且姓名为小黑的所有用户
    public void testSelect(){
        EntityWrapper<User> entityWrapper = new EntityWrapper<>();
        entityWrapper.between("age",18,30)
                     .eq("sex","1")
                     .eq("username","小黑");
        List<User> users = userDAO.selectPage(new Page<User>(1, 3), entityWrapper);
        System.out.println(users);

    }

2. 条件构造器模糊查询

    //模糊查询  可以拼接其他条件
    @Test
    public void selectLike(String content){

        EntityWrapper<User> wrapper = new EntityWrapper<>();
        wrapper.like("username",content);

        List<User> users = userService.selectList(wrapper);
        for (User user : users) {
            System.out.println(user);
        }

    }

3. 举了两个例子,其他的还有很多可以构造的条件在下面的条件参数说明中

条件参数说明

查询方式说明
setSqlSelect设置 SELECT 查询字段
whereWHERE 语句,拼接 + WHERE 条件
andAND 语句,拼接 + AND 字段=值
andNewAND 语句,拼接 + AND (字段=值)
orOR 语句,拼接 + OR 字段=值
orNewOR 语句,拼接 + OR (字段=值)
eq等于=
allEq基于 map 内容等于=
ne不等于<>
gt大于>
ge大于等于>=
lt小于<
le小于等于<=
like模糊查询 LIKE
notLike模糊查询 NOT LIKE
inIN 查询
notInNOT IN 查询
isNullNULL 值查询
isNotNullIS NOT NULL
groupBy分组 GROUP BY
havingHAVING 关键词
orderBy排序 ORDER BY
orderAscASC 排序 ORDER BY
orderDescDESC 排序 ORDER BY
existsEXISTS 条件语句
notExistsNOT EXISTS 条件语句
betweenBETWEEN 条件语句
notBetweenNOT BETWEEN 条件语句
addFilter自由拼接 SQL
last拼接在最后,例如:last("LIMIT 1")

 

ActiveRecord

前提是实体类继承Model类,然后实体类中有这样一个方法(返回的是主键)

protected Serializable pkVal() {
    return this.id;
}

简单体会一下

    //AR
    @Test
    public void testAR(){

        //插入操作
        Admin admin = new Admin();
        admin.setId("88");
        admin.setName("大胖墩儿");
        admin.setPassword("123456");
        admin.insert();

        //查询操作
        admin.setId("88");
        Admin admin1 = admin.selectById();
        System.out.println(admin1);

    }