My数据库语法

1.用My语法来查询数据库

1.1查询数据库(单)

@Test
public void selectById(){
    int id=231;    //模拟用户参数
    User user=userMapper.selectById(id);//对象
    System.out.println(user);
}

1.2MyBatis语法查询指定name,sex等数据

@Test
public void test001(){
    //条件构造器,根据对象不为null充当where条件
    //通过对象进行封装数据
    User user=new User();
    user.setName("小乔").setSex("女");

    //where name="" and sex=""
    QueryWrapper<User> queryWrapper=new QueryWrapper(user);

    //根据条件构造器,实现查询(唯一用select,多个用selectList)
    List<User> userList=userMapper.selectList(queryWrapper);
    System.out.println(userList);
}

1.3查询有标识符( = eq, >gt, <lt, >=ge, <=le, !=ne)

//查询有< =等标识符
@Test
public void select03(){
    //mybatis写法
    //List<User> userList = userMapper.findList(18,"女");
    //System.out.println(userList);(需要通过xml写SQL数据库)
    //mp写法
    QueryWrapper<User> queryWrapper=new QueryWrapper<>();
    queryWrapper.lt("age", 18)
            .eq("sex", "女");
    List<User> userList2=userMapper.selectList(queryWrapper);
    System.out.println(userList2);
}
   

1.4查询name包含"君"的

  //查询name包含“君”的(以君开头:以like“君%”
    // 以君结尾:liek “%君”)
    @Test
     public void select04(){
        QueryWrapper queryWrapper =new QueryWrapper();
        queryWrapper.like("name", "君");
        List<User> userList = userMapper.selectList(queryWrapper);
        System.out.println(userList);

}

1.5查询结果,按照排序

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

}

1.6查询结果不为null(指定结果)

/根据name/age查询不为null的
//动态数据查询,如果数据有值,则平街where条件
//如果数据为null,则不拼接where条件
@Test
public void select06(){
    String name= "貂蝉";
    int age = 18;
    boolean nameFlag=name ==null ? false : true;
    boolean ageFlag= age == 0 ? false : true;
    QueryWrapper<User> queryWrapper=new QueryWrapper<>();
    queryWrapper.eq(nameFlag, "name", name)
            .eq(ageFlag, "age", age);
    List<User> userList=userMapper.selectList(queryWrapper);
    System.out.println(userList);
}

1.7批量查询

//批量查询,id=1,4,5,6,...的数据
public void selectIn(){
    QueryWrapper<User> queryWrapper=new QueryWrapper<>();
    queryWrapper.in("id", 1,4,5,6);
    queryWrapper.in("id", "1,4,5,6");
    List<User> userList=userMapper.selectList(queryWrapper);
    System.out.println(userList);
//批量查询,利用数组转集合的方式
Integer[] array=new Integer[]{1,4,5,6};
//数组转集合
List<Integer> ids= Arrays.asList(array);
List<User> userList2=userMapper.selectBatchIds(ids);
    System.out.println(userList2);

}

1.8只查询性别为男的用户,但只要id字段

//查询性别为男性的用户,只查询ID字段
@Test
public void selectObjs(){
    QueryWrapper<User> queryWrapper=new QueryWrapper<>();
    queryWrapper.eq("sex", "男");
    List<Object> ids=userMapper.selectObjs(queryWrapper);
    System.out.println(ids);
}

2.查询总结

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

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

拼接规则:根据对象中部位null的属性充当where条件

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

xml文件万能的转义字符:<![CDATA[SQL语句]]>

关键字:like order by in

动态SQL语法:

  conditi:true  拼接where条件

        false  不拼接where条件

3进阶---按级查询

循环查询,多次遍历,数据过多,导致数据库查询次数过多,效率极低

@Override

public List<ItemCat> findItemCatList(Integer leve){

//查询一级商品分类

QuerWrapper<ItemCat> querWrapper = new QuerWrapper<>();

                                 querWrapper.eq("parent_id",0);

List<ItemCat> oneList = itemCatMapper.selectList(querWrapper);

//查询二级商品(需要处理一级商品)

for(ItemCat oneItemCat: oneList){

//为了复用条件构造器,要清空数据

querWrapper.clear();

//查询二级数据    parent_id = 一级id

querWrapper.eq("parent_id",oneLtemCat.getId());

List<ItemCat> twoList = itemCatMapper.selectList(querWrapper);

//遍历耳机列表,查询三级数据,封装

oneletemCat.setChildren(twoList);

}

return oneList;

}

4进阶----按级分配优化

规则:就是遍历数据,如果该类父级不存在,准备list集合,将自己作为第一个元素,

                                     如果该类数据存在,获取list集合,将自己追加到其中。

1.遍历数据for(){}

for(ItemCat in=temCat:list){

    int parentId=itemCat.getParentId();

   if(map.containsKey(parentId)){

     map.get(parentId).add(itemCat);

}else{

      //key不存在时,定义list集合,将自己作为第一个元素

     List<ItemCat> chilrenList = new ArrayList<>();

     childrenList.add(itemCat);

     map.put(parentId,childrenList);

}

}

@Voerride

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值