mybatis-plus的api介绍

一:前言

我们说mybayis-plus为我们解决了单表的crud的问题,而且这些基本的crud无需我们写任何sql,只需要继承BaseMapper,如下:

public interface UsersMapper extends BaseMapper {
 
 
}

在BaseMapper中定义了crud接口方法,这一讲我们来了解这些接口方法,并学会使用它,在学习这些方法之前,我先介绍mybatis-plus的输出sql拦截器

,配置该拦截器,就可以查看sql输出情况。

//Spring boot方式
@EnableTransactionManagement
@Configuration
public class MybatisPlusConfig {
 
    /**
     * SQL输出拦截器
     */
    @Bean
    public PerformanceInterceptor performanceInterceptor() {
        PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
        //sql格式化
        performanceInterceptor.setFormat(true);
        return performanceInterceptor;
    }
 
    /**
    *分页查询拦截器
    */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
}

二:添加方法

添加方法为insert,测试代码如下:

@RunWith(SpringRunner.class)
@SpringBootTest
public class ApplicationTests {
 
    @Autowired
    private UsersMapper usersMapper;
 
    @Test
    public void testAdd(){
        Users user = new Users();
        user.setEmail("[email protected]");
        user.setJoinTime(LocalDateTime.now());
        usersMapper.insert(user);
    }
 
}

知识贴士:LocalDateTime、LocalDate、LocalTime都是java8提供的日期工具类
java8日期类型和数据库日期类型的对应关系

java8日期类型 mysql数据库类型
LocalTime : 只包括时间 对应 time
LocalDate : 只包括日期 对应 date
LocalDateTime : 包括日期和时间 对应 datetime

mybatis-plus生成器在生成pojo的时候如果数据库类型为日期类型,那么对应的pojo属性为java8中的日期类型
java8日期类型的常用api

// 取当前日期:
LocalDate today = LocalDate.now(); // -> 2018-12-24
LocalTime time = LocalTime.now(); //21:37:59
LocalDateTime time = LocalDateTime.now();//2018-12-24T21:37:59
 
 
//要从字符串创建LocalDateTime对象,可以使用静态LocalDateTime.parse()方法。
//它需要一个字符串和一个DateTimeFormatter作为参数。 DateTimeFormatter用于指定日期/时间模式。        
String str = "1986-04-08 12:30";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
LocalDateTime dateTime = LocalDateTime.parse(str, formatter);
 
 
//要从LocalDateTime对象中创建格式化的字符串,可以使用format()方法。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
LocalDateTime dateTime = LocalDateTime.of(1986, Month.APRIL, 8, 12, 30);
String formattedDateTime = dateTime.format(formatter); // "1986-04-08 12:30"

二:删除

1:根据id删除

@Test
public void testDelete1(){
 
    usersMapper.deleteById(1);
}

2:根据 columnMap 条件,删除记录
columnMap 中的key必须是字段名

//根据 columnMap 条件,删除记录
@Test
public void testDelete2(){
 
    Map columnMap = new HashMap();
    usersMapper.deleteByMap(columnMap);
}

3:根据entity条件,删除记录
entity必须使用QueryWrapper包裹

//根据 entity 条件,删除记录
@Test
public void testDelete3(){
    Users user = new Users();
    user.setEmail("[email protected]");
    user.setPwd("123");
    Wrapper queryWrapper =  new QueryWrapper(user);
    usersMapper.delete(queryWrapper);
}

4:根据id批量删除

//删除(根据ID 批量删除)
@Test
public void testDelete4(){
    List ids = new ArrayList();
    ids.add(3);
    ids.add(4);
    usersMapper.deleteBatchIds(ids);
}

三:修改

1:根据id update

@Test
public void update1(){
    Users user = new Users();
    //必须指定id
    user.setId(5);
    user.setEmail("99999999qq.com");
    usersMapper.updateById(user);
}

2:根据 whereEntity 条件,更新记录

@Test
public void update2(){
 
 
    //实体对象 (set 条件值,不能为 null)
    Users setUser = new Users();
    setUser.setEmail("66666666qq.com");
 
 
    // updateWrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句)
    Users whereUser = new Users();
    whereUser.setEmail("99999999qq.com");
    whereUser.setId(5);
    Wrapper updateWrapper = new UpdateWrapper(whereUser);
 
 
    //最终执行的sql:update users set email="66666666qq.com" where email="99999999qq.com" and id =5
 
    usersMapper.update(setUser,updateWrapper);
}

四:查询

1:根据 ID 查询

@Test
public void select1(){
 
    Users user = usersMapper.selectById(5);
 
}

2:查询(根据ID 批量查询)

@Test
public void select2(){
    List ids  =  new ArrayList();
    List list = usersMapper.selectBatchIds(ids);
    System.out.println(list.size());
}

3:查询(根据 columnMap 条件)
columnMap的key必须为字段名

@Test
public void select3(){
 
    Map columnMap = new HashMap();
 
    List list = usersMapper.selectByMap(columnMap);
    System.out.println(list.size());
}

4:根据 entity 条件,查询一条记录

@Test
public void select4(){
 
    Users whereUser = new Users();
    whereUser.setEmail("[email protected]");
    whereUser.setPwd("123");
    Wrapper queryWrapper =  new QueryWrapper(whereUser);
 
    Users user = usersMapper.selectOne(queryWrapper);
    System.out.println(user);
}

5:根据 entity 条件,查询全部记录

@Test
public void select5(){
 
    Users whereUser = new Users();
    whereUser.setEmail("[email protected]");
    whereUser.setPwd("123");
    Wrapper queryWrapper =  new QueryWrapper(whereUser);
 
    List users = usersMapper.selectList(queryWrapper);
    System.out.println(users.size());
}

6:条件+分页查询
首先:配置拦截器,该拦截器可以拦截selectPage方法,并实现物理分页

 /**
    *分页查询拦截器
    */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }

其次:调用selectPage方法

@Test
public void select6(){
 
    //分页信息
    int pageNow = 1;//当前页
    int pageSize = 2;//每页显示2条
    IPage  page = new Page(pageNow,pageSize);
 
    //条件
    Users whereUser = new Users();
    QueryWrapper queryWrapper =  new QueryWrapper(whereUser);
    //模糊查询
    queryWrapper.like("username","ja");
 
    //执行
    IPage usersIPage = usersMapper.selectPage(page, queryWrapper);
 
 
    //获取查询结果
    long pages = usersIPage.getPages();//总页数
    List users = usersIPage.getRecords();//当前页数据
    long total = usersIPage.getTotal();//获取总记录数
 
 
}

你可能感兴趣的:(it)