馃彎锔?鍗氫富浠嬬粛
澶у濂斤紝鎴戞槸 涓€涓惉鐮栫殑鍐滄皯宸?/font>锛屽緢楂樺叴璁よ瘑澶у 馃槉 ~
馃懆鈥嶐煄?涓汉浠嬬粛锛氭湰浜烘槸涓€鍚嶅悗绔疛ava寮€鍙戝伐绋嬪笀锛屽潗鏍囧寳浜?~
馃帀 鎰熻阿鍏虫敞 馃摉 涓€璧峰涔?/font> 馃摑 涓€璧疯璁?馃寛 涓€璧疯繘姝?~
馃檹 浣滆€呮按骞虫湁闄愶紝娆㈣繋鍚勪綅澶т浆鎸囨鐣欒█锛岀浉浜掑涔犺繘姝?~
鐩綍
- 馃彎锔?鍗氫富浠嬬粛
- 1. mybatis閰嶇疆 馃殌
- 2. Wrapper 鍖呰绫?馃殌
- 馃寛 2.1 Mybatis 涓彁渚涗簡鍝簺 Wrapper 鍖呰绫伙紵
- 馃寛 2.2 QueryWrapper 甯哥敤鏂规硶
- 馃寛 2.3 QueryWrapper 澶嶆潅鏂规硶
- 馃寛 2.4 LambdaQueryWrapper 甯哥敤鏂规硶
- 馃寛 2.5 LambdaQueryWrapper 澶嶆潅鏂规硶
- 馃寛 2.6 鎬荤粨
鈿?婧?鐮侊細SpringBoot 闆嗘垚 Mybatis-Plus
1. mybatis閰嶇疆 馃殌
馃崻 1.maven渚濊禆
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
dependency>
<dependency>
<groupId>com.baomidougroupId>
<artifactId>mybatis-plus-boot-starterartifactId>
<version>3.2.0version>
dependency>
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
dependency>
dependencies>
馃崻 2.yaml閰嶇疆
server:
port: 8089
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3309/swp?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8
username: root
password: root
mybatis-plus:
mapper-locations: classpath:mapper/*.xml # XML 閰嶇疆鏂囦欢璺緞
type-aliases-package: swp.basis.entity # 瀹炰綋绫诲寘璺緞
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 鎸囧畾 MyBatis 浣跨敤 stdout 浣滀负鏃ュ織瀹炵幇
馃崻 3.瀹炰綋绫?/strong>
@Data
@TableName(value = "user") //mybatis-plus娉ㄨВ
public class UserEntity extends BaseDO implements Serializable {
private static final long serialVersionUID = 1903236519513043621L;
@TableId(type = IdType.AUTO) // 渚濊禆浜庢暟鎹簱鑷锛岄€氳繃entity.getId()杩斿洖id
private Long id;
/**
* 鍚嶇О
*/
@TableField(condition = SqlCondition.LIKE, whereStrategy = FieldStrategy.NOT_EMPTY)
private String name;
/**
* 鎬у埆
*/
private Integer sex;
/**
* 鐘舵€?
* 浣跨敤 {@link swp.basis.enums.StatusEnum} 鏋氫妇
*/
private Integer status;
/**
* 鏃ユ湡
*/
// 蹇界暐锛屽拷鐣ヨ瀛楁鐨勭瓥鐣ワ紝榛樿绛栫暐鏄笉鑳戒慨鏀逛负null锛岄伩鍏嶆暟鎹敊璇€?/span>
// 浣胯皟鐢╱pdate鏂规硶鏃跺彲浠ユ洿鏂癲ate涓簄ull
@TableField(updateStrategy = FieldStrategy.IGNORED)
private LocalDateTime date;
}
馃崻 4.DAO
dao鎺ュ彛闇€瑕佺户鎵緽aseMapper锛屾硾鍨嬩负瀹炰綋绫?/p>
public interface UserDao extends BaseMapper<UserEntity> {
}
馃崻 5.service
service鎺ュ彛闇€瑕佺户鎵縄Service锛屾硾鍨嬩负瀹炰綋绫?/p>
public interface UserService extends IService<UserEntity> {
}
馃崻 6.serviceImpl
serviceImpl瀹炵幇service鎺ュ彛锛屽苟缁ф壙ServiceImpl绫伙紝娉涘瀷涓篋AO鎺ュ彛鍜屽疄浣撶被
@Service
public class UserServiceImpl extends ServiceImpl<UserDao, UserEntity> implements UserService {
}
馃崻 7.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="swp.basis.dao.UserDao">
</mapper>
娉細璁板緱鍦ㄥ惎鍔ㄧ被鍔犱笂@MapperScan(basePackages = 鈥渟wp.basis.dao鈥?娉ㄨВ锛屾垨鑰呭湪姣忎釜dao鍔犱笂@Mapper
2. Wrapper 鍖呰绫?馃殌
濡傚浘 BaseMapper 绫讳腑鐨勪竴浜涙煡璇€佷慨鏀广€佸垹闄ゆ帴鍙d細鐢ㄥ埌 Wrapper 鍖呰绫伙紝閭d箞杩欎釜 Wrapper 鍖呰绫诲簲璇ユ€庝箞浣跨敤鍛?/p>
馃寛 2.1 Mybatis 涓彁渚涗簡鍝簺 Wrapper 鍖呰绫伙紵
Mybatis-Plus 鎻愪緵浜嗗绉?Wrapper 绫诲瀷锛屽叿浣撲娇鐢ㄥ摢绉?Wrapper 绫诲瀷鍙栧喅浜庡紑鍙戣€呯殑闇€姹傚拰涓汉涔犳儻銆備互涓嬫槸 Mybatis-Plus 甯哥敤鐨?Wrapper 绫诲瀷鍜岄€傜敤鍦烘櫙锛?/p>
馃崉 QueryWrapper |
QueryWrapper 鏄?Mybatis-Plus 鏈€甯哥敤鐨?Wrapper 绫诲瀷涔嬩竴锛岀敤浜庢瀯寤烘煡璇㈡潯浠躲€傚彲浠ヤ娇鐢?br /> QueryWrapper 杩涜绛夊€兼煡璇€佹ā绯婃煡璇€佽寖鍥存煡璇€佹帓搴忕瓑鎿嶄綔銆備娇鐢?QueryWrapper
杩涜鏌ヨ鏃讹紝闇€瑕佹寚瀹氭煡璇㈢殑瀹炰綋绫伙紝Wrapper 浼氭牴鎹疄浣撶被鐨勫睘鎬ц嚜鍔ㄧ敓鎴愭煡璇㈡潯浠躲€傞€傜敤浜庡ぇ閮ㄥ垎鏌ヨ鍦烘櫙銆?/p>
馃崉 UpdateWrapper |
UpdateWrapper 鏄敤浜庢瀯寤烘洿鏂版潯浠剁殑 Wrapper 绫诲瀷锛屽彲浠ヤ娇鐢?UpdateWrapper
杩涜绛夊€兼洿鏂般€佽嚜澧炴洿鏂般€佹潯浠舵洿鏂扮瓑鎿嶄綔銆備娇鐢?UpdateWrapper 杩涜鏇存柊鏃讹紝闇€瑕佹寚瀹氭洿鏂扮殑瀹炰綋绫诲拰鏇存柊鏉′欢锛學rapper
浼氭牴鎹疄浣撶被鐨勫睘鎬ц嚜鍔ㄧ敓鎴愭洿鏂版潯浠躲€傞€傜敤浜庡ぇ閮ㄥ垎鏇存柊鍦烘櫙銆?/p>
馃崉 LambdaQueryWrapper |
LambdaQueryWrapper 鏄娇鐢?Lambda 琛ㄨ揪寮忔瀯寤烘煡璇㈡潯浠剁殑 Wrapper 绫诲瀷锛屽彲浠ヤ娇鐢?br /> LambdaQueryWrapper 杩涜绛夊€兼煡璇€佹ā绯婃煡璇€佽寖鍥存煡璇€佹帓搴忕瓑鎿嶄綔銆侺ambdaQueryWrapper 鍙互浣跨敤
Java 8 鐨?Lambda 琛ㄨ揪寮忚繘琛屾潯浠舵瀯寤猴紝浠g爜鏇村姞绠€娲佹槗璇汇€傞€傜敤浜庨渶瑕佷娇鐢?Lambda 琛ㄨ揪寮忚繘琛屾潯浠舵瀯寤虹殑鏌ヨ鍦烘櫙銆?/p>
馃崉 LambdaUpdateWrapper |
LambdaUpdateWrapper 鏄娇鐢?Lambda 琛ㄨ揪寮忔瀯寤烘洿鏂版潯浠剁殑 Wrapper 绫诲瀷锛屽彲浠ヤ娇鐢?br /> LambdaUpdateWrapper 杩涜绛夊€兼洿鏂般€佽嚜澧炴洿鏂般€佹潯浠舵洿鏂扮瓑鎿嶄綔銆侺ambdaUpdateWrapper 鍙互浣跨敤 Java
8 鐨?Lambda 琛ㄨ揪寮忚繘琛屾潯浠舵瀯寤猴紝浠g爜鏇村姞绠€娲佹槗璇汇€傞€傜敤浜庨渶瑕佷娇鐢?Lambda 琛ㄨ揪寮忚繘琛屾潯浠舵瀯寤虹殑鏇存柊鍦烘櫙銆?/p>
馃寛 2.2 QueryWrapper 甯哥敤鏂规硶
Mybatis-Plus 鐨?QueryWrapper 鎻愪緵浜嗗涓柟娉曪紝鍙互鐢ㄤ簬鏋勫缓鏌ヨ鏉′欢銆備互涓嬫槸 QueryWrapper 涓父鐢ㄧ殑鏂规硶鍙婂叾鐢ㄦ硶绀轰緥锛?/p>
// 1.绛夊€兼煡璇紝鐢ㄤ簬鍖归厤鎸囧畾瀛楁绛変簬鎸囧畾鍊肩殑璁板綍
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("name", "寮犱笁");
// 2.涓嶇瓑浜庢煡璇紝鐢ㄤ簬鍖归厤鎸囧畾瀛楁涓嶇瓑浜庢寚瀹氬€肩殑璁板綍
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.ne("age", 18);
// 3.澶т簬鏌ヨ锛岀敤浜庡尮閰嶆寚瀹氬瓧娈靛ぇ浜庢寚瀹氬€肩殑璁板綍銆?/span>
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.gt("age", 18);
// 4.澶т簬绛変簬鏌ヨ锛岀敤浜庡尮閰嶆寚瀹氬瓧娈靛ぇ浜庣瓑浜庢寚瀹氬€肩殑璁板綍
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.ge("age", 18);
// 5.灏忎簬鏌ヨ锛岀敤浜庡尮閰嶆寚瀹氬瓧娈靛皬浜庢寚瀹氬€肩殑璁板綍
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.lt("age", 18);
// 6.灏忎簬绛変簬鏌ヨ锛岀敤浜庡尮閰嶆寚瀹氬瓧娈靛皬浜庣瓑浜庢寚瀹氬€肩殑璁板綍銆?/span>
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.le("age", 18);
// 7.鑼冨洿鏌ヨ锛岀敤浜庡尮閰嶆寚瀹氬瓧娈靛湪鎸囧畾鑼冨洿鍐呯殑璁板綍銆?/span>
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.between("age", 18, 25);
// 8.妯$硦鏌ヨ锛岀敤浜庡尮閰嶆寚瀹氬瓧娈靛寘鍚寚瀹氬瓧绗︿覆鐨勮褰曘€傚彲浠ヤ娇鐢?% 閫氶厤绗﹁〃绀轰换鎰忓瓧绗︼紝浣跨敤 _ 閫氶厤绗﹁〃绀轰换鎰忓崟涓瓧绗︺€?/span>
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.like("name", "寮?");
// 9.涓嶅寘鍚煡璇紝鐢ㄤ簬鍖归厤鎸囧畾瀛楁涓嶅寘鍚寚瀹氬瓧绗︿覆鐨勮褰曘€?/span>
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.notLike("name", "%涓?);
// 10.IN 鏌ヨ锛岀敤浜庡尮閰嶆寚瀹氬瓧娈靛湪鎸囧畾闆嗗悎鍐呯殑璁板綍銆?/span>
QueryWrapper<User> wrapper = new QueryWrapper<>();
List<Integer> ages = Arrays.asList(18, 20, 22);
wrapper.in("age", ages);
// 11.NOT IN 鏌ヨ锛岀敤浜庡尮閰嶆寚瀹氬瓧娈典笉鍦ㄦ寚瀹氶泦鍚堝唴鐨勮褰曘€?/span>
QueryWrapper<User> wrapper = new QueryWrapper<>();
List<Integer> ages = Arrays.asList(18, 20, 22);
wrapper.notIn("age", ages);
// 12.NULL 鏌ヨ锛岀敤浜庡尮閰嶆寚瀹氬瓧娈典负 NULL 鐨勮褰曘€?/span>
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.isNull("email");
// 13.NOT NULL 鏌ヨ锛岀敤浜庡尮閰嶆寚瀹氬瓧娈典笉涓?NULL 鐨勮褰曘€?/span>
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.isNotNull("email");
// 14.鍗囧簭鎺掑簭锛岀敤浜庢寜鐓ф寚瀹氬瓧娈靛崌搴忔帓鍒楁煡璇㈢粨鏋溿€?/span>
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.orderByAsc("age", "name");
// 15.闄嶅簭鎺掑簭锛岀敤浜庢寜鐓ф寚瀹氬瓧娈甸檷搴忔帓鍒楁煡璇㈢粨鏋溿€?/span>
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.orderByDesc("age", "name");
// 16.鍒嗙粍鏌ヨ锛岀敤浜庢寜鐓ф寚瀹氬瓧娈佃繘琛屽垎缁勬煡璇€?/span>
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.select("age", "count(*)").groupBy("age");
// 17.HAVING 瀛愬彞鏌ヨ锛岀敤浜庣瓫閫夊垎缁勬煡璇㈢粨鏋溿€?/span>
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.select("age", "count(*)").groupBy("age").having("age > {0} and count(*) > 1", 18);
List<User> userList = userMapper.selectList(wrapper); // {0} 鍗犱綅绗﹁〃绀哄弬鏁?18锛岃〃绀虹瓫閫夊嚭 age 澶т簬 18 鐨勮褰曘€?/span>
馃寛 2.3 QueryWrapper 澶嶆潅鏂规硶
// 1. nested(Consumer> consumer)
宓屽鏌ヨ锛岀敤浜庢瀯寤哄鏉傜殑鏌ヨ鏉′欢銆傚彲浠ヤ娇鐢ㄥ涓?nested 鏂规硶宓屽澶氫釜鏌ヨ鏉′欢锛屼粠鑰屽疄鐜版洿鍔犲鏉傜殑鏌ヨ銆?
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.nested(qw -> qw.eq("name", "寮犱笁").or().eq("name", "鏉庡洓"))
.and(qw -> qw.gt("age", 18).lt("age", 30));
// 2. apply(String applySql, Object... params)
鑷畾涔?SQL 鏌ヨ锛岀敤浜庣洿鎺ヤ娇鐢?SQL 璇彞鏌ヨ鏁版嵁銆傚彲浠ヤ娇鐢?{0}銆?span >{1} 绛夊崰浣嶇琛ㄧず鍙傛暟銆?
宓屽鏌ヨ锛岀敤浜庢瀯寤哄鏉傜殑鏌ヨ鏉′欢銆傚彲浠ヤ娇鐢ㄥ涓?nested 鏂规硶宓屽澶氫釜鏌ヨ鏉′欢锛屼粠鑰屽疄鐜版洿鍔犲鏉傜殑鏌ヨ銆?
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.apply("name like {0} or age > {1}", "%寮?", 18);
// 3. last(String lastSql)
鍦?SQL 璇彞鐨勬渶鍚庢坊鍔犻澶栫殑鏉′欢锛岀敤浜庢瀯寤哄鏉傜殑鏌ヨ鏉′欢銆傚彲浠ヤ娇鐢ㄥ涓?last 鏂规硶娣诲姞澶氫釜棰濆鐨勬潯浠讹紝浠庤€屽疄鐜版洿鍔犲鏉傜殑鏌ヨ銆?
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.gt("age", 18).last("limit 10");
// 4. select(String... columns)
鎸囧畾鏌ヨ鐨勫瓧娈碉紝鐢ㄤ簬鏌ヨ鎸囧畾鐨勫瓧娈佃€岄潪鍏ㄩ儴瀛楁銆?
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.select("name", "age");
// 5.allEq(Map params, boolean null2IsNull)
浣跨敤 Map 瀵硅薄浣滀负鏌ヨ鏉′欢锛岃繘琛岀瓑鍊煎尮閰嶆煡璇€傚彲浠ラ€氳繃绗簩涓弬鏁版寚瀹氭槸鍚﹀皢 null 鍊艰浆鎹负 is null 鏉′欢銆?
QueryWrapper<User> wrapper = new QueryWrapper<>();
Map<String, Object> params = new HashMap<>();
params.put("name", "寮犱笁");
params.put("age", 18);
wrapper.allEq(params, false);
馃寛 2.4 LambdaQueryWrapper 甯哥敤鏂规硶
lambdaQueryWrapper.eq(User::getId, 1L); // 绛変环浜?where id = 1
lambdaQueryWrapper.ne(User::getStatus, "DISABLED"); // 绛変环浜?where status <> 'DISABLED'
lambdaQueryWrapper.gt(User::getAge, 18); // 绛変环浜?where age > 18
lambdaQueryWrapper.ge(User::getCreateTime, LocalDateTime.now().minusDays(30)); // 绛変环浜?where create_time >= ?
lambdaQueryWrapper.lt(User::getAge, 30); // 绛変环浜?where age < 30
lambdaQueryWrapper.le(User::getUpdateTime, LocalDateTime.now()); // 绛変环浜?where update_time <= ?
lambdaQueryWrapper.like(User::getName, "Tom"); // 绛変环浜?where name like '%Tom%'
lambdaQueryWrapper.notLike(User::getName, "admin"); // 绛変环浜?where name not like '%admin%'
List<Integer> ids = Arrays.asList(1, 2, 3);
lambdaQueryWrapper.in(User::getId, ids); // 绛変环浜?where id in (1, 2, 3)
List<Integer> ids = Arrays.asList(1, 2, 3);
lambdaQueryWrapper.notIn(User::getId, ids); // 绛変环浜?where id not in (1, 2, 3)
lambdaQueryWrapper.isNull(User::getEmail); // 绛変环浜?where email is null
lambdaQueryWrapper.isNotNull(User::getPhone); // 绛変环浜?where phone is not null
lambdaQueryWrapper.orderByAsc(User::getAge); // 绛変环浜?order by age asc
lambdaQueryWrapper.orderByDesc(User::getCreateTime); // 绛変环浜?order by create_time desc
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
馃寛 2.5 LambdaQueryWrapper 澶嶆潅鏂规硶
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.nested(wrapper -> wrapper.eq(User::getAge, 20).or().eq(User::getAge, 30));
// 绛変环浜?where (age = 20 or age = 30)
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.exists("select 1 from user_role where user_role.user_id = user.id and user_role.role_id = 1");
// 绛変环浜?where exists (select 1 from user_role where user_role.user_id = user.id and user_role.role_id = 1)
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.inSql(User::getId, "select user_id from user_role where role_id = 1");
// 绛変环浜?where id in (select user_id from user_role where role_id = 1)
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.and(wrapper -> wrapper.eq(User::getAge, 20).eq(User::getStatus, "ENABLED"));
// 绛変环浜?where age = 20 and status = 'ENABLED'
lambdaQueryWrapper.or(wrapper -> wrapper.eq(User::getAge, 30).eq(User::getStatus, "DISABLED"));
// 绛変环浜?where age = 30 or status = 'DISABLED'
馃寛 2.6 鎬荤粨
- 琛ㄨ揪寮忔柟寮忎笉鍚?/font>锛?LambdaQueryWrapper 浣跨敤 Lambda 琛ㄨ揪寮忔潵缂栧啓鏌ヨ鏉′欢锛岃€?QueryWrapper 浣跨敤瀛楃涓叉柟寮忕紪鍐欐煡璇㈡潯浠躲€?/li>
- 鏌ヨ鏉′欢鐨勭被鍨?/font>锛?LambdaQueryWrapper 閫傜敤浜庡疄浣撶被灞炴€ц緝澶氱殑鎯呭喌锛屽彲浠ョ伒娲荤殑浣跨敤 Lambda 琛ㄨ揪寮忔潵鏋勫缓鏌ヨ鏉′欢銆傝€?QueryWrapper 鍒欓€傜敤浜庡疄浣撶被灞炴€ц緝灏戯紝鏌ヨ鏉′欢姣旇緝绠€鍗曠殑鎯呭喌銆?/li>
- 璇硶閿欒鎻愮ず锛歀ambdaQueryWrapper 鍦ㄧ紪鍐欐煡璇㈡潯浠舵椂锛岀紪璇戝櫒浼氬 Lambda 琛ㄨ揪寮忚繘琛岃娉曟鏌ワ紝濡傛灉鍑虹幇閿欒鍒欎細鎻愮ず锛岃€?QueryWrapper 鍒欓渶瑕佸湪杩愯鏃舵墠鑳藉彂鐜拌娉曢敊璇€?/li>
- 鍙鎬?/font>锛歀ambdaQueryWrapper 鐨勬煡璇㈡潯浠朵娇鐢?Lambda 琛ㄨ揪寮忕紪鍐欙紝鍙鎬ц緝楂橈紝鍙互鐩磋鐨勭湅鍑烘煡璇㈡潯浠剁殑鍚箟锛涜€?QueryWrapper 鍒欎娇鐢ㄥ瓧绗︿覆鏂瑰紡缂栧啓鏌ヨ鏉′欢锛屽彲璇绘€х浉瀵硅緝宸€?/li>
- 鏌ヨ鏉′欢鐨勭被鍨?/font>锛?LambdaQueryWrapper 閫傜敤浜庡疄浣撶被灞炴€ц緝澶氱殑鎯呭喌锛屽彲浠ョ伒娲荤殑浣跨敤 Lambda 琛ㄨ揪寮忔潵鏋勫缓鏌ヨ鏉′欢銆傝€?QueryWrapper 鍒欓€傜敤浜庡疄浣撶被灞炴€ц緝灏戯紝鏌ヨ鏉′欢姣旇緝绠€鍗曠殑鎯呭喌銆?/li>
鎬荤殑鏉ヨ锛孡ambdaQueryWrapper 鍜?QueryWrapper 閮芥湁鍚勮嚜鐨勪紭鍔匡紝涓嶈繃涓汉鎺ㄨ崘浣跨敤 LambdaQueryWrapper