目录

静态工具
只有save与update不需要传class字节码
usercontroller:

myserviceimpl:


改造根据id批量查询用户的接口,查询用户的同时,查询出用户对应的所有地址
 @override
    public list<uservo> queryuserandaddressbyids(list<long> ids) {
        //查询用户
        list<user> users = listbyids(ids);
        if (collutil.isempty(users)){
            return collections.emptylist();
        }
        //查询地址
        //获取用户id集合
        list<long> userids = users.stream().map(user::getid).collect(collectors.tolist());
        //根据用户id查询地址
        list<address> address = db.lambdaquery(address.class).in(address::getuserid, userids).list();
        //转换地址vo
        list<addressvo> addressvolist = beanutil.copytolist(address, addressvo.class);
        //用户地址集合分组处理,相同用户的放入一个集合(组)中
        map<long, list<addressvo>> addressmap=new hashmap<>(0);
        if (collutil.isnotempty(addressvolist)) {
            addressmap = addressvolist.stream().collect(collectors.groupingby(addressvo::getuserid));
        }
        //转vo返回
        list<uservo> list=new arraylist<>(users.size());
        for (user user : users) {
            uservo vo = beanutil.copyproperties(user, uservo.class);
            list.add(vo);
            vo.setaddresses(addressmap.get(user.getid()));
        }
        return list;
    } 
 
逻辑删除
mybatisplus提供了逻辑删除功能,无需改变方法调用的方式,而是在底层帮我们自动修改crud的语句。我们要做的就是在application.yaml文件中配置逻辑删除的字段名称和值即可:
mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: deleted #全局逻辑制除的实体字段名,字段类型可以是boolean、integer
      logic-delete-value: 1 #逻辑已删除值(默认为 1)
      logic-not-delete-value: 0 #逻辑未删除值(默认为 0)
 逻辑删除本身也有自己的问题,比如:
 逻辑删除本身也有自己的问题,比如:
- 会导致数据库表垃圾数据越来越多,影响查询效率
- sql中全都需要对逻辑删除字段做判断,影响查询效率
因此,我不太推荐采用逻辑删除功能,如果数据不能删除,可以采用把数据迁移到其它表的办法
枚举处理器
在application.yml中配置全局枚举处理器:
mybatis-plus:
  configuration:
    default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.mybatisenumtypehandler
package com.yjj.mp.enums;
import com.baomidou.mybatisplus.annotation.enumvalue;
import lombok.getter;
@getter
public enum userstatus {
    normal(1, "正常"),
    frozen(2, "冻结"),
    ;
    @enumvalue
    private final int value;
    private final string desc;
    userstatus(int value, string desc) {
        this.value = value;
        this.desc = desc;
    }
}
 
 
将类型改为userstatus枚举类型
 
 
 
可以看到运行程序之后显示的是normal,如果想要看到显示状态的话,就加上jsonvalue注解

 json处理器
json处理器 
 
 
 
写一个userinfo类
package com.yjj.mp.domain.po;
import lombok.allargsconstructor;
import lombok.data;
import lombok.noargsconstructor;
@data
@noargsconstructor
@allargsconstructor(staticname = "of")
public class userinfo {
    private integer age;
    private string intro;
    private string gender;
}
在user类上加上@tablename(value = "user",autoresultmap = true)


然后之前写的测试就要修改了

现在再测试的话
 
 
分页插件
首先,要在配置类中注册mybatisplus的核心插件,同时添加分页插件
mybatisconfig配置类:
package com.yjj.mp.config;
import com.baomidou.mybatisplus.annotation.dbtype;
import com.baomidou.mybatisplus.extension.plugins.mybatisplusinterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.paginationinnerinterceptor;
import org.springframework.context.annotation.bean;
import org.springframework.context.annotation.configuration;
@configuration
public class mybatisconfig {
    @bean
    public mybatisplusinterceptor mybatisplusinterceptor(){
        mybatisplusinterceptor interceptor=new mybatisplusinterceptor();
        //创建分页插件
        paginationinnerinterceptor paginationinnerinterceptor=new paginationinnerinterceptor(dbtype.mysql);
        paginationinnerinterceptor.setmaxlimit(1000l);
        //添加分页插件
        interceptor.addinnerinterceptor(paginationinnerinterceptor);
        return interceptor;
    }
}
测试代码:
 @test
        void testpagequery(){
            int pageno=1,pagesize=10;
            //准备分页条件
            page<user> page = page.of(pageno, pagesize);
            //排序条件
            page.addorder(new orderitem("balance",true));
            page.addorder(new orderitem("id",true));
            page<user> p = myuserservice.page(page);
            //解析
            long total = p.gettotal();
            system.out.println("total ="+total);
            long pages = p.getpages();
            system.out.println("pages ="+pages);
            list<user> users = p.getrecords();
            users.foreach(user -> system.out.println(user));
        }
