一、查询
还是基于上面的程序
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));
![](https://i-blog.csdnimg.cn/blog_migrate/6c4752d4e2cbcfdabcbb2b351c54191a.png)
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自带分页插件,只要简单的配置即可实现分页功能
![](https://i-blog.csdnimg.cn/blog_migrate/aa4e95f4e75c2d98ce0ab76e4f05de3f.png)
创建配置类
@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);