MyBatis-Plus(簡稱MP)是MyBatis的增強工具,在MyBatis的基礎上只做增強不做改變,簡化開發、提高效率。QueryWrapper是MyBatis-Plus中用于構建查詢條件的核心類之一,它提供了豐富的API來構建復雜的SQL查詢條件。本文將詳細介紹QueryWrapper的使用方法,幫助開發者更好地利用MyBatis-Plus進行數據庫操作。
QueryWrapper是MyBatis-Plus中用于構建查詢條件的類,它繼承自AbstractWrapper,提供了豐富的API來構建SQL查詢條件。通過QueryWrapper,開發者可以方便地構建各種復雜的查詢條件,而不需要手動編寫SQL語句。
eq
方法用于構建等于條件,即column = value
。
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "張三");
List<User> userList = userMapper.selectList(queryWrapper);
ne
方法用于構建不等于條件,即column != value
。
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.ne("name", "張三");
List<User> userList = userMapper.selectList(queryWrapper);
gt
方法用于構建大于條件,即column > value
。
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.gt("age", 18);
List<User> userList = userMapper.selectList(queryWrapper);
ge
方法用于構建大于等于條件,即column >= value
。
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.ge("age", 18);
List<User> userList = userMapper.selectList(queryWrapper);
lt
方法用于構建小于條件,即column < value
。
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.lt("age", 18);
List<User> userList = userMapper.selectList(queryWrapper);
le
方法用于構建小于等于條件,即column <= value
。
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.le("age", 18);
List<User> userList = userMapper.selectList(queryWrapper);
between
方法用于構建區間條件,即column BETWEEN value1 AND value2
。
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.between("age", 18, 30);
List<User> userList = userMapper.selectList(queryWrapper);
notBetween
方法用于構建不在區間內的條件,即column NOT BETWEEN value1 AND value2
。
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.notBetween("age", 18, 30);
List<User> userList = userMapper.selectList(queryWrapper);
like
方法用于構建模糊查詢條件,即column LIKE '%value%'
。
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like("name", "張");
List<User> userList = userMapper.selectList(queryWrapper);
notLike
方法用于構建不包含的模糊查詢條件,即column NOT LIKE '%value%'
。
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.notLike("name", "張");
List<User> userList = userMapper.selectList(queryWrapper);
likeLeft
方法用于構建左模糊查詢條件,即column LIKE '%value'
。
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.likeLeft("name", "三");
List<User> userList = userMapper.selectList(queryWrapper);
likeRight
方法用于構建右模糊查詢條件,即column LIKE 'value%'
。
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.likeRight("name", "張");
List<User> userList = userMapper.selectList(queryWrapper);
isNull
方法用于構建為空的條件,即column IS NULL
。
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.isNull("email");
List<User> userList = userMapper.selectList(queryWrapper);
isNotNull
方法用于構建不為空的條件,即column IS NOT NULL
。
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.isNotNull("email");
List<User> userList = userMapper.selectList(queryWrapper);
in
方法用于構建在某個集合內的條件,即column IN (value1, value2, ...)
。
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.in("age", Arrays.asList(18, 20, 22));
List<User> userList = userMapper.selectList(queryWrapper);
notIn
方法用于構建不在某個集合內的條件,即column NOT IN (value1, value2, ...)
。
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.notIn("age", Arrays.asList(18, 20, 22));
List<User> userList = userMapper.selectList(queryWrapper);
inSql
方法用于構建子查詢條件,即column IN (sql)
。
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.inSql("id", "select id from user where age > 18");
List<User> userList = userMapper.selectList(queryWrapper);
notInSql
方法用于構建不在子查詢結果中的條件,即column NOT IN (sql)
。
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.notInSql("id", "select id from user where age > 18");
List<User> userList = userMapper.selectList(queryWrapper);
groupBy
方法用于構建分組條件,即GROUP BY column
。
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.groupBy("age");
List<User> userList = userMapper.selectList(queryWrapper);
orderByAsc
方法用于構建升序排序條件,即ORDER BY column ASC
。
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.orderByAsc("age");
List<User> userList = userMapper.selectList(queryWrapper);
orderByDesc
方法用于構建降序排序條件,即ORDER BY column DESC
。
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.orderByDesc("age");
List<User> userList = userMapper.selectList(queryWrapper);
having
方法用于構建分組后的過濾條件,即HAVING condition
。
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.groupBy("age").having("count(age) > 1");
List<User> userList = userMapper.selectList(queryWrapper);
and
方法用于構建AND連接的條件,即condition1 AND condition2
。
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "張三").and(wrapper -> wrapper.gt("age", 18).lt("age", 30));
List<User> userList = userMapper.selectList(queryWrapper);
or
方法用于構建OR連接的條件,即condition1 OR condition2
。
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "張三").or().eq("name", "李四");
List<User> userList = userMapper.selectList(queryWrapper);
nested
方法用于構建嵌套條件,即(condition)
。
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.nested(wrapper -> wrapper.eq("name", "張三").or().eq("name", "李四"));
List<User> userList = userMapper.selectList(queryWrapper);
apply
方法用于構建自定義SQL片段,即SQL片段
。
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.apply("date_format(create_time, '%Y-%m-%d') = '2023-10-01'");
List<User> userList = userMapper.selectList(queryWrapper);
exists
方法用于構建存在子查詢的條件,即EXISTS (sql)
。
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.exists("select 1 from user where age > 18");
List<User> userList = userMapper.selectList(queryWrapper);
notExists
方法用于構建不存在子查詢的條件,即NOT EXISTS (sql)
。
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.notExists("select 1 from user where age > 18");
List<User> userList = userMapper.selectList(queryWrapper);
last
方法用于在SQL語句的最后添加自定義SQL片段,即SQL片段
。
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.last("limit 10");
List<User> userList = userMapper.selectList(queryWrapper);
QueryWrapper支持鏈式調用,可以在一行代碼中構建復雜的查詢條件。
List<User> userList = userMapper.selectList(new QueryWrapper<User>()
.eq("name", "張三")
.gt("age", 18)
.lt("age", 30)
.orderByAsc("age")
.last("limit 10")
);
LambdaQueryWrapper是QueryWrapper的Lambda表達式版本,可以通過Lambda表達式來構建查詢條件,避免硬編碼字段名。
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(User::getName, "張三")
.gt(User::getAge, 18)
.lt(User::getAge, 30);
List<User> userList = userMapper.selectList(lambdaQueryWrapper);
QueryWrapper是MyBatis-Plus中非常強大的查詢條件構建工具,通過它我們可以方便地構建各種復雜的SQL查詢條件。本文詳細介紹了QueryWrapper的基本查詢方法和復雜查詢方法,并展示了如何使用鏈式調用和LambdaQueryWrapper來簡化代碼。希望本文能幫助開發者更好地理解和使用MyBatis-Plus中的QueryWrapper。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。