1つ、ラッパーの紹介
ラッパー:条件付き構築抽象クラス、最上位の親クラス
AbstractWrapper:クエリ条件のカプセル化に使用され、SQLを生成します。条件
QueryWrapper:ラムダ構文を使用しないエンティティオブジェクトのカプセル化操作クラス
UpdateWrapper:条件のカプセル化を更新します。エンティティオブジェクトの更新操作に使用されます
AbstractLambdaWrapper:ラムダgrammarは、ラッパーを使用してラムダを均一に処理および解析して列を取得します。
LambdaQueryWrapper:名前を見て、Lambda構文で使用できるクエリラッパーであることを理解してください
。LambdaUpdateWrapper:Lambda更新ラッパーラッパー
@RunWith(SpringRunner.class)
@SpringBootTest
public class QueryWrapperTests {
@Autowired
private UserMapper userMapper;
}
二、AbstractWrapper
注:次の条件付きコンストラクターメソッドのパラメーターの列はすべてデータベースフィールドを表します
1、ge、gt、le、lt、isNull、isNotNull
@Test
public void testDelete() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper
.isNull("name")
.ge("age", 12)
.isNotNull("email");
int result = userMapper.delete(queryWrapper);
System.out.println("delete return count = " + result);
}
SQL:UPDATEユーザーSET delete = 1 WHERE delete = 0 AND name IS NULL AND age> =?そして電子メールはNULLではありません
2、eq、no
注:seletOneはエンティティレコードを返し、複数のレコードがある場合はエラーが報告されます
@Test
public void testSelectOne() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "Tom");
User user = userMapper.selectOne(queryWrapper);
System.out.println(user);
}
SELECT id、name、age、email、create_time、update_time、deleted、version FROM user WHERE delete = 0 AND name =?
3、間、間ではない
サイズ境界を含める
@Test
public void testSelectCount() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.between("age", 20, 30);
Integer count = userMapper.selectCount(queryWrapper);
System.out.println(count);
}
SELECT COUNT(1)FROM user WHERE delete = 0 AND age BETWEEN?そして?
4、allEq
@Test
public void testSelectList() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
Map<String, Object> map = new HashMap<>();
map.put("id", 2);
map.put("name", "Jack");
map.put("age", 20);
queryWrapper.allEq(map);
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
}
SELECT id、name、age、email、create_time、update_time、deleted、version
FROM user WHERE delete = 0 AND name =?AND id =?AND年齢=?
5、like、notLike、likeLeft、likeRight
selectMapsは、マップコレクションのリストを返します
@Test
public void testSelectMaps() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper
.notLike("name", "e")
.likeRight("email", "t");
List<Map<String, Object>> maps = userMapper.selectMaps(queryWrapper);//返回值是Map列表
maps.forEach(System.out::println);
}
SELECT id、name、age、email、create_time、update_time、deleted、version
FROM user WHERE delete = 0 AND name NOT LIKE?そして、メールのように?
6、in、notIn、inSql、notinSql、exists、notExists
in、notIn:
notIn(“ age”、{1,2,3})—> age not in(1,2,3)
notIn(“ age”、1、2、3)—> age not in(1,2,3)
inSql、notinSql
:実装询例:inSql(“ age”、“ 1,2,3,4,5 、6”)—> age in(1,2,3,4,5,6)
例:inSql(“ id”、“ select id from table where id <3”)—> id in(select id from table where id <3)
@Test
public void testSelectObjs() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
//queryWrapper.in("id", 1, 2, 3);
queryWrapper.inSql("id", "select id from user where id < 3");
List<Object> objects = userMapper.selectObjs(queryWrapper);//返回值是Object列表
objects.forEach(System.out::println);
}
SELECT id、name、age、email、create_time、update_time、deleted、version
FROM user WHERE delete = 0 AND id IN(select id from user from id <3)
7、または、そして
注:ここで使用されるUpdateWrapper
は、またはを呼び出しません。デフォルトでは、を使用して接続します。
@Test
public void testUpdate1() {
//修改值
User user = new User();
user.setAge(99);
user.setName("Andy");
//修改条件
UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();
userUpdateWrapper
.like("name", "h")
.or()
.between("age", 20, 30);
int result = userMapper.update(user, userUpdateWrapper);
System.out.println(result);
}
UPDATEユーザーSETname =?、age =?、update_time =?WHERE delete = 0 AND name LIKE?または間の年齢?そして?
8、ネストまたは、ネストおよび
ここではラムダ式が使用されており、またはの式は、最終的にsqlに変換されるときに括弧付きで追加されます。
@Test
public void testUpdate2() {
//修改值
User user = new User();
user.setAge(99);
user.setName("Andy");
//修改条件
UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();
userUpdateWrapper
.like("name", "h")
.or(i -> i.eq("name", "李白").ne("age", 20));
int result = userMapper.update(user, userUpdateWrapper);
System.out.println(result);
}
UPDATEユーザーSETname =?、age =?、update_time =?
WHERE delete = 0 AND name LIKE?
OR(名前=?AND年齢<>?)
9、orderBy、orderByDesc、orderByAsc
@Test
public void testSelectListOrderBy() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.orderByDesc("id");
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
}
SELECT id、name、age、email、create_time、update_time、deleted、version
FROM user WHERE delete = 0 ORDER BY id DESC
10、最後
SQLの最後に直接スプライスされます
注:呼び出しは1回のみであり、複数回の呼び出しはSQLインジェクションのリスクがあります。注意して使用してください。
@Test
public void testSelectListLast() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.last("limit 1");
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
}
SELECT id、name、age、email、create_time、update_time、deleted、versionFROM
ユーザーWHEREdeleted = 0 limit 1
11.照会する列を指定します
@Test
public void testSelectListColumn() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.select("id", "name", "age");
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
}
SELECT id、name、ageFROMユーザーWHEREdeleted = 0
12、set、setSql
最終的なSQLは、user.setAge()と、userUpdateWrapper.set()およびsetSql()のフィールドをマージします。
@Test
public void testUpdateSet() {
//修改值
User user = new User();
user.setAge(99);
//修改条件
UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();
userUpdateWrapper
.like("name", "h")
.set("name", "老李头")//除了可以查询还可以使用set设置修改的字段
.setSql(" email = '[email protected]'");//可以有子查询
int result = userMapper.update(user, userUpdateWrapper);
}
UPDATEユーザーSETage =?、update_time =?、name =?、email = '[email protected]' WHERE delete = 0 AND name LIKE?