欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mybatis-plus動態(tài)條件查詢QueryWrapper的使用案例

 更新時間:2022年07月18日 10:41:24   作者:12程序猿  
mybatis-plus框架功能很強大,把很多功能都集成了,下面這篇文章主要給大家介紹了關(guān)于Mybatis-plus動態(tài)條件查詢QueryWrapper的使用教程,文中通過圖文介紹的非常詳細,需要的朋友可以參考下

一、queryWrapper介紹

queryWrapper是mybatis plus中實現(xiàn)查詢的對象封裝操作類,可以封裝sql對象,包括where條件,order by排序,select哪些字段等等,他的層級關(guān)系如下:

Wrapper:條件構(gòu)造抽象類,最頂端父類;

AbstractWrapper:用于查詢條件封裝,生成sql的where條件;

AbstractLambdaWrapper:Lambda語法使用Wrapper統(tǒng)一處理解析lambda獲取column。

LambdaQueryWrapper:用于lambda語法使用的查詢Wrapper;

LambdaUpdateWrapper:Lambda更新封裝Wrapper;

QueryWrapper:Entity對象封裝操作類,不是用lambda;

UpdateWrapper:Update條件封裝,用于Entity對象更新操作。

二、環(huán)境搭建

1.創(chuàng)建數(shù)據(jù)庫表并添加幾條數(shù)據(jù):

