你是CRUD工程師嗎?使用MP自定義的多表聯合、分頁查詢

超爽的自定義分頁

使用mybatis-plus單表操作十分方便,但是多表聯合查詢感覺又迴歸到xml時代了,當然也有註解@Select直接寫sql的方式,但是xml要更靈活,思路更加清晰一點

你是CRUD工程師嗎?使用MP自定義的多表聯合、分頁查詢

select註解方式

這種寫法對於後面看代碼的人來說有點災難,xml雖然複雜一點但思路清晰很多

接下來我們就開始解決以下問題:

  • 1、多表多條件聯合查詢
  • 2、時間段查詢
  • 3、分頁查詢

其他代碼段採用mybatis-plus代碼生成器配合FreemarkerTemplateEngine完全一鍵生成,擺脫CRUD工程師的噩夢


你是CRUD工程師嗎?使用MP自定義的多表聯合、分頁查詢


關鍵配置:

allowMultiQueries=true,該語句作用如下:

1.可以在sql語句後攜帶分號,實現多語句執行。
2.可以執行批處理,同時發出多個SQL語句。


<code>spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:${DATASOURCE_DBTYPE:mysql}://${DATASOURCE_HOST:*******}:${DATASOURCE_PORT:3306}/test?characterEncoding=UTF-8&useUnicode=true&useSSL=false&allowMultiQueries=true
    username: ${DATASOURCE_USERNAME:*****}
    password: ${DATASOURCE_PASSWORD:******}
mybatis-plus:
  configuration:
    map-underscore-to-camel-case: true
  global-config:
    db-config:
      logic-delete-value: "Y" # 邏輯已刪除值(默認為 Y)
      logic-not-delete-value: "N" # 邏輯未刪除值(默認為 N)
  mapper-locations: classpath:xml/*.xml/<code>


Configuration配置類

<code>import com.baomidou.mybatisplus.core.injector.ISqlInjector;
import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;


@EnableTransactionManagement
@Configuration
@MapperScan("com.springboot.mybatis.mapper")
public class MybatisConfig {
    /**
     * 初使化Mybatis審計字段自動賦值的interceptor
     */
    @Bean
    public ISqlInjector sqlInjector() {
        return new LogicSqlInjector();
    }

    /**
     * 分頁插件
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
}/<code>


關鍵的mapper.xml文件

其中RecordsCount用來做計數使用即total

SQL_CALC_FOUND_ROWS得到分頁數據

resultMap="ResultMap,RecordsCount"結果為查詢列表和計數


<code>
    
    
    
/<code> 


mapper文件

<code>@Repository
@Mapper
public interface TestMapper extends BaseMapper {

    List> findResultByInfo(TestSelect select);
}/<code>

查詢條件實體

<code>@Data
public class TestSelect {

    private String name;

    private String classname;

    private String createdTimeStart;

    private String createdTimeEnd;

    private Integer current;//第幾頁 從1開始

    private Integer size;//每頁幾個數據
}/<code>


分享到:


相關文章: