MybatisPlus与框架间的关系

MybitsPlus

单表查询

查询

1.MP核心: 以对象的方式操作数据库

2.条件构造器: new QueryWrapper<>(); 动态拼接where条件.

queryWraapper.eq()--------eq就是等于号的意思

3.拼接规则: 根据对象中不为null的属性充当where条件.

4.特殊转义字符: = eq, > gt, < lt, >= ge, <= le,!= ne

5.xml文件中的万能的转义字符:

6.关键字: like /order by /  in

7.动态Sql语法:关键字condition
condition: true 拼接where条件
false 不拼接where条件

8.likerigth百分号在右边

9.数组转化为 集合

方式一   in()

  queryWrapper.in("id", 1,2,3,4,5);

List users = userMapper.selectList(queryWrapper);

方式二  数组转化为集合

Integer [] array = new Integer[] {1,2,3,4,5};

List ids = Arrays.asList(array);
List users1 = userMapper.selectBatchIds(ids);

package com.jt;

import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jt.mapper.UserMapper;
import com.jt.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

@SpringBootTest
public class TestMP {

    @Autowired
    private UserMapper userMapper;

    /**
     * 完成数据的入库操作
     * 新增user数据(name="中秋",age=40,sex="厉害")
     * Sql: insert into demo_user value(xx,xx,xx,xx)
     * 思考: MP实现入库流程!!!
     * 选择A: 讲mp入库流程 理论为主.
     */
    @Test
    public void test01(){
        User user = new User();
        user.setName("中秋").setAge(40)
                .setSex("厉害");
        //以对象的方式操作数据!!!
        userMapper.insert(user);
        System.out.println("入库操作成功!!!!");
    }

    /**
     * 以mybatis的方式实现数据库查询
     * 1.实现user入库操作   insert into
     * 2.update  将name="国庆" 改为 name="中秋"
     * 3.delete  将name="国庆"数据删除.
     * 4.select  查询 name="小乔" 并且 性别 ="女"
     * 5.select  查询age < 18岁  性别="女"
     * 6.select  查询  name包含 '君'字的数据
     * 7.select  查询  sex="女"  按照年龄倒序排列.
     * 8.根据 name/sex 不为null的数据查询. 动态Sql!!
     *   name="xxx" sex=null
     *   name="xxx" sex="xx"
     *   name=null  sex=null
     */

    //1.查询ID查询数据库 id=231  主键查询
    @Test
    public void selectById(){
        int id = 231;   //模拟用户参数.
        User user = userMapper.selectById(id);
        System.out.println(user);
    }

    /**
     * 2.查询 name="小乔" 并且 性别 ="女"
     * 思路: 如果将来有多个结果 则使用List进行接收.
     * Sql: select * from demo_user where name="小乔" and sex="女"
     * 注意事项: 默认的连接符  and
     */
    @Test
    public void select01(){
        //1.通过对象封装数据
        User user = new User();
        user.setName("小乔").setSex("女");
        //2.构建条件构造器 根据对象中不为null的属性充当where条件!
        QueryWrapper queryWrapper = new QueryWrapper(user);
        //3.根据条件构造器 实现数据查询
        List userList = userMapper.selectList(queryWrapper);
        System.out.println(userList);
    }

    /**
     * 3.查询 name="小乔" 并且 性别 ="女"
     * 逻辑运算符:  = eq, > gt, < lt
     *            >= ge, <= le
     *            != ne
     */
    @Test
    public void select02(){
        QueryWrapper queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("name","小乔")
                    .eq("sex","女");
        List userList =
                userMapper.selectList(queryWrapper);
        System.out.println(userList);
    }

    /**
     * 4.案例: select  查询age < 18岁  性别="女"
     * 方式1: 利用mybatis方式实现
     * 方式2: 利用MP方式实现
     */
    @Test
    public void select03(){
        //1.mybatis写法
        List userList = userMapper.findList(18,"女");
        System.out.println(userList);

        //2.mp写法
        QueryWrapper queryWrapper = new QueryWrapper<>();
        queryWrapper.lt("age",18)
                        .eq("sex","女");
        List userList2 = userMapper.selectList(queryWrapper);
        System.out.println(userList2);
    }