CREATE TABLE `t_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用戶id',
  `name` varchar(255) DEFAULT NULL COMMENT '用戶姓名',
  `age` int(2) DEFAULT NULL COMMENT '用戶年齡',
  `email` varchar(255) DEFAULT NULL COMMENT '郵箱',
  `del_flag` int(1) DEFAULT '0' COMMENT '刪除標識 0:正常 1:刪除  默認0',
  `create_time` datetime DEFAULT NULL COMMENT '創(chuàng)建時間',
  `update_time` datetime DEFAULT NULL COMMENT '更新時間',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='用戶表';

數(shù)據(jù)如下:

2.創(chuàng)建Springboot項目

創(chuàng)建Springboot項目,集成mybatis-plus、web、mysql等相關(guān)依賴;搭建基礎(chǔ)的demo操作:

(1)pom.xml:

<!--web-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--熱部署-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
    <optional>true</optional>
</dependency>
<!--mybatis-plus自動的維護了mybatis以及mybatis-spring的依賴,
在springboot中這三者不能同時的出現(xiàn),避免版本的沖突,表示:跳進過這個坑-->
<!--mybatis-plus-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.3</version>
</dependency>
<!--mysql驅(qū)動-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>
<!-- alibaba的druid數(shù)據(jù)庫連接池 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.20</version>
</dependency>
<!-- alibaba的druid數(shù)據(jù)庫連接池 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.20</version>
</dependency>
<!--lombok-->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>
<!--工具類-->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

(2)配置application.yml


# 服務(wù)端口
server:
  port: 8083

# 數(shù)據(jù)源配置
spring:
  datasource:
    name: test
    url: jdbc:mysql://localhost:3306/db_order?&allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSl=false
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource

    ## 配置連接池信息
    ## 初始化大小,最小,最大
    initialSize: 5
    minIdle: 5
    maxActive: 30
    ## 配置獲取連接等待超時的時間
    maxWait: 60000
    # 配置間隔多久才進行一次檢測,檢測需要關(guān)閉的空閑連接,單位是毫秒
    timeBetweenEvictionRunsMillis: 60000
    # 配置一個連接在池中最小生存的時間,單位是毫秒
    minEvictableIdleTimeMillis: 300000
    validationQuery: SELECT 1 FROM DUAL
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    poolPreparedStatements: true
    maxPoolPreparedStatementPerConnectionSize: 20
    # 配置監(jiān)控統(tǒng)計攔截的filters,去掉后監(jiān)控界面sql無法統(tǒng)計,'wall'用于防火墻
    filters: stat,wall
    # 通過connectProperties屬性來打開mergeSql功能;慢SQL記錄
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000

    # 超過時間限制是否回收
    removeAbandoned: true
    # 超時時間;單位為秒。180秒=3分鐘
    removeAbandonedTimeout: 180
    # 關(guān)閉abanded連接時輸出錯誤日志
    logAbandoned: true

# mybatis-plus 默認掃描mapper.xml的目錄
mybatis-plus:
  mapper-locations: classpath*:/mapper/*.xml
  #配置sql打印日志
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

(3)創(chuàng)建一個實體類:

/**
 * @author qzz
 */
@Data
@TableName("t_user")
public class User implements Serializable {
    private  static final long serialVersionUID = 1L;

    /**
     * 用戶id
     */
    @TableId(value="id", type = IdType.AUTO)
    private Integer id;
    /**
     * 名稱
     */
    @TableField("name")
    private String name;

    /**
     * 年齡
     */
    @TableField("age")
    private Integer age;

    /**
     * 刪除標識 0:正常 1:刪除  默認0
     */
    @TableField("del_flag")
    private Integer del_flag;

    /**
     * 郵箱
     */
    @TableField("email")
    private String email;

    /**
     * 創(chuàng)建時間
     */
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private Date create_time;

    /**
     * 修改時間
     */
    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
    private Date update_time;
}

(4)編寫一個mapper接口,只需繼承BaseMapper,基本的單表查詢都給你封裝好了。

/**
 * @author qzz
 */
@Repository
public interface UserMapper extends BaseMapper<User> {
}

三、queryWrapper示例

官網(wǎng)上可以看到有很多條件構(gòu)造器,下面將使用幾個常用的作為示例進行使用,其實本質(zhì)還是sql語句,如果想要打印sql日志,可以在application.yml文件中進行如下的配置:

mybatis-plus:
  #配置sql打印日志
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

Wrapper是一個接口,官方提供了很多的實現(xiàn)類,我們通過其實現(xiàn)類去構(gòu)造wrapper對象即可。

1.案例一:根據(jù)name模糊查看未刪除的用戶列表信息

過濾條件:

  • name 用戶名稱 ,模糊查看
  • del_flag = 0
  • 按照create_time創(chuàng)建時間降序

sql實現(xiàn):

select * from t_user
where del_flag = 0
<if test ="name!=null and ''!=name">
    and name like concat('%',#{name},'%')
</if>
order by create_time desc

queryWrapper實現(xiàn):

    /**
     * 案例一:根據(jù)name模糊查看未刪除的用戶列表信息
     * @param name
     * @return
     */
    @RequestMapping("/list")
    public Map<String,Object> getList(@RequestParam String name){
        Map<String,Object> result = new HashMap<>();

 		//構(gòu)建一個查詢的wrapper
        QueryWrapper<User> wrapper = new QueryWrapper<User>();
        //name不為空時,組裝模糊查詢條件
        wrapper.like(StringUtils.isNotBlank(name),"name",name);
        //未刪除
        wrapper.eq("del_flag",0);
        //創(chuàng)建時間降序
        wrapper.orderByDesc("create_time");

        List<User> list = userMapper.selectList(wrapper);
        result.put("data",list);
        return result;
    }

啟動項目,運行接口http://localhost:8083/user/list?name=小測試,控制臺sql如下:

2.案例二:查看姓李的并且郵箱不為空的用戶列表

sql實現(xiàn):

select * from t_user
where del_flag = 0
and name like concat('李','%')
and email is not null
order by create_time desc

queryWrapper實現(xiàn):

    /**
     * 案例二:查看姓張的并且郵箱不為空的用戶列表
     * @return
     */
    @RequestMapping("/list2")
    public Map<String,Object> getList2(){
        Map<String,Object> result = new HashMap<>();

        //構(gòu)建一個查詢的wrapper
        QueryWrapper<User> wrapper = new QueryWrapper<User>();
        //姓張的
        wrapper.likeRight("name","張");
        //郵箱不為空
        wrapper.isNotNull("email");
        //未刪除
        wrapper.eq("del_flag",0);
        //創(chuàng)建時間降序
        wrapper.orderByDesc("create_time");

        List<User> list = userMapper.selectList(wrapper);
        result.put("data",list);
        return result;
    }

控制臺結(jié)果:

3.案例三:年齡范圍查詢(20-30之間的)

sql實現(xiàn):

select * from t_user
where del_flag=0
and age between 20 and 30
order by create_time desc

queryWrapper實現(xiàn):

    /**
     * 案例三:年齡范圍查詢(20-30之間的)
     * @return
     */
    @RequestMapping("/list3")
    public Map<String,Object> getList3(){
        Map<String,Object> result = new HashMap<>();

        //構(gòu)建一個查詢的wrapper
        QueryWrapper<User> wrapper = new QueryWrapper<User>();
        //年齡20-30之間的
        wrapper.between("age",20,30);
        //未刪除
        wrapper.eq("del_flag",0);
        //創(chuàng)建時間降序
        wrapper.orderByDesc("create_time");

        List<User> list = userMapper.selectList(wrapper);
        result.put("data",list);
        return result;
    }

控制臺結(jié)果:

4.案例四:根據(jù)createTime查看當日的用戶列表

sql實現(xiàn):

select * from t_user
where del_flag=0
and DATE(create_time) = STR_TO_DATE('2021-08-13','%Y-%m-%d') 
order by create_time desc

queryWrapper實現(xiàn):

    /**
     * 案例四:根據(jù)createTime查看當日的用戶列表
     * @return
     */
    @RequestMapping("/list4")
    public Map<String,Object> getList4(@RequestParam String createTime){
        Map<String,Object> result = new HashMap<>();

        //構(gòu)建一個查詢的wrapper
        QueryWrapper<User> wrapper = new QueryWrapper<User>();
        //查詢條件為創(chuàng)建時間
        wrapper.apply(StringUtils.isNotBlank(createTime),"DATE(create_time) = STR_TO_DATE('"+createTime+"','%Y-%m-%d')");
        //未刪除
        wrapper.eq("del_flag",0);
        //創(chuàng)建時間降序
        wrapper.orderByDesc("create_time");

        List<User> list = userMapper.selectList(wrapper);
        result.put("data",list);
        return result;
    }

控制臺結(jié)果:

5.案例五:查看某個時間段內(nèi)的用戶列表

sql實現(xiàn):

select * from t_user
where del_flag=0
and DATE(create_time) >= STR_TO_DATE('2021-08-01','%Y-%m-%d') 
AND DATE(create_time) <= STR_TO_DATE('2021-08-13','%Y-%m-%d')
order by create_time desc

queryWrapper實現(xiàn):

    /**
     * 案例五:查看某個時間段內(nèi)的用戶列表
     * @return
     */
    @RequestMapping("/list5")
    public Map<String,Object> getList5(@RequestParam String startTime,@RequestParam String endTime){
        Map<String,Object> result = new HashMap<>();

        //構(gòu)建一個查詢的wrapper
        QueryWrapper<User> wrapper = new QueryWrapper<User>();
        //查詢條件為創(chuàng)建時間
        wrapper.apply(StringUtils.isNotBlank(startTime),"DATE(create_time) >= STR_TO_DATE('"+startTime+"','%Y-%m-%d')");
        wrapper.apply(StringUtils.isNotBlank(endTime),"DATE(create_time) <= STR_TO_DATE('"+endTime+"','%Y-%m-%d')");
        //未刪除
        wrapper.eq("del_flag",0);
        //創(chuàng)建時間降序
        wrapper.orderByDesc("create_time");

        List<User> list = userMapper.selectList(wrapper);
        result.put("data",list);
        return result;
    }

控制臺結(jié)果:

6.案例六:查詢姓李的并且郵箱不為空或者是年齡大于16的用戶

sql實現(xiàn):

select * from t_user
where del_flag=0
and name like concat('李','%')
and (email is not null or age>16)
order by create_time desc

queryWrapper實現(xiàn):
and方法嵌套使用

    /**
     * 案例六:查詢姓李的并且郵箱不為空或者是年齡大于16的用戶
     * @return
     */
    @RequestMapping("/list6")
    public Map<String,Object> getList6(){
        Map<String,Object> result = new HashMap<>();

        //構(gòu)建一個查詢的wrapper
        QueryWrapper<User> wrapper = new QueryWrapper<User>();
        //and方法嵌套
        wrapper.likeRight("name","李").and(
                userQueryWrapper -> userQueryWrapper.isNotNull("email")
                .or().lt("age",16)
        );
        //未刪除
        wrapper.eq("del_flag",0);
        //創(chuàng)建時間降序
        wrapper.orderByDesc("create_time");

        List<User> list = userMapper.selectList(wrapper);
        result.put("data",list);
        return result;
    }

控制臺結(jié)果:

7.案例七:查詢id為1,2,3的用戶列表信息

sql實現(xiàn):

select * from t_user
where del_flag=0
and id in(1,2,3)
order by create_time desc

queryWrapper實現(xiàn):

    /**
     * 案例七:根據(jù)ids查看用戶列表信息
     * @return
     */
    @RequestMapping("/list7")
    public Map<String,Object> getList7(@RequestParam String ids){
        Map<String,Object> result = new HashMap<>();

        //構(gòu)建一個查詢的wrapper
        QueryWrapper<User> wrapper = new QueryWrapper<User>();

        if(StringUtils.isNotBlank(ids)){
            //字符串轉(zhuǎn)數(shù)組再轉(zhuǎn)List
            Collection<String> collection = Arrays.asList(ids.split(","));
            //in方法
            wrapper.in(collection.size()>0,"id",collection);
        }

        //未刪除
        wrapper.eq("del_flag",0);
        //創(chuàng)建時間降序
        wrapper.orderByDesc("create_time");

        List<User> list = userMapper.selectList(wrapper);
        result.put("data",list);
        return result;
    }

控制臺結(jié)果:

四、示例源碼

可點擊此處下載!

本文介紹就到這里了,感興趣的小伙伴可以自行測試哦。

總結(jié)

到此這篇關(guān)于Mybatis-plus動態(tài)條件查詢QueryWrapper使用的文章就介紹到這了,更多相關(guān)Mybatis-plus動態(tài)條件查詢QueryWrapper內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot集成nacos的配置方法

    springboot集成nacos的配置方法

    這篇文章主要介紹了springboot集成nacos的配置方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • SpringBoot程序加密保護代碼不被反編譯

    SpringBoot程序加密保護代碼不被反編譯

    在Java開發(fā)中,保護代碼不被反編譯是非常重要的,尤其是涉及核心業(yè)務(wù)邏輯或關(guān)鍵技術(shù)時,常用的反編譯工具如 jadx 可以輕松將 Java 字節(jié)碼還原成可讀的源代碼,本文將介紹如何通過加密和混淆技術(shù),在SpringBoot程序中實現(xiàn)反編譯保護
    2024-12-12
  • Java基礎(chǔ)教程_判斷語句if else

    Java基礎(chǔ)教程_判斷語句if else

    下面小編就為大家?guī)硪黄狫ava基礎(chǔ)教程_判斷語句if else。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • Java如何使用Jetty實現(xiàn)嵌入式的Servlet容器

    Java如何使用Jetty實現(xiàn)嵌入式的Servlet容器

    這篇文章主要介紹了Java使用Jetty實現(xiàn)嵌入式的Servlet容器,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,下面我們來一起了解一下吧
    2019-06-06
  • 詳解HandlerInterceptor處理器攔截器的用法

    詳解HandlerInterceptor處理器攔截器的用法

    這篇文章主要介紹了HandlerInterceptor處理器攔截器的用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • springboot項目接入天貓精靈語音功能

    springboot項目接入天貓精靈語音功能

    小編最近接手一個項目,涉及到天貓精靈的語音功能,今天小編通過本文給大家分享下springboot項目接入天貓精靈語音功能的詳細過程及實例代碼,感興趣的朋友跟隨小編一起看看吧
    2021-12-12
  • Java 合并多個MP4視頻文件

    Java 合并多個MP4視頻文件

    這篇文章主要介紹了Java 合并多個MP4視頻文件的方法,幫助大家利用Java處理視頻,提高辦公效率,感興趣的朋友可以了解下
    2020-11-11
  • MybatisPlus為何可以不用@MapperScan詳解

    MybatisPlus為何可以不用@MapperScan詳解

    這篇文章主要給大家介紹了關(guān)于MybatisPlus為何可以不用@MapperScan的相關(guān)資料,文中通過圖文介紹的非常詳細,對大家學習或者使用MybatisPlus具有一定的參考學習價值,需要的朋友可以參考下
    2023-04-04
  • RabbitMQ 3.9.7 鏡像模式集群與Springboot 2.5.5 整合

    RabbitMQ 3.9.7 鏡像模式集群與Springboot 2.5.5 整合

    今天我們來聊聊 RabbitMQ 3.9.7 鏡像模式集群與Springboot 2.5.5 整合,本文通過實例代碼給大家介紹的非常詳細,需要的朋友參考下吧
    2021-10-10
  • springboot實現(xiàn)基于aop的切面日志

    springboot實現(xiàn)基于aop的切面日志

    這篇文章主要為大家詳細介紹了springboot實現(xiàn)基于aop的切面日志,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-09-09

最新評論