MyBatisPlus-CRUD

一、查询

还是基于上面的程序

package com.md;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.md.entity.Student;
import com.md.mapper.StudentMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest
class ApplicationTests {

    @Autowired
    private StudentMapper mapper;

    @Test
    void contextLoads() {
        // 不加条件全部查询,把每个对象迭代出来
        mapper.selectList(null).forEach(System.out::println);
}

1、常用操作

// 查询全部
//mapper.selectList(null);

// 条件查询
QueryWrapper wrapper = new QueryWrapper();
//        Map<String,Object> map = new HashMap<>();
//        map.put("name","小红");
//        map.put("age",3);
// 多个条件查询
//        wrapper.allEq(map);

// 年龄大于20的
//        wrapper.gt("age",20);

// 名字不是小红的
//        wrapper.ne("name","小红");

// 大于等于
//        wrapper.ge("age",20);


//like '%小'
//        wrapper.likeLeft("name","小");
//like '小%'
//        wrapper.likeRight("name","小");

//inSQL,这两个同时作为条件
//        wrapper.inSql("id","select id from user where id < 10");
//        wrapper.inSql("age","select age from user where age > 20");

// 排序
//        wrapper.orderByDesc("age");

// 升序的同时id大于8
//        wrapper.orderByAsc("age");
//        wrapper.having("id > 8");




mapper.selectList(wrapper).forEach(System.out::println);

2、常用操作

// 通过主键查询
//        System.out.println(mapper.selectById(7));
//        mapper.selectBatchIds(Arrays.asList(7,8,9)).forEach(System.out::println);

//Map 只能做等值判断,逻辑判断需要使用 Wrapper 来处理
//        Map<String,Object> map = new HashMap<>();
//        map.put("id",7);
//        mapper.selectByMap(map).forEach(System.out::println);

QueryWrapper wrapper = new QueryWrapper();
wrapper.gt("id",7);
////        System.out.println(mapper.selectCount(wrapper));
//

//        //将查询的结果集封装到Map中,这个和下面返回的类型是不同
//        mapper.selectMaps(wrapper).forEach(System.out::println);
//        System.out.println("-------------------");
//        mapper.selectList(wrapper).forEach(System.out::println);

//分页查询,在接口中完成的
// 首先进行配置
//        Page<User> page = new Page<>(2,2);
//        Page<User> result = mapper.selectPage(page,null);
//        System.out.println(result.getSize());
//        System.out.println(result.getTotal());
//        result.getRecords().forEach(System.out::println);


// 把结果封装为map集合
//        Page<Map<String,Object>> page = new Page<>(1,2);
//        mapper.selectMapsPage(page,null).getRecords().forEach(System.out::println);

// 返回全部的主键
//        mapper.selectObjs(null).forEach(System.out::println);


// 只能查询单条数据
QueryWrapper wrapper = new QueryWrapper();
wrapper.eq("id",7);
System.out.println(mapper.selectOne(wrapper));

1. 自定义 SQL(多表关联查询)

通过sql语句

import lombok.Data;

@Data
public class ProductVO {
    private Integer category;
    private Integer count;
    private String description;
    
    private Integer userId;
    private String userName;
}
import java.util.List;

public interface UserMapper extends BaseMapper<User> {
    @Select("select p.*,u.name userName from product p,user u where p.user_id = u.id and u.id = #{id}")
    List<ProductVO> productList(Integer id);
}

二、分页

MyBatis Plus自带分页插件,只要简单的配置即可实现分页功能

创建配置类

@Configuration
public class MyBatisPlusConfig {

    /**
    * 乐观锁
    */
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor(){
        return new OptimisticLockerInterceptor();
    }
    
    /**
    * 逻辑删除
    */
    @Bean
	public ISqlInjector sqlInjector() {
		return new LogicSqlInjector();
	}
    
    /**
     * 分页插件
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
}

测试selectPage分页

最终通过page对象获取相关数据

@Test
public void testSelectPage() {
    Page<User> page = new Page<>(1,5);
    userMapper.selectPage(page,null);
    page.getRecords().forEach(System.out::println);
    System.out.println(page.getCurrent());
    System.out.println(page.getPages());
    System.out.println(page.getSize());
    System.out.println(page.getTotal());
    System.out.println(page.hasNext());
    System.out.println(page.hasPrevious());
}

控制台sql语句打印:SELECT id,name,age,email,create_time,update_time FROM user LIMIT 0,5

测试selectMapsPage分页:结果集是Map

@Test
public void testSelectMapsPage() {
    Page<User> page = new Page<>(1,5);
    IPage<Map<String,Object>> mapIPage = userMapper.selectMapsPage(page,null);
    //注意:此行必须使用 mapIPage 获取记录列表,否则会有数据类型转换错误
    mapIPage.getRecords().forEach(System.out::println);
    System.out.println(page.getCurrent());
    System.out.println(page.getPages());
    System.out.println(page.getSize());
    System.out.println(page.getTotal());
    System.out.println(page.hasNext());
    System.out.println(page.hasPrevious());
}

三、添加

User user = new User();
user.setTitle("小明");
user.setAge(22);
mapper.insert(user);
System.out.println(user);

四、删除

// 根据主键删除
//mapper.deleteById(1);
// 删除多个
//        mapper.deleteBatchIds(Arrays.asList(7,8));
// 有条件删除
//        QueryWrapper wrapper = new QueryWrapper();
//        wrapper.eq("age",14);
//        mapper.delete(wrapper);


Map<String,Object> map = new HashMap<>();
map.put("id",10);
mapper.deleteByMap(map);

五、修改

//        //update ... version = 3 where version = 2
//        User user = mapper.selectById(7);
//        user.setTitle("一号");
//
//        //update ... version = 3 where version = 2
//        User user1 = mapper.selectById(7);
//        user1.setTitle("二号");
//
//        mapper.updateById(user1);
//        mapper.updateById(user);


User user = mapper.selectById(1);
user.setTitle("小红");
QueryWrapper wrapper = new QueryWrapper();
wrapper.eq("age",22);
mapper.update(user,wrapper);

相关文章

1.pom.xml引入依赖 &lt;dependency&gt; &lt;gro...
&lt;?xml version=&quot;1.0&quot; encoding=&a...
准备工作 ① 创建数据库&amp;数据表 ## 创建数据库 CREA...
MyBatis逆向工程是指根据数据库表结构自动生成对应的实体类、...
MyBatis获取参数值的两种方式:${}和#{} ${}的本质就是字符串...
resultMap作用是处理数据表中字段与java实体类中属性的映射关...