    /**
     * 5.select  查询  name包含 '君'字的数据
     * 关键字:  like "%xxx%"
     *         以君开头:  likeRight "君%"
     *         以君结尾:  likeLeft  "%君"
     */
    @Test
    public void select04(){
        QueryWrapper queryWrapper = new QueryWrapper();
        queryWrapper.like("name","君");
        List userList = userMapper.selectList(queryWrapper);
        System.out.println(userList);
    }

    /**
     * 6.select  查询  sex="女"  按照年龄倒序排列.
     */
    @Test
    public void select05(){
        QueryWrapper queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("sex","女")
                    .orderByDesc("age");
        List userList = userMapper.selectList(queryWrapper);
        System.out.println(userList);
    }

    /**
     *  7.需求: 动态Sql查询. 如果数据有值 则拼接where条件.
     *                   如果数据为null 则不拼接where条件
     *  语法: condition: true  拼接where条件
     *                  false 不拼接where条件
     */
    @Test
    public void select06(){
        String name = "貂蝉";
        int age = 19;
        boolean nameFlag = name == null ? false : true;
        boolean ageFlag = age == 0 ? false : true;
        QueryWrapper queryWrapper = new QueryWrapper();
        queryWrapper.eq(nameFlag,"name",name)
                    .eq(ageFlag,"age",age);
        List userList = userMapper.selectList(queryWrapper);
        System.out.println(userList);
    }

    /**
     * 8.批量查询  查询id= 1,4,5,6......的数据
     */
    @Test
    public void selectIn(){
        QueryWrapper queryWrapper = new QueryWrapper<>();
        queryWrapper.in("id",1,4,5,6);
        List userList = userMapper.selectList(queryWrapper);
        System.out.println(userList);

        //数组在未来由用户负责传递. 注意使用包装类型
        Integer[] array = new Integer[]{1,4,5,6};
        //数组转化为List集合
        List ids = Arrays.asList(array);
        List userList2 = userMapper.selectBatchIds(ids);
        System.out.println(userList2);
    }

    /**
     * 9.查询性别为男的用户,只查询ID字段
     *  selectObjs(); 只查询第一列字段(主键)
     *  实际用途:  根据业务只需要主键的查询
     */
    @Test
    public void selectObjs(){
        QueryWrapper queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("sex","男");
        List ids = userMapper.selectObjs(queryWrapper);
        System.out.println(ids);
    }
}


 
  


 

更新

1.updatebyId  表示ID只当做where条件

2.将name="中秋节快乐" 改为 name="国庆快乐" age=40 sex="男"
   .update(arg1,arg2)
   arg1: 实体对象 创建对象 用set给定条件的数据
   arg2: updateWrapper 动态拼接where条件

package com.jt;

import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.jt.mapper.UserMapper;
import com.jt.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class TestUpdate {

    @Autowired
    private UserMapper userMapper;

    /**
     * 1.将ID=231的数据 name改为 "xx"
     * Sql: update demo_user set name="xx" where id=231

     */
    @Test
    public void testUpdate(){
        User user = new User();
        user.setId(231).setName("中秋节快乐").setAge(10).setSex("男");
        //byId 表示ID只当作where条件.
        //其它不为null的属性 当作set条件
        userMapper.updateById(user);
    }

    /**
     * 2.将name="中秋节快乐" 改为 name="国庆快乐" age=40 sex="男"
     *  .update(arg1,arg2)
     *   arg1: 实体对象  set条件的数据
     *   arg2: updateWrapper 动态拼接where条件
     */
    @Test
    public void testUpdate2(){
        User user = new User();
        user.setName("国庆快乐").setAge(40).setSex("男");
        UpdateWrapper updateWrapper = new UpdateWrapper<>();
        updateWrapper.eq("name","中秋节快乐");
        userMapper.update(user,updateWrapper);
        System.out.println("更新操作成功!!!!");
    }
}

框架之间的关系

1.SpringBoot (工具/框架的框架)

2.Spring(整合第三方)

3.SpringMVC(实现前后端交互)

4.Mybatis/MP(实现持久化操作)

MybatisPlus与框架间的关系_第1张图片

 完成后端层级代码

        说明:

MVC思想主要的目的实现代码的解耦,根据MVC思想,演化层级代码结构Controller、 Service、Dao(Mapper)。

编码顺序:

                   1、编辑Pojo

                   2、编辑Mapper接口

                   3、编辑Service层

                   4、编辑Controller

MybatisPlus与框架间的关系_第2张图片

你可能感兴趣的:(mybtais,数据库,sql,java)