Mybatis_Plus 第二天

查询:

  /*
       测试批量查询
     */
    @Test
    public void  select(){
        List<Long> list = new ArrayList<>();
        list.add(1L);
        list.add(2L);
        list.add(3L);
        //查询集合
        userMapper.selectBatchIds(list);
    }

    /*
        测试条件查询
     */
    @Test
    public void  map(){
        HashMap<String, Object> map = new HashMap<>();
        //自定义查询
        map.put("name","张三");
        List<User> list = userMapper.selectByMap(map);
        for (User user : list) {
            System.out.println(user);
        }
    }

分页查询:
分页在网站使用的十分之多!
1.原始的limit进行分页
2.pageHelper第三方插件
3.MP其实也内置了分页插件
如何使用:
1.配置拦截器

@MapperScan("com.demo.mapper")
@EnableTransactionManagement//自动管理事物
@Configuration//配置类
public class mybatisPlusConfig {

    //注册乐观锁插件
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    }

    //分页插件
    @Bean
    public PaginationInterceptor paginationInterceptor() {

        return new PaginationInterceptor();
    }



}

2.直接使用Page对象即可

 /*
        测试分页查询
     */
    @Test
    public void pageTest(){
        // 参数一:当前页  比如:第一页
        // 参数二:当前页多少个  比如:第一页  显示3个值
        Page<User> page = new Page<>(1,3);
        userMapper.selectPage(page, null);
        //获取值
        List<User> records = page.getRecords();
        for (User record : records) {
            System.out.println(record);
        }

        //总页数
        long total = page.getTotal();
        System.out.println(total);
    }

删除操作:
1.基本的删除操作

 /*
        测试删除
     */
    @Test
    public void delete(){
        //通过id来删除
        userMapper.deleteById(1442789975631347713L);

    }

    /*
        测试批量删除
     */
    @Test
    public void deleteList(){
        List<Long> list = new ArrayList<>();
        list.add(11116L);
        list.add(11117L);
        list.add(11118L);
        list.add(11119L);
        list.add(11120L);
        userMapper.deleteBatchIds(list);
    }

    /*
        通过map删除
     */
    @Test
    public void maps(){
        HashMap<String, Object> map = new HashMap<>();
        map.put("name","张三");
        userMapper.deleteByMap(map);
    }


逻辑删除:
物理删除: 从数据库中直接移除
逻辑删除: 在数据库中没有被移除,而是通过变量来让他失效
例如:管理员可以查看被删除的记录!防止数据的丢失,类似于回收站
步骤:
1.数据库中增加字段:deleted
2.pojo类中添加 逻辑删除的注解:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    @TableId(type = IdType.AUTO)
    Long id;
    String name;
    Integer age;
    String email;

    //字段添加填充属性
    @TableField(fill = FieldFill.UPDATE )
    Date creatTime;

    //添加乐观锁注解
    @Version
    Integer version;


    //逻辑删除
    @TableLogic
    private Integer deleted;
}

3.配置逻辑删除的组件:

@MapperScan("com.demo.mapper")
@EnableTransactionManagement//自动管理事物
@Configuration//配置类
public class mybatisPlusConfig {

    //注册乐观锁插件
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    }

    //分页插件
    @Bean
    public PaginationInterceptor paginationInterceptor() {

        return new PaginationInterceptor();
    }


    //逻辑删除
    @Bean
    public ISqlInjector sqlInjector(){
        return new LogicSqlInjector();
    }



}

在application.properties配置:

#配置逻辑删除                         #logic-delete-value:删除后显示的值      #logic-not-delete-value:没删除的时候的默认值
mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0

测试:
在这里插入图片描述
查询看是否还有那个id:
在这里插入图片描述
会看出来 他会自动 在控制台上拼接 有逻辑删除的那个字段
也就是管理员为什么可以看到删除的记录

性能分析插件:
作用:性能分析拦截器,用于输出每条SQL语句以及执行的时间
我们在平时开发中,会遇到一些慢sql
MP也就会提供性能分析插件,如果超过这个时间那么就停止运行
1.导入插件

 //SQL执行效率插件
    @Bean
    @Profile({"dev", "test"})  //设置dev(开发环境)  test(测试环境)环境开启,保证我们的效率
    public PerformanceInterceptor performanceInterceptor(){
        PerformanceInterceptor performanceInterceptor=new PerformanceInterceptor();
        //设置SQL执行的最大时间,超过了则这个SQL就不执行
        performanceInterceptor.setMaxTime(100);
        //是否设置SQL格式化
        performanceInterceptor.setFormat(true);
        return performanceInterceptor;
    }

2.在application.properties里面配置环境:
环境一定要为测试环境或者开发环境

#配置dev、test 环境
spring.profiles.active=dev

3.测试查看

 @Test
    public void selectId(){
        userMapper.selectById(1L);
    }

结果:
在这里插入图片描述
使用性能分析插件,可以提高效率例如(开发中超过1秒的SQL可以查出来看看是否能进行优化 直接用sql执行的最大时间来设置)

条件构造器:
Wrapper:我们写一些复杂的sql就可以使用它来替代

@SpringBootTest
public class WrapperTest {

    @Autowired
    private UserMapper userMapper;

    /*
        查询name不为空的用户 并且邮箱不为空的用户,且年龄大于等于12
     */
    @Test
    void m1(){
        QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
        userQueryWrapper
                //不为空
                .isNotNull("name")
                .isNotNull("email")
                //大于等于
                .ge("age", 12);
        List<User> list = userMapper.selectList(userQueryWrapper);
        for (User user : list) {
            System.out.println(user);
        }
    }



    /*
        查询name等于张三的
     */
    @Test
    void m2(){
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        //  eq:=  也就是=的意思
        queryWrapper.eq("name", "张三");
        User user = userMapper.selectOne(queryWrapper); //查询一个数据,出现多个结果使用List或者Map
        System.out.println(user);
    }

    /*
        查询年龄在  20——30之间的用户
        多少个
     */
    @Test
    void m3(){
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        //between:  哪里--哪里之间(区间)
        wrapper.between("age", 20, 30);
        //查询结果数
        Integer integer = userMapper.selectCount(wrapper);
        System.out.println(integer);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值