Mybatis-Plus条件コンストラクタクエリー
10459 ワード
Mybatis-Plusが条件コンストラクタ(QueryWrapper)を使用して条件クエリーを行う9つの小さな例
まずuserテーブルを作成する
複数のデータを挿入名前には「雨」が含まれ、年齢が40 name like'%雨%'and age<40 未満
ログ出力sql:
DEBUG==> Preparing: SELECT id,name,age,email,manager_id,create_time FROM user WHERE name LIKE ? AND age < ? DEBUG==>Parameters:%雨%(String)、40(Integer)TRACE<==Columns:id,name,age,email,manager_id, create_time TRACE<==Row:10945904099767661570,張雨琪,31,[email protected],108248166370832385,2019-01-14 09:15:15 TRACE<==Row:1094590410877729666,劉紅雨,31,[email protected], 1088248166370832385, 2019-01-14 09:48:16 DEBUG<== Total: 2の名前には「雨」が含まれており、年齢が20以上40未満であり、emailは空のname like'%雨%and age between 20 and 40 and email is not null ではない.
ログ出力sql:
DEBUG==> Preparing: SELECT id,name,age,email,manager_id,create_time FROM user WHERE name LIKE ? AND age BETWEEN ? AND ? AND email IS NOT NULL DEBUG=>Parameters:%雨%(String),20(Integer),40(Integer)TRACE<==Columns:id,name,age,email,manager_id, create_time TRACE<==Row:10945904099767661570,張雨琪,31,[email protected],108248166370832385,2019-01-14 09:15:15 TRACE<==Row:1094590410877729666,劉紅雨,31,[email protected], 1088248166370832385, 2019-01-14 09:48:16 DEBUG<== Total: 2名前は「王」姓または年齢が25以上で、年齢降順に並び、年齢が同じid昇順にname like'王%'or age>=25 order by age desc,id,asc
ログ出力sql:
DEBUG==> Preparing: SELECT id,name,age,email,manager_id,create_time FROM user WHERE name LIKE ? OR age >= ? ORDER BY age DESC,id ASC DEBUG=>Parameters:キング%(String),25(Integer)TRACE<==Columns:id,name,age,email,manager_id, create_time TRACE<==Row:108782257332887553、ビッグボス、40、[email protected],null,2019-01-11 14:20:20 TRACE<==Row:109459040967661570,張雨琪,31,[email protected],108248166370832385,2019-01-14 09:15:15 TRACE<==Row:1094590410877729666,劉紅雨,31,[email protected],1088241667370832385,2019-01-14 09:48:16 TRACE<==Row:108825446457389058,李芸偉,28,[email protected],1088241663370832385,2019-02-14 08:31:16 TRACE<==Row:1088241663370832385,王天風,25,[email protected], 1087982257332887553, 2019-02-05 11:12:22 DEBUG<== Total: 5の作成日は2019年2月14日で、直属の上司の名前は王姓date_format(create_time,'%Y-%m-%d') and manager_id in(select id from user where name like'王%')
ログ出力sql:
DEBUG==> Preparing: SELECT id,name,age,email,manager_id,create_time FROM user WHERE date_format(create_time,'%Y-%m-%d')=? AND manager_id IN(select id from user where name like'王%')DEBUG=>Parameters:2019-02-14(String)TRACE<==Columns:id,name,age,email,manager_id, create_time TRACE<==Row:108250446457389058、李芸偉、28、[email protected], 1088248166370832385, 2019-02-14 08:31:16 DEBUG<== Total: 1名前は「王」姓で(年齢が40未満またはメールボックスが空ではない)name like'王%'and(age<40 or email is not null)
ログ出力sql:
DEBUG==> Preparing: SELECT id,name,age,email,manager_id,create_time FROM user WHERE name LIKE ? AND ( age < ? OR email IS NOT NULL )
DEBUG=>>Parameters:キング%(String)、40(Integer)TRACE<==Columns:id,name,age,email,manager_id, create_time TRACE<==Row:1088241667370832385、王天風、25、[email protected], 1087982257332887553, 2019-02-05 11:12:22 DEBUG<== Total: 1名前が「王」姓または(年齢40未満、年齢20以上、メールボックスが空でない)name like「王%」or(age<40 and age>20 and email is not null)
ログ出力sql:
DEBUG==> Preparing: SELECT id,name,age,email,manager_id,create_time FROM user WHERE name LIKE ? OR(age?AND email IS NOT NULL)DEBUG=>>Parameters:キング%(String)、40(Integer)、20(Integer)TRACE<==Columns:id,name,age,email,manager_id, create_time TRACE<==Row:1088241667370832385、王天風、25、[email protected],108798257332887553,2019-02-05 11:12:22 TRACE<==Row:108250446457389058,李芸偉,28,[email protected], 1088248166370832385, 2019-02-14 08:31:16
TRACE<==Row:10945904099767661570,張雨琪,31,[email protected],108248166370832385,2019-01-14 09:15:15 TRACE<==Row:1094590410877729666,劉紅雨,31,[email protected], 1088248166370832385, 2019-01-14 09:48:16 DEBUG<== Total: 4(年齢が40未満またはメールボックスが空ではない)および名前が王姓(age<40 or email is not null)and name like'王%'
ログ出力sql:
DEBUG==> Preparing: SELECT id,name,age,email,manager_id,create_time FROM user WHERE ( age < ? OR email IS NOT NULL ) AND name LIKE ? DEBUG=>>Parameters:40(Integer)、キング%(String)TRACE<==Columns:id,name,age,email,manager_id, create_time TRACE<==Row:1088241667370832385、王天風、25、[email protected], 1087982257332887553, 2019-02-05 11:12:22 DEBUG<== Total: 1年齢30,31,34,35 age in(30,31,34,35)
ログ出力sql:
DEBUG==> Preparing: SELECT id,name,age,email,manager_id,create_time FROM user WHERE age IN (?,?,?,?) DEBUG==> Parameters: 30(Integer), 31(Integer), 34(Integer), 35(Integer) TRACE<== Columns: id, name, age, email, manager_id, create_time TRACE<==Row:10945904099767661570,張雨琪,31,[email protected],108248166370832385,2019-01-14 09:15:15 TRACE<==Row:1094590410877729666,劉紅雨,31,[email protected], 1088248166370832385, 2019-01-14 09:48:16 DEBUG<== Total: 2条件を満たす文の1つだけを返すlimit 1
ログ出力sql:
DEBUG==> Preparing: SELECT id,name,age,email,manager_id,create_time FROM user WHERE age IN (?,?,?,?) limit 1 DEBUG==> Parameters: 30(Integer), 31(Integer), 34(Integer), 35(Integer) TRACE<== Columns: id, name, age, email, manager_id, create_time TRACE<==Row:10945904099767661570,張雨琪,31,[email protected], 1088248166370832385, 2019-01-14 09:15:15 DEBUG<== Total: 1
まずuserテーブルを作成する
CREATE TABLE user (
id BIGINT ( 20 ) PRIMARY KEY NOT NULL COMMENT ' ',
name VARCHAR ( 30 ) DEFAULT NULL COMMENT ' ',
age INT ( 11 ) DEFAULT NULL COMMENT ' ',
email VARCHAR ( 50 ) DEFAULT NULL COMMENT ' ',
manager_id BIGINT ( 20 ) DEFAULT NULL COMMENT ' id',
create_time DATETIME DEFAULT NULL COMMENT ' ',
CONSTRAINT manager_fk FOREIGN KEY ( manager_id ) REFERENCES USER ( id )
) ENGINE = INNODB CHARSET = UTF8;
複数のデータを挿入
INSERT INTO `user` ( id, name, age, email, manager_id, create_time )
VALUES
( 1087982257332887553, ' boss', 40, '[email protected]', NULL, '2019-01-11 14:20:20' ),
( 1088248166370832385, ' ', 25, '[email protected]', 1087982257332887553, '2019-02-05 11:12:22' ),
( 1088250446457389058, ' ', 28, '[email protected]', 1088248166370832385, '2019-02-14 08:31:16' ),
( 1094590409767661570, ' ', 31, '[email protected]', 1088248166370832385, '2019-01-14 09:15:15' ),
( 1094592041087729666, ' ', 31, '[email protected]', 1088248166370832385, '2019-01-14 09:48:16' );
@Test
public void selectByWrapper1() {
QueryWrapper queryWrapper = new QueryWrapper<>();
// lt
queryWrapper.like("name", " ").lt("age", 40);
List users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
}
ログ出力sql:
DEBUG==> Preparing: SELECT id,name,age,email,manager_id,create_time FROM user WHERE name LIKE ? AND age < ? DEBUG==>Parameters:%雨%(String)、40(Integer)TRACE<==Columns:id,name,age,email,manager_id, create_time TRACE<==Row:10945904099767661570,張雨琪,31,[email protected],108248166370832385,2019-01-14 09:15:15 TRACE<==Row:1094590410877729666,劉紅雨,31,[email protected], 1088248166370832385, 2019-01-14 09:48:16 DEBUG<== Total: 2
@Test
public void selectByWrapper2() {
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.like("name", " ").between("age", 20, 40).isNotNull("email");
List users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
}
ログ出力sql:
DEBUG==> Preparing: SELECT id,name,age,email,manager_id,create_time FROM user WHERE name LIKE ? AND age BETWEEN ? AND ? AND email IS NOT NULL DEBUG=>Parameters:%雨%(String),20(Integer),40(Integer)TRACE<==Columns:id,name,age,email,manager_id, create_time TRACE<==Row:10945904099767661570,張雨琪,31,[email protected],108248166370832385,2019-01-14 09:15:15 TRACE<==Row:1094590410877729666,劉紅雨,31,[email protected], 1088248166370832385, 2019-01-14 09:48:16 DEBUG<== Total: 2
@Test
public void selectByWrapper3() {
QueryWrapper queryWrapper = new QueryWrapper<>();
// ge
queryWrapper.likeRight("name", " ").or().ge("age", 25)
.orderByDesc("age").orderByAsc("id");
List users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
}
ログ出力sql:
DEBUG==> Preparing: SELECT id,name,age,email,manager_id,create_time FROM user WHERE name LIKE ? OR age >= ? ORDER BY age DESC,id ASC DEBUG=>Parameters:キング%(String),25(Integer)TRACE<==Columns:id,name,age,email,manager_id, create_time TRACE<==Row:108782257332887553、ビッグボス、40、[email protected],null,2019-01-11 14:20:20 TRACE<==Row:109459040967661570,張雨琪,31,[email protected],108248166370832385,2019-01-14 09:15:15 TRACE<==Row:1094590410877729666,劉紅雨,31,[email protected],1088241667370832385,2019-01-14 09:48:16 TRACE<==Row:108825446457389058,李芸偉,28,[email protected],1088241663370832385,2019-02-14 08:31:16 TRACE<==Row:1088241663370832385,王天風,25,[email protected], 1087982257332887553, 2019-02-05 11:12:22 DEBUG<== Total: 5
@Test
public void selectByWrapper4() {
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.apply("date_format(create_time,'%Y-%m-%d')={0}", "2019-02-14")
.inSql("manager_id", "select id from user where name like ' %'");
List users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
}
ログ出力sql:
DEBUG==> Preparing: SELECT id,name,age,email,manager_id,create_time FROM user WHERE date_format(create_time,'%Y-%m-%d')=? AND manager_id IN(select id from user where name like'王%')DEBUG=>Parameters:2019-02-14(String)TRACE<==Columns:id,name,age,email,manager_id, create_time TRACE<==Row:108250446457389058、李芸偉、28、[email protected], 1088248166370832385, 2019-02-14 08:31:16 DEBUG<== Total: 1
@Test
public void selectByWrapper5() {
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.likeRight("name", " ")
.and(wq -> wq.lt("age", 40).or().isNotNull("email"));
List users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
}
ログ出力sql:
DEBUG==> Preparing: SELECT id,name,age,email,manager_id,create_time FROM user WHERE name LIKE ? AND ( age < ? OR email IS NOT NULL )
DEBUG=>>Parameters:キング%(String)、40(Integer)TRACE<==Columns:id,name,age,email,manager_id, create_time TRACE<==Row:1088241667370832385、王天風、25、[email protected], 1087982257332887553, 2019-02-05 11:12:22 DEBUG<== Total: 1
@Test
public void selectByWrapper6() {
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.likeRight("name", " ")
.or(wq -> wq.lt("age", 40).gt("age", 20).isNotNull("email"));
List users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
}
ログ出力sql:
DEBUG==> Preparing: SELECT id,name,age,email,manager_id,create_time FROM user WHERE name LIKE ? OR(age?AND email IS NOT NULL)DEBUG=>>Parameters:キング%(String)、40(Integer)、20(Integer)TRACE<==Columns:id,name,age,email,manager_id, create_time TRACE<==Row:1088241667370832385、王天風、25、[email protected],108798257332887553,2019-02-05 11:12:22 TRACE<==Row:108250446457389058,李芸偉,28,[email protected], 1088248166370832385, 2019-02-14 08:31:16
TRACE<==Row:10945904099767661570,張雨琪,31,[email protected],108248166370832385,2019-01-14 09:15:15 TRACE<==Row:1094590410877729666,劉紅雨,31,[email protected], 1088248166370832385, 2019-01-14 09:48:16 DEBUG<== Total: 4
@Test
public void selectByWrapper7() {
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.nested(wq -> wq.lt("age", 40).or().isNotNull("email"))
.likeRight("name", " ");
List users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
}
ログ出力sql:
DEBUG==> Preparing: SELECT id,name,age,email,manager_id,create_time FROM user WHERE ( age < ? OR email IS NOT NULL ) AND name LIKE ? DEBUG=>>Parameters:40(Integer)、キング%(String)TRACE<==Columns:id,name,age,email,manager_id, create_time TRACE<==Row:1088241667370832385、王天風、25、[email protected], 1087982257332887553, 2019-02-05 11:12:22 DEBUG<== Total: 1
@Test
public void selectByWrapper8() {
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.in("age", Arrays.asList(30, 31, 34, 35));
List users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
}
ログ出力sql:
DEBUG==> Preparing: SELECT id,name,age,email,manager_id,create_time FROM user WHERE age IN (?,?,?,?) DEBUG==> Parameters: 30(Integer), 31(Integer), 34(Integer), 35(Integer) TRACE<== Columns: id, name, age, email, manager_id, create_time TRACE<==Row:10945904099767661570,張雨琪,31,[email protected],108248166370832385,2019-01-14 09:15:15 TRACE<==Row:1094590410877729666,劉紅雨,31,[email protected], 1088248166370832385, 2019-01-14 09:48:16 DEBUG<== Total: 2
@Test
public void selectByWrapper9() {
QueryWrapper queryWrapper = new QueryWrapper<>();
// sql
// :
// , sql ,
queryWrapper.in("age", Arrays.asList(30, 31, 34, 35)).last("limit 1");
List users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
}
ログ出力sql:
DEBUG==> Preparing: SELECT id,name,age,email,manager_id,create_time FROM user WHERE age IN (?,?,?,?) limit 1 DEBUG==> Parameters: 30(Integer), 31(Integer), 34(Integer), 35(Integer) TRACE<== Columns: id, name, age, email, manager_id, create_time TRACE<==Row:10945904099767661570,張雨琪,31,[email protected], 1088248166370832385, 2019-01-14 09:15:15 DEBUG<== Total: 1