一. MP实现原理

  1. 对象与表一一对应@TableName("item")
  2. 对象的属性与表的字段一一对应@TableField("id") 如果字段名称与属性名称一致,则省略,包含驼峰规则 (@TableId(type = IdType.AUTO)主键自增)
  3. MP将常见的CURD的接口方法进行了封装,只需要Mapper层实现接口BaseMapper<Item>.
  4. MP根据自定的接口,动态的生成CURD的Sql,从此单表操作,程序员无需编辑Sql.

二. 具体配置流程:

 三. 测试:

1) 增

对象不为null的属性自动插入表中对应字段中

    /**
     * 2.测试数据新增入库操作
     * 核心: 以对象的方式操作数据库
     */
    @Test
    public void test02(){
        Item item = new Item();
        item.setTitle("商品标题信息")
            .setSellPoint("卖点信息")
                    .setNum(100);
        itemMapper.insert(item);
    }

2) 删

Mybatis-Plus简述-LMLPHP

3) 改

Mybatis-Plus简述-LMLPHP 

4) 查

①简单查询

    // 查询所有数据
    public void test01(){
        //查询全部数据,不需要条件
        List<Item> list = itemMapper.selectList(null);
    }
    // 查询id=1的数据
    public void test03(){
       Item item = itemMapper.selectById(1);
    }

    /**
     * 查询: 只查询主键信息,
     * 适用场景: 适用关联查询!!!    主键可以被其它的关联
     */
    public void test10(){
        List idList = itemMapper.selectObjs(null);
    }

    /**
     * 4.根据title/sellPoint查询数据
     *   查询titile="手机" and sellPoint="贵就好"
     * 核心:
     *      1.以对象的方式操作数据库.
     *      2.根据对象中不为null的属性,充当条件
     */
    public void test04(){
        //对象的方式封装数据,只能实现and连接
        Item item = new Item();
        item.setTitle("手机").setSellPoint("贵就好");
        //条件构造器: 动态拼接where条件的  set赋值解析之后变为 =号 默认使用and进行拼接
        QueryWrapper<Item> queryWrapper = new QueryWrapper<>(item);
        List<Item> list = itemMapper.selectList(queryWrapper);
    }

    /**
     * 查询 价格大于500,小于200000
     * 1.条件构造器的连接符:
     *      1.等号  =   eq
     *      2.大于  >   gt
     *      3.小于  <   lt
     *      4.大于等于 >=  ge
     *      5.小于等于 <=  le
     *      6.不等于  !=  ne
     *  2.条件间关联用法  默认使用and连接,
     *                  如果使用or,则写or方法
     */
    public void test05(){
       QueryWrapper<Item> queryWrapper = new QueryWrapper<>();
       queryWrapper.gt("price",500)
                   //.or()
                   .lt("price",200000);
       List<Item> list = itemMapper.selectList(queryWrapper);
    }
    // 按照条件查询单条数据
    public void test01(){
       QueryWrapper<Item> queryWrapper = new QueryWrapper<>();
       queryWrapper.gt("price",500)
                   //.or()
                   .lt("price",200000);
       Item item = itemMapper.selectOne(queryWrapper);
    }

    /**
     * 查询: title中包含"华为"的数据
     * Sql: select * from item where title like "%华为%"
     * 知识点:
     *      1. 以xxx开头  "xxx%"  右侧 LikeRight
     *      2. 以xxx结尾  "%xxx"  左侧 likeLeft
     *      3. xxx       "%xxx%" like
     */
    public void test07(){
        QueryWrapper<Item> queryWrapper = new QueryWrapper<>();
        queryWrapper.like("title","华为");
        List<Item> list = itemMapper.selectList(queryWrapper);
    }

    /**
     * 查询: id为 1,2,3,4的数据
     * 必须用引用类型的数组
     * Sql: select * from item where id in (1,2,3,4)
     */
    public void test08(){
        Integer[] ids = {1,2,3,4}; // 不能使用基本类型int
        QueryWrapper<Item> queryWrapper = new QueryWrapper<>();
        queryWrapper.in("id",ids);
        List<Item> list = itemMapper.selectList(queryWrapper);
        //2.API2 数组转化为集合
        List idList = Arrays.asList(ids);
        List<Item> list2 = itemMapper.selectBatchIds(idList);

    }

②复杂查询

    /**
     * 查询价格大于600的商品,并且要求按照 价格降序排列.
     * Sql:select * from item where price>600 order by price desc
     */
    public void test06(){
        QueryWrapper<Item> queryWrapper = new QueryWrapper();
        queryWrapper.gt("price",600)
                    .orderByDesc("price");
        List<Item> list = itemMapper.selectList(queryWrapper);
    }

    /**
     * 查询: 根据对象中不为null的数据,查询数据库
     * 核心知识点: 动态sql拼接
     */
    public void test09(){
       String title = "";
       String sellPoint = "工艺好";
       QueryWrapper<Item> queryWrapper = new QueryWrapper<>();
       queryWrapper.eq(StringUtils.hasLength(title),"title",title);
       queryWrapper.eq(StringUtils.hasLength(sellPoint),"sell_point",sellPoint);

       List<Item> list = itemMapper.selectList(queryWrapper);
    }

③分页查询

    /**
     * 1.获取满足条件的记录总数
     * 2.进行分页操作
     * 原则:
     *      1.手写Sql 业务层级简单,Sql高效直观.
     *      2.利用MP实现  业务层复杂, Sql不写
     *  Sql: select * from item limit 起始位置,条数
     * @param pageResult
     * @return
     */
    @Override
    public PageResult getItemList(PageResult pageResult) {
        QueryWrapper<Item> queryWrapper = new QueryWrapper<>();
        queryWrapper.like("title", pageResult.getQuery());

        //2.完成分页操作
        //2.1 准备一个分页对象,MP基于初始化条件,获取分页其它数据
        IPage<Item> page = new Page<>(pageResult.getPageNum(),
                                      pageResult.getPageSize());
        page = itemMapper.selectPage(page,queryWrapper);

        //2.2 获取总数,获取记录数
        long total = page.getTotal();
        List<Item> list = page.getRecords();

        return pageResult.setTotal(total).setRows(list);
    }

04-02 14:19