mybatis-plus 学习总结(1) 条件构造器 高级查询 mp多表查询 service 接口

mybatis_plus

常用注解:

  1. @TableName : 当表名跟实体类名字不一样时, 可以指定映射数据库那张表, 默认跟类名一致

  2. @TableField : 映射表的列名, 也可以在合并sql的时候会自动扫描实体类的字段, 而当需求需要在实体类中创建一些表列名对应不上的字段时, 可以使用, TableField 有个exist属性, 指是否映射表列 false 不映射

  3. @TableId : 主键注解, 一般使用type属性, AUTO 数据库ID自增

    @TableName(value = "t_employee") //当表名跟实体类名字不一样时
    @TableField(exist = false)
    @TableId(type = IdType.AUTO)

日志

//推荐用这种
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

条件构造器

根据输入的条件生成sql的where条件(但不适用于多表查询, 多表查询还是用xml.写)

有4个类

  1. UpdateWrapper

  2. LambdaUpdateWrapper

    见名知意, 这两个都是用于跟新操作

  3. QueryWrapper

  4. LambdaQueryWrapper

两个普通两个Lambda 他们用法基本相同, 普通的条件需要手写, 有手误的可能, Lambda 采用字段, 手误的可能很少

里面的方法
    eq = 等于
    alleq = 都等于
    ne != 不等于
    gt > 大于
    lt < 小于
    ge >= 大于等于
    le <= 小于等于
    between 值1 and 值2
    notBetween not值1 and 值2
    like %值%
    likeLeft : LIKE '%值'
    likeRight : LIKE '值%'
    or 可以用于拼接, 可以用于嵌套
    and 默认用and连接, 可以用于嵌套
    notLike not%值%
    isNull 为NUll
    isNotNull 不为空
    in 值在里面
    notIn 值不在里面
    inSql 写intsql
    notInsql 写notInSql
    groupBy 分组
    orderByAsc 正序
    orderByDesc 降序
    having 设置条件
    
    //UpdateWrapper 和 LambdaUpdateWrapper
    //更新name=dafei员工年龄为20岁
    @Test
    public void update2(){
        /*UpdateWrapper<Employee> wrapper = new UpdateWrapper<>();*/
        /*wrapper.eq("name","dafei").set("age",20);*/
        LambdaUpdateWrapper<Employee> wrapper = new LambdaUpdateWrapper<>();
        wrapper.eq(Employee::getName,"dafei").set(Employee::getAge,20);
        employeeMapper.update(null,wrapper);
    }
​
  //QueryWrapper 和 LambdaQueryWrapper
 //查询name=dafei, age=18的用户
    @Test
    public void queryWrapper(){
        /*QueryWrapper<Employee> wrapper = new QueryWrapper<>();
        wrapper.eq("name","dafei")
                .eq("age",18);
        employeeMapper.selectList(wrapper);*/
        /*HashMap<String, Object> map = new HashMap<>();
        map.put("name","dafei");
        map.put("age",18);
        employeeMapper.selectByMap(map);*/
        LambdaQueryWrapper<Employee> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(Employee::getName,"dafei")
               .eq(Employee::getAge,18);
        employeeMapper.selectList(wrapper);
    }
//书写顺序:
• select->distinct->from->join->on->where->group by->having->order by->limit
​
• 必须字段:select、from
​
• 可选字段:distinct、join、on、where、group by、having、sum、count、max、avg、order by、limit
​
//执行顺序
• from->on->join->where->group by(开始使用select中的别名,后面的语句中都可以使用别名)->sum、count、max、avg->having->select->distinct->order by->limit

高级查询

列投影 可以指定返回查询后的列
        /*QueryWrapper<Employee> wrapper = new QueryWrapper<>();
        wrapper.select("name","age");*/
        LambdaQueryWrapper<Employee> wrapper = new LambdaQueryWrapper<>();
        wrapper.select(Employee::getName,Employee::getAge);
​
        /*QueryWrapper<Employee> wrapper = new QueryWrapper<>();*/
        LambdaQueryWrapper<Employee> wrapper = new LambdaQueryWrapper<>();
        wrapper.select(Employee.class,m->m.getProperty().startsWith("a"));
​
正序 orderByAsc
       /*QueryWrapper<Employee> wrapper = new QueryWrapper<>();
        wrapper.orderByAsc("age").orderByAsc("id");*/
        LambdaQueryWrapper<Employee> wrapper = new LambdaQueryWrapper<>();
        wrapper.orderByAsc(Employee::getAge).orderByAsc(Employee::getId);
​
分组groupBy
     QueryWrapper<Employee> wrapper = new QueryWrapper<>();
        wrapper.groupBy("dept_id")
                .select("dept_id,count(*) count")
                .having("count > 3");
​
or嵌套
      QueryWrapper<Employee> wrapper = new QueryWrapper<>();
        wrapper.like("name", "fei")
                .or(wr -> wr.le("age", 30).ge("age", 18));
​
and嵌套
       QueryWrapper<Employee> wrapper = new QueryWrapper<>();
        wrapper.like("name", "fei")
                .and(wr -> wr.le("age", 30)
                        .or()
                        .ge("age", 18));
​

MP多表查询

还是使用mapper.xml的方式, 清晰明了

Service接口

常用方法:
    getBaseMapper() : 返回引用mapper对象
    getOne(wrapper) : 按指定条件查询一个, 注意如果数据库有超过一个数据报错
    list(wrapper) : 返回list集合
    page(page, wrapper) : 分页
    
    业务层接口继承 IService接口
    public interface IEmployeeService extends IService<Employee> {
    
}   
​
    而业务层实现类 实现ServiceImpl这个类 这个类要传两个参数一个是mapper接口, 一个是对应的实体类
    public class EmployeeServiceImpl extends ServiceImpl<EmployeeMapper, Employee> implements IEmployeeService {
        
}    
​
分页
 public IPage<Employee> queryPage(EmployeeQueryObject qo) {
        IPage<Employee> page = new Page<>(qo.getCurrentPage(),qo.getPageSize());
        QueryWrapper<Employee> wrapper = new QueryWrapper<>();
        //判断是否有传参数
        wrapper.like(StringUtils.hasLength(qo.getKeyword()),"name",qo.getKeyword());
        //调用父类
        return super.page(page,wrapper);
    }
​
事务还是用以前贴注解的方式
    @Transactional

不多废话,觉得有用点点赞三连

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值