<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
queryWrapper是mybatis plus中實現查詢的物件封裝操作類,可以封裝sql物件,包括where條件,order by排序,select哪些欄位等等,他的層級關係如下:
Wrapper:條件構造抽象類,最頂端父類別;
AbstractWrapper:用於查詢條件封裝,生成sql的where條件;
AbstractLambdaWrapper:Lambda語法使用Wrapper統一處理解析lambda獲取column。
LambdaQueryWrapper:用於lambda語法使用的查詢Wrapper;
LambdaUpdateWrapper:Lambda更新封裝Wrapper;
QueryWrapper:Entity物件封裝操作類,不是用lambda;
UpdateWrapper:Update條件封裝,用於Entity物件更新操作。
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 '建立時間', `update_time` datetime DEFAULT NULL COMMENT '更新時間', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='使用者表';
資料如下:
建立Springboot專案,整合mybatis-plus、web、mysql等相關依賴;搭建基礎的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中這三者不能同時的出現,避免版本的衝突,表示:跳進過這個坑--> <!--mybatis-plus--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.3</version> </dependency> <!--mysql驅動--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <!-- alibaba的druid資料庫連線池 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.20</version> </dependency> <!-- alibaba的druid資料庫連線池 --> <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
# 伺服器埠 server: port: 8083 # 資料來源設定 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 # 設定間隔多久才進行一次檢測,檢測需要關閉的空閒連線,單位是毫秒 timeBetweenEvictionRunsMillis: 60000 # 設定一個連線在池中最小生存的時間,單位是毫秒 minEvictableIdleTimeMillis: 300000 validationQuery: SELECT 1 FROM DUAL testWhileIdle: true testOnBorrow: false testOnReturn: false poolPreparedStatements: true maxPoolPreparedStatementPerConnectionSize: 20 # 設定監控統計攔截的filters,去掉後監控介面sql無法統計,'wall'用於防火牆 filters: stat,wall # 通過connectProperties屬性來開啟mergeSql功能;慢SQL記錄 connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 # 超過時間限制是否回收 removeAbandoned: true # 超時時間;單位為秒。180秒=3分鐘 removeAbandonedTimeout: 180 # 關閉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)建立一個實體類:
/** * @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; /** * 建立時間 */ @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> { }
官網上可以看到有很多條件構造器,下面將使用幾個常用的作為範例進行使用,其實本質還是sql語句,如果想要列印sql紀錄檔,可以在application.yml檔案中進行如下的設定:
mybatis-plus: #設定sql列印紀錄檔 configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
Wrapper是一個介面,官方提供了很多的實現類,我們通過其實現類去構造wrapper物件即可。
過濾條件:
sql實現:
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實現:
/** * 案例一:根據name模糊檢視未刪除的使用者列表資訊 * @param name * @return */ @RequestMapping("/list") public Map<String,Object> getList(@RequestParam String name){ Map<String,Object> result = new HashMap<>(); //構建一個查詢的wrapper QueryWrapper<User> wrapper = new QueryWrapper<User>(); //name不為空時,組裝模糊查詢條件 wrapper.like(StringUtils.isNotBlank(name),"name",name); //未刪除 wrapper.eq("del_flag",0); //建立時間降序 wrapper.orderByDesc("create_time"); List<User> list = userMapper.selectList(wrapper); result.put("data",list); return result; }
啟動專案,執行介面http://localhost:8083/user/list?name=小
測試,控制檯sql如下:
sql實現:
select * from t_user where del_flag = 0 and name like concat('李','%') and email is not null order by create_time desc
queryWrapper實現:
/** * 案例二:檢視姓張的並且郵箱不為空的使用者列表 * @return */ @RequestMapping("/list2") public Map<String,Object> getList2(){ Map<String,Object> result = new HashMap<>(); //構建一個查詢的wrapper QueryWrapper<User> wrapper = new QueryWrapper<User>(); //姓張的 wrapper.likeRight("name","張"); //郵箱不為空 wrapper.isNotNull("email"); //未刪除 wrapper.eq("del_flag",0); //建立時間降序 wrapper.orderByDesc("create_time"); List<User> list = userMapper.selectList(wrapper); result.put("data",list); return result; }
控制檯結果:
sql實現:
select * from t_user where del_flag=0 and age between 20 and 30 order by create_time desc
queryWrapper實現:
/** * 案例三:年齡範圍查詢(20-30之間的) * @return */ @RequestMapping("/list3") public Map<String,Object> getList3(){ Map<String,Object> result = new HashMap<>(); //構建一個查詢的wrapper QueryWrapper<User> wrapper = new QueryWrapper<User>(); //年齡20-30之間的 wrapper.between("age",20,30); //未刪除 wrapper.eq("del_flag",0); //建立時間降序 wrapper.orderByDesc("create_time"); List<User> list = userMapper.selectList(wrapper); result.put("data",list); return result; }
控制檯結果:
sql實現:
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實現:
/** * 案例四:根據createTime檢視當日的使用者列表 * @return */ @RequestMapping("/list4") public Map<String,Object> getList4(@RequestParam String createTime){ Map<String,Object> result = new HashMap<>(); //構建一個查詢的wrapper QueryWrapper<User> wrapper = new QueryWrapper<User>(); //查詢條件為建立時間 wrapper.apply(StringUtils.isNotBlank(createTime),"DATE(create_time) = STR_TO_DATE('"+createTime+"','%Y-%m-%d')"); //未刪除 wrapper.eq("del_flag",0); //建立時間降序 wrapper.orderByDesc("create_time"); List<User> list = userMapper.selectList(wrapper); result.put("data",list); return result; }
控制檯結果:
sql實現:
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實現:
/** * 案例五:檢視某個時間段內的使用者列表 * @return */ @RequestMapping("/list5") public Map<String,Object> getList5(@RequestParam String startTime,@RequestParam String endTime){ Map<String,Object> result = new HashMap<>(); //構建一個查詢的wrapper QueryWrapper<User> wrapper = new QueryWrapper<User>(); //查詢條件為建立時間 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); //建立時間降序 wrapper.orderByDesc("create_time"); List<User> list = userMapper.selectList(wrapper); result.put("data",list); return result; }
控制檯結果:
sql實現:
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實現:and方法巢狀使用
/** * 案例六:查詢姓李的並且郵箱不為空或者是年齡大於16的使用者 * @return */ @RequestMapping("/list6") public Map<String,Object> getList6(){ Map<String,Object> result = new HashMap<>(); //構建一個查詢的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); //建立時間降序 wrapper.orderByDesc("create_time"); List<User> list = userMapper.selectList(wrapper); result.put("data",list); return result; }
控制檯結果:
sql實現:
select * from t_user where del_flag=0 and id in(1,2,3) order by create_time desc
queryWrapper實現:
/** * 案例七:根據ids檢視使用者列表資訊 * @return */ @RequestMapping("/list7") public Map<String,Object> getList7(@RequestParam String ids){ Map<String,Object> result = new HashMap<>(); //構建一個查詢的wrapper QueryWrapper<User> wrapper = new QueryWrapper<User>(); if(StringUtils.isNotBlank(ids)){ //字串轉陣列再轉List Collection<String> collection = Arrays.asList(ids.split(",")); //in方法 wrapper.in(collection.size()>0,"id",collection); } //未刪除 wrapper.eq("del_flag",0); //建立時間降序 wrapper.orderByDesc("create_time"); List<User> list = userMapper.selectList(wrapper); result.put("data",list); return result; }
控制檯結果:
可點選此處下載!
本文介紹就到這裡了,感興趣的小夥伴可以自行測試哦。
到此這篇關於Mybatis-plus動態條件查詢QueryWrapper使用的文章就介紹到這了,更多相關Mybatis-plus動態條件查詢QueryWrapper內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45