zoukankan      html  css  js  c++  java
  • 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);
    
  • 相关阅读:
    Nginx的启动、停止与重启
    linux环境下安装nginx步骤
    关于Nginx的负载均衡
    【Nginx】实现动静分离
    nginx中的反向代理
    Nignx的简介
    ERROR 1822 (HY000): Failed to add the foreign key constraint. Missing index for constraint 'orderite
    mysql出现“ You can't specify target table '表名' for update in FROM clause”解决方法
    SpringMvc的工作原理图
    【Java多线程】Java中的13个原子操作类(十九)
  • 原文地址:https://www.cnblogs.com/mengd/p/14161603.html
Copyright © 2011-2022 走看看