最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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)文章

  • Spring Cloud Nacos 和 Eureka區(qū)別解析

    Spring Cloud Nacos 和 Eureka區(qū)別解析

    Spring Cloud Nacos 和 Spring Cloud Eureka 都是 Spring Cloud 微服務(wù)框架中的服務(wù)注冊和發(fā)現(xiàn)組件,用于幫助開發(fā)者輕松地構(gòu)建和管理微服務(wù)應(yīng)用,這篇文章主要介紹了Spring Cloud Nacos 和 Eureka區(qū)別,需要的朋友可以參考下
    2023-08-08
  • Mybatis實現(xiàn)分包定義數(shù)據(jù)庫的原理與過程

    Mybatis實現(xiàn)分包定義數(shù)據(jù)庫的原理與過程

    這篇文章主要給大家介紹了關(guān)于Mybatis實現(xiàn)分包定義數(shù)據(jù)庫的原理與過程,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2022-01-01
  • Java編程中利用InetAddress類確定特殊IP地址的方法

    Java編程中利用InetAddress類確定特殊IP地址的方法

    這篇文章主要介紹了Java編程中利用InetAddress類確定特殊IP地址的方法,InetAddress類是Java網(wǎng)絡(luò)編程中一個相當實用的類,需要的朋友可以參考下
    2015-11-11
  • MybatisX自定義模板方式

    MybatisX自定義模板方式

    本文介紹了如何使用MybatisX插件自定義VO對象模板,并提供了一個簡單的示例,首先,文章展示了如何使用FreeMarker語法編寫模板內(nèi)容,接著,詳細說明了如何配置模板,并通過實際測試驗證了模板的正確性,最后,作者鼓勵大家參考并支持腳本之家
    2025-01-01
  • Java 異常java.lang.NoSuchFieldException解決方案

    Java 異常java.lang.NoSuchFieldException解決方案

    這篇文章主要介紹了Java 異常java.lang.NoSuchFieldException解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • Java設(shè)計模式之抽象工廠模式實例詳解

    Java設(shè)計模式之抽象工廠模式實例詳解

    這篇文章主要介紹了Java設(shè)計模式之抽象工廠模式,結(jié)合實例形式分析了抽象工廠模式的概念、功能、定義與使用方法,需要的朋友可以參考下
    2017-09-09
  • Java獲取當前時間方法總結(jié)

    Java獲取當前時間方法總結(jié)

    本篇文章給大家整理了關(guān)于Java獲取當前時間方法,以及相關(guān)代碼分享,有需要的朋友測試參考下吧。
    2018-02-02
  • java中Memcached的使用實例(包括與Spring整合)

    java中Memcached的使用實例(包括與Spring整合)

    這篇文章主要介紹了java中Memcached的使用實例(包括與Spring整合),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java線程之間通信的幾種方式詳解

    Java線程之間通信的幾種方式詳解

    在 Java 中,線程之間的通信是通過共享內(nèi)存模型來實現(xiàn)的,線程通過共享的對象和變量來交換數(shù)據(jù),為了確保線程間通信的正確性,Java 提供了一系列機制來實現(xiàn)線程安全、同步和通信,以下是常用的幾種線程間通信的方式,以及它們的使用方法和場景,需要的朋友可以參考下
    2025-03-03
  • java壓縮文件與刪除文件的示例代碼

    java壓縮文件與刪除文件的示例代碼

    這篇文章主要介紹了java壓縮文件與刪除文件的示例代碼,代碼簡單易懂,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08

最新評論

铜陵市| 陵川县| 马尔康县| 神农架林区| 贡觉县| 奉贤区| 吉首市| 潼南县| 醴陵市| 武鸣县| 竹溪县| 金寨县| 宁河县| 平乐县| 陈巴尔虎旗| 哈尔滨市| 高邑县| 盘山县| 威宁| 鹤山市| 乌兰察布市| 湟源县| 阳曲县| 永春县| 彭山县| 密云县| 星子县| 凭祥市| 临西县| 吉林市| 巩义市| 留坝县| 鹤庆县| 丹江口市| 崇左市| 茌平县| 海原县| 咸阳市| 柳江县| 灌南县| 许昌市|