zoukankan      html  css  js  c++  java
  • Mybatis Plus 使用详解

    Mybatis Plus 是Mybatis的增强插件,对数据库操作Mybatis Plus提供了抽象层次比Mybatis更高的操作方法。

    Wrapper是Mybatis Plus里拼接sql的包装类。具体的各种查询功能可以查看Mybatis Plus 条件构造器官方文档

    一、自定义查询字段

    EntityWrapper 的setSqlSelect可以定义需要查询的库表字段。但是很多时候我们查询的数据可能来自不同的表,我们这时候可能需要用到子查询,那么这时候该怎么使用EntityWrapper 呢?

    答案是直接写在setSqlSelect里面。例

     Wrapper<Res> ew = new EntityWrapper<>();
            ew.eq("deleted", 0);
            ew.setSqlSelect("*", "(select name from res_type where id=res_type_id) as res_type_name", 
                            "(select name from probe where id=probe_id) as probe_name");
    

    二、条件查询

    一个很常见的场景是查询某字段的时候如果值不为空则查询,否则不查询。Mybatis Plus的拼接sql方法有一个条件拼接。

    ew.eq(boolean condition,String column,Object params)

    public List<Person> findPersonList(String age,String gender){
    	Wrapper<Res> ew = new EntityWrapper<>();
    	ew.eq(!"".equals(gender),"gender", 0);
    	ew.eq(!"".equals(age),"age",age);
    }
    

    条件拼接sql的源码如下:

     public Wrapper<T> and(boolean condition, String sqlAnd, Object... params) {
            if (condition) {
                ((SqlPlus)this.sql.AND()).WHERE(this.formatSql(sqlAnd, params));
            }
    
            return this;
        }
    

    我们可以看到是只有条件为true的情况下才拼接sql,否则是不会拼接的。绝大部分Mybatis Plus的操作都支持条件的查询。这样可以节省大量的代码。

    三、分页查询

    Mybatis Plus分页查询的重点在于Page这个包装类。

    1. Wrapper查询方式分页

    Controller层我们先构建一个Page包装类,这个包装类的类型应该跟你需要分页的数据类型是一致。例如我们希望返回一个List<Map<String,Object>>格式的数据,我们需要构建一个Page<Map<String,Object>>的page类。

    /* 设置页大小,当前页,排序字段,排序方式是否是asc */
    Page<Map<String, Object>> page = new Page<>(currentPage, pageSize, "update_time" , false);
    Map<String, Object> condition = Maps.newHashMap();
    condition.put("age", 23);
    /* 如果有查询参数,我们可以放到condition里面去,然后在Service里面获取条件再进行查询*/
    page.setCondition(condition);
    /* 把分页查询的数据放入records,Mybatis Plus会自动查询出总数据量*/
    page.setRecords(this.dataService.findPageData(page));
    

    先new一个page包装类。如果有查询参数,我们可以放到condition里面去,然后在Service里面获取条件再进行查询。注意,把分页查询的数据放入records,Mybatis Plus会自动查询出总数据量,无需再用sql查询总个数之后setTotal。具体的查询我们可以放在Service里面编写。

     public List<Map<String, Object>> findPageData(Page<Map<String, Object>> page) {
            Wrapper<Res> ew = new EntityWrapper<>();
            ew.ge("age", 23);
         	ew.eq("gender",1)
            return baseMapper.selectMapsPage(page, ew);
        }
    

    2.自定义sql方式

    如果你的sql语句比较特殊,需要自己写sql的话。你的分页可以写到mapper里,或者mapping.xml里面。

    public interface PersonMapper{
     	@Select("select * from person where gender=${gender} oder by age")
        List<Person> selectPersonList(Pagination page, @Param("gender") String gender);
    }
    

    Service里面直接调用mapper里的方法,如果条件比较复杂,则使用page中的condition来获取字段。

     public Page<Person> getTestData(Page<Person> page,String gender){
            return page.setRecords(this.baseMapper.selectPersonList(page,gender));
     }
    

    Controller里调用Service,相比于上一种方法这个方法简化了Controller层的部分代码。

    /* 设置页大小,当前页,排序字段,排序方式是否是asc */
    Page<Person> page = new Page<>(currentPage, pageSize);
    page.setCondition(condition);
    return this.dataService.getTestData(page,"1");
    
  • 相关阅读:
    夺命雷公狗—玩转SEO---50---让页面更好的被搜索引擎发现,自动推送篇
    夺命雷公狗—玩转SEO---49---让页面更好的被搜索引擎发现,主动推送篇
    夺命雷公狗—玩转SEO---48---让页面更好的被搜索引擎发现,外链篇
    夺命雷公狗—玩转SEO---47---让页面更好的被搜索引擎发现,网站地图篇
    夺命雷公狗—玩转SEO---46---浅谈搜索引擎
    夺命雷公狗—玩转SEO---45---浅入批量获得高频词
    夺命雷公狗—玩转SEO---44---外链群发原理
    夺命雷公狗—玩转SEO---43---外链提升网站权重
    夺命雷公狗—玩转SEO---42---快速交换友情链接
    夺命雷公狗—玩转SEO---41---H1标签的玩法
  • 原文地址:https://www.cnblogs.com/rever/p/10833596.html
Copyright © 2011-2022 走看看