案例
请求方式 get
请求路径 /users/page
请求参数
"pageno":1
"pagesize": 5,
"sortby":"balance"
"isasc":false,
"name": "jack",
"statub":1
 返回值

 特殊说明
如果排序字段为空,默认按照更新时间排序,排序字段不为空,则按照排序字段排序
controller层:

service接口层
 
 
先写个pagequery,再让userquery继承pagequery
package com.yjj.mp.query;
import cn.hutool.core.util.strutil;
import com.baomidou.mybatisplus.core.metadata.orderitem;
import com.baomidou.mybatisplus.extension.plugins.pagination.page;
import io.swagger.annotations.apimodel;
import io.swagger.annotations.apimodelproperty;
import lombok.data;
@data
@apimodel(description = "分页查询实体")
public class pagequery {
    @apimodelproperty("页码")
    private integer pageno=1;
    @apimodelproperty("页码")
    private integer pagesize=5;
    @apimodelproperty("排序字段")
    private string  sortby;
    @apimodelproperty("是否升序")
    private boolean isasc=true;
    public <t> page<t> tomappage(orderitem ... items){
        //分页查询
        page<t> page = page.of(pageno, pagesize);
        //排序条件
        if (strutil.isnotempty(sortby)) {
            //不为空
            page.addorder(new orderitem(sortby, isasc));
        }else if (items!=null){
            //为空,默认按照更新时间排序
            page.addorder(items);
        }
        return page;
    }
    public <t> page<t> tomappage(string defaultsortby,boolean defaultasc){
        return tomappage(new orderitem(defaultsortby,defaultasc));
    }
    public <t> page<t> tomappagedefaultsortbycreatetime(){
        return tomappage(new orderitem("create_time",false));
    }
    public <t> page<t> tomappagedefaultsortbyupdatetime(){
        return tomappage(new orderitem("update_time",false));
    }
}

pagedto :
package com.yjj.mp.domain.dto;
import cn.hutool.core.bean.beanutil;
import cn.hutool.core.collection.collutil;
import com.baomidou.mybatisplus.extension.plugins.pagination.page;
import io.swagger.annotations.apimodel;
import io.swagger.annotations.apimodelproperty;
import lombok.data;
import java.util.collections;
import java.util.list;
@data
@apimodel(description = "分页结果")
public class pagedto<t> {
    @apimodelproperty("总条数")
    private long total;
    @apimodelproperty("总页数")
    private long pages;
    @apimodelproperty("集合")
    private list<t> list;
    public static <po,vo> pagedto<vo> of(page<po> p,class<vo> clazz){
        pagedto<vo> dto = new pagedto<>();
        //总条数
        dto.settotal(p.gettotal());
        //总页数
        dto.setpages(p.getpages());
        //当前页数据
        list<po> records = p.getrecords();
        if (collutil.isempty(records)){
            dto.setlist(collections.emptylist());
            return dto;
        }
        list<vo> vos = beanutil.copytolist(records, clazz);
        dto.setlist(vos);
        //返回
        return dto;
    }
}
service层:
@override
    public pagedto<uservo> queryuserspage(userquery query) {
        string name = query.getname();
        integer status = query.getstatus();
        //构建查询条件
        page<user> page = query.tomappagedefaultsortbyupdatetime();
        //分页查询
        page<user> p = lambdaquery()
                .like(name != null, user::getusername, name)
                .eq(status != null, user::getstatus, status)
                .page(page);
        //封装vo结果
        return pagedto.of(p,uservo.class);
    }
努力遇见更好的自己!!!

 
             我要评论
我要评论 
                                             
                                             
                                            
发表评论