最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MyBatis-Plus高效開發(fā)實(shí)戰(zhàn)指南

 更新時(shí)間:2026年03月23日 09:09:34   作者:稻草貓.  
MyBatis-Plus(簡(jiǎn)稱?MP)是?個(gè)MyBatis的增強(qiáng)工具,在MyBatis的基礎(chǔ)上只做增強(qiáng)不做改變,為簡(jiǎn)化開發(fā),本文介紹MyBatis-Plus高效開發(fā)全攻略,感興趣的朋友跟隨小編一起看看吧

一. MyBatis-Plus 介紹

MyBatis-Plus(簡(jiǎn)稱 MP)是?個(gè)MyBatis的增強(qiáng)工具,在MyBatis的基礎(chǔ)上只做增強(qiáng)不做改變,為簡(jiǎn)化開發(fā).提高效率而生 。

特性:

 • 潤(rùn)物無(wú)聲:只做增強(qiáng)不做改變,引入它不會(huì)對(duì)現(xiàn)有?程產(chǎn)生影響,如絲般順滑. 

• 效率至上:只需簡(jiǎn)單配置,即可快速進(jìn)行單表CRUD操作,從而節(jié)省大量時(shí)間. 

• 豐富功能:代碼生成、自動(dòng)分頁(yè)、邏輯刪除、自動(dòng)填充、攔截器等功能?應(yīng)俱全. 

• 廣泛認(rèn)可:連續(xù)5年獲得開源中國(guó)年度最佳開源項(xiàng)目殊榮,Github累計(jì)16KStar. 

支持?jǐn)?shù)據(jù)庫(kù): PostgreSQL , MySQL , MariaDB , Oracle , SQLServer , OceanBase , H2 , DB2...(任何能使用MyBatis進(jìn)行增刪改查,并且支持標(biāo)準(zhǔn)SQL的數(shù)據(jù)庫(kù)應(yīng)該都在MyBatis-Plus的支持范圍內(nèi))

更多介紹,可查看  MyBatis-Plus 官網(wǎng):https://baomidou.com/

二. MyBatis-Plus 使用

2.1 準(zhǔn)備工作

數(shù)據(jù)庫(kù)數(shù)據(jù)準(zhǔn)備:

-- 創(chuàng)建數(shù)據(jù)庫(kù) 
DROP DATABASE IF EXISTS mybatis_test;
CREATE DATABASE mybatis_test DEFAULT CHARACTER SET utf8mb4;
-- 使?數(shù)據(jù)數(shù)據(jù) 
USE mybatis_test;
-- 創(chuàng)建表[??表] 
DROP TABLE IF EXISTS user_info;
CREATE TABLE `user_info` (
 `id` INT ( 11 ) NOT NULL AUTO_INCREMENT,
 `user_name` VARCHAR ( 127 ) NOT NULL,
 `password` VARCHAR ( 127 ) NOT NULL,
 `age` TINYINT ( 4 ) NOT NULL,
 `gender` TINYINT ( 4 ) DEFAULT '0' COMMENT '1-男 2-? 0-默認(rèn)',
 `phone` VARCHAR ( 15 ) DEFAULT NULL,
 `delete_flag` TINYINT ( 4 ) DEFAULT 0 COMMENT '0-正常, 1-刪除',
 `create_time` DATETIME DEFAULT now(),
 `update_time` DATETIME DEFAULT now(),
 PRIMARY KEY ( `id` ) 
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4; 
-- 添加??信息 
INSERT INTO mybatis_test.user_info( username, `password`, age, gender, phone )
VALUES ( 'admin', 'admin', 18, 1, '18612340001' );
INSERT INTO mybatis_test.user_info( username, `password`, age, gender, phone )
VALUES ( 'zhangsan', 'zhangsan', 18, 1, '18612340002' );
INSERT INTO mybatis_test.user_info( username, `password`, age, gender, phone )
VALUES ( 'lisi', 'lisi', 18, 1, '18612340003' );
INSERT INTO mybatis_test.user_info( username, `password`, age, gender, phone )
VALUES ( 'wangwu', 'wangwu', 18, 1, '18612340004' );

添加MyBatis-Plus依賴與MySQL數(shù)據(jù)庫(kù)依賴:

   引入 MyBatis-Plus Starter 依賴:

  Spring Boot2

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.15</version>
</dependency>

Spring Boot3

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
    <version>3.5.15</version>
</dependency>

Spring Boot4 (自3.5.13開始)

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-spring-boot4-starter</artifactId>
    <version>3.5.15</version>
</dependency>

注意:不同的Spring版本引入不同的MyBatis-Plus依賴得版本不同(根據(jù)Spring版本添加相應(yīng)版本得依賴)

引入MySQL數(shù)據(jù)庫(kù)依賴:

<dependency>
 <groupId>com.mysql</groupId>
 <artifactId>mysql-connector-j</artifactId>
 <scope>runtime</scope>
</dependency>

配置數(shù)據(jù)庫(kù)

application.yml文件,配置內(nèi)容如下:

# 數(shù)據(jù)庫(kù)連接配置 
spring:
 datasource:
   url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=false
   username: root
   password: root
   driver-class-name: com.mysql.cj.jdbc.Driver
# 控制臺(tái)打印 SQL日志
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl 

2.2 編碼

為數(shù)據(jù)庫(kù)中表創(chuàng)建實(shí)體類:

@Data
public class UserInfo {
    private Integer id;
    private String userName;
    private String password;
    private Integer age;
    private Integer gender;
    private String phone;
    private Integer deleteFlag;
    private Date createTime;
    private Date updateTime;

}

編寫Mapper接口類:

@Mapper
public interface UserInfoMapper extends BaseMapper<UserInfo> {

}

 我們需要我們創(chuàng)建的這個(gè) Mapper接口類 去繼承 BaseMapper 這個(gè)接口

BaseMapper 這個(gè)接口是個(gè)泛型接口,填的是我們方法返回內(nèi)容的對(duì)象的類型

 BaseMapper中定義的方法:

MybatisPlus提供了?個(gè)基礎(chǔ)的 BaseMapper 接口,已經(jīng)實(shí)現(xiàn)了單表的CRUD, 我們自定義的 Mapper只需要繼承這個(gè)BaseMapper, 就無(wú)需自己實(shí)現(xiàn)單表CRUD了

2.3 單元測(cè)試

@SpringBootTest
class MybatisPlusApplicationTests {
@Autowired
	UserInfoMapper userInfoMapper;
	@Test
	void testInsert() {
		UserInfo user = new UserInfo();
		user.setUserName("xiaoming");
		user.setPassword("123456");
		user.setAge(11);
		user.setGender(0);
		user.setPhone("18610001234");
		userInfoMapper.insert(user);
	}
	@Test
	void testSelectById() {
		UserInfo user = userInfoMapper.selectById(1L);
		System.out.println("user: " + user);
	}
	@Test
	void testSelectByIds() {
		List<UserInfo> users = userInfoMapper.selectByIds(List.of(1, 2, 3, 4));
		users.forEach(System.out::println);
	}
	@Test
	void testUpdateById() {
		UserInfo user = new UserInfo();
		user.setId(1);
		user.setPassword("4444444");
		userInfoMapper.updateById(user);
	}
@Test
	void testDelete() {
		userInfoMapper.deleteById(5);
	}
}

執(zhí)行后的測(cè)試用例后的數(shù)據(jù)庫(kù):

三. MyBatis-Plus復(fù)雜操作

3.1 常見注解

3.1.1 @TableName

我們來(lái)看下面這個(gè)日志

發(fā)現(xiàn):在我們并沒(méi)有告訴要操作表的信息時(shí),MyBatis-Plus就已經(jīng)知道了我們要操作的是哪一張表,這是為什么----原因:MyBatis-Plus會(huì)通過(guò) 我們?cè)?BaseMapper<>中傳入的實(shí)體類來(lái)推斷對(duì)應(yīng)數(shù)據(jù)庫(kù)中的表名(推斷列子與規(guī)律如下表所示)

實(shí)體類名表名轉(zhuǎn)換邏輯
UserInfouser_info駝峰拆分:User + Info → 轉(zhuǎn)小寫 + 下劃線連接 → user_info
Userinfouserinfo無(wú)駝峰分隔 → 直接全小寫 → userinfo
BookInfobook_info

駝峰拆分:Book + Info → 轉(zhuǎn)小寫 + 下劃線連接 → book_info

如果我們?cè)O(shè)定的實(shí)體類經(jīng)上述規(guī)律推斷出來(lái)的表名與數(shù)據(jù)庫(kù)中的表名對(duì)應(yīng)不上時(shí),就會(huì)報(bào)錯(cuò),這時(shí)我們就要使用 @TableName 注解來(lái)解決問(wèn)題

代碼如下:(@TableName中填寫的是實(shí)體類對(duì)應(yīng)的數(shù)據(jù)庫(kù)中的表名)

@Data
@TableName("user_info")//指定對(duì)應(yīng)的數(shù)據(jù)庫(kù)中的表名
public class UserInfo {
    @TableId(value="id",type=IdType.AUTO)
    private Integer userid;
    private String userName;
    private String password;
    private Integer age;
    private Integer gender;
    private String phone;
    private Integer deleteFlag;
    private Date createTime;
    private Date updateTime;

}

3.1.2 @TableField

在我們不添加 @TableField注解前,MyBatis-Plus對(duì)于字段與屬性的映射關(guān)系,也和表名一樣,是通過(guò)自動(dòng)判斷轉(zhuǎn)發(fā)來(lái)的,當(dāng)轉(zhuǎn)化的名稱與數(shù)據(jù)庫(kù)中屬性名對(duì)應(yīng)不上式,我們就需要添@TableField注解,來(lái)對(duì)應(yīng)映射關(guān)系。如下面代碼所示:

@Data
@TableName("user_info")//指定對(duì)應(yīng)的數(shù)據(jù)庫(kù)中的表名
public class UserInfo {
    @TableId(value="id",type=IdType.AUTO)
    private Integer userid;
    private String userName;
    private String password;
    private Integer age;
    private Integer gender;
    private String phone;
    @TableField("delete_flag")//只舉這一個(gè)例子
    private Integer deleteFlag;
    private Date createTime;
    private Date updateTime;
}

3.1.3 @TableId

注意:

  • 在沒(méi)有添加 @TableId注解之前,MyBatis-Plus默認(rèn) id 為主鍵
  • 一個(gè)實(shí)體表類中只能有一個(gè)主鍵

在執(zhí)行 testInsert() (該方法沒(méi)有傳入主鍵id的值)后,我們發(fā)現(xiàn)我們?cè)黾拥倪@條數(shù)據(jù)的主鍵并沒(méi)有自增,而是一個(gè)隨機(jī)生成的數(shù)字 ----- 原因:由于 MyBatis-Plus 默認(rèn) id為主鍵,且針對(duì)主鍵的默認(rèn)賦值策略是 IdType.ASSIGN_ID(雪花算法)—— 該策略會(huì)由 MP 自動(dòng)生成 19 位分布式唯一的隨機(jī)長(zhǎng)數(shù)字,而非依賴數(shù)據(jù)庫(kù)自增,因此最終插入的主鍵是隨機(jī)數(shù),而非數(shù)據(jù)庫(kù)自增的連續(xù)值。

如何解決:添加@TableId注解并且修改主鍵指定自增類型的主鍵策略

@TableId注解 源碼:

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.ANNOTATION_TYPE})
public @interface TableId {
    String value() default "";

    IdType type() default IdType.NONE;
}

value:主鍵的名稱,如果實(shí)體類中主鍵的名稱與數(shù)據(jù)庫(kù)中主鍵的名稱不一致是,需通過(guò)value(其中填寫對(duì)應(yīng)數(shù)據(jù)庫(kù)中主鍵的名稱);一致時(shí)可不填寫

type:指定自增類型的主鍵策略(默認(rèn)為IdType.NONE)

IdType 取值含義適用場(chǎng)景
AUTO數(shù)據(jù)庫(kù)自增生成主鍵單體項(xiàng)目、表主鍵是自增字段(MySQL 的 AUTO_INCREMENT)
ASSIGN_IDMP 用雪花算法生成 19 位長(zhǎng)數(shù)字分布式項(xiàng)目、需要全局唯一 ID
INPUT手動(dòng)輸入主鍵值(MP 不生成)主鍵是業(yè)務(wù)編號(hào)(如訂單號(hào))、需手動(dòng)賦值的場(chǎng)景
NONE無(wú)指定(默認(rèn)兜底為 ASSIGN_ID)不推薦直接用,需顯式指定 AUTO/ASSIGN_ID

將 主鍵 id 修改為自增:代碼如下

@Data
public class UserInfo {
    @TableId(value="id",type=IdType.AUTO)
    private Integer userid;
    private String userName;
    private String password;
    private Integer age;
    private Integer gender;
    private String phone;
    private Integer deleteFlag;
    private Date createTime;
    private Date updateTime;

}

注意:由于我們?cè)谇懊嫔闪艘粋€(gè)主鍵為隨機(jī)數(shù)的數(shù)據(jù),因此我們需要修改該表自動(dòng)遞增的起始數(shù)

再執(zhí)行一下測(cè)試用例:

@Test
	void testInsert() {
		UserInfo user = new UserInfo();
		user.setUserName("huahua");
		user.setPassword("666666");
		user.setAge(11);
		user.setGender(0);
		user.setPhone("18610001234");
		userInfoMapper.insert(user);
	}

執(zhí)行后數(shù)據(jù)庫(kù)----id開始自增

3.2 條件構(gòu)造器

入門程序里的使用, 都是簡(jiǎn)單的CRUD, 但是在實(shí)際的應(yīng)用場(chǎng)景中,我們還需要使用更復(fù)雜的操作, MyBatisPlus 也給我們提供了相應(yīng)的支持.

 MyBatis-Plus 提供了?套強(qiáng)大的條件構(gòu)造器(Wrapper),用于構(gòu)建復(fù)雜的數(shù)據(jù)庫(kù)查詢條件.Wrapper類 允許開發(fā)者以鏈?zhǔn)秸{(diào)用的方式構(gòu)造查詢條件,無(wú)需編寫繁瑣的 SQL 語(yǔ)句, 從而提高開發(fā)效率并減少 SQL 注入的風(fēng)險(xiǎn).

以下是主要的 Wrapper 類及其功能:

類名核心定位核心特性 / 拓展功能
AbstractWrapper抽象基類(所有 Wrapper 父類)提供所有 Wrapper 類共有的方法和屬性(如條件拼接、排序、分頁(yè)等基礎(chǔ)能力)
QueryWrapper通用查詢條件構(gòu)造器繼承 AbstractWrapper,額外拓展 select() 方法,支持手動(dòng)指定查詢字段(如只查 id、username)
UpdateWrapper通用更新條件構(gòu)造器繼承 AbstractWrapper,專注于 UPDATE 操作,支持拼接更新條件 + 手動(dòng)指定 SET 字段值
LambdaQueryWrapperLambda 版查詢構(gòu)造器基于 QueryWrapper,通過(guò) Lambda 表達(dá)式引用實(shí)體類屬性(如 User::getAge),替代硬編碼字段名
LambdaUpdateWrapperLambda 版更新構(gòu)造器基于 UpdateWrapper,通過(guò) Lambda 表達(dá)式指定更新字段和條件,替代硬編碼字段名

具體可查看官網(wǎng):https://baomidou.com/guides/wrapper/

接下來(lái)我們來(lái)看具體如何實(shí)現(xiàn):

3.2.1 QueryWrapper

QueryWrapper并不只用于查詢語(yǔ)句,無(wú)論是修改, 刪除, 查詢,都可以使用 QueryWrapper來(lái)構(gòu)建查詢條件.

QueryWrapper 最核心的兩大能力:指定查詢字段(select) + 構(gòu)建查詢條件(where)

完成以下SQL查詢:(查詢)

SELECT id,username,password,age FROM user_info WHERE age = 18 AND username 
"%min%"

測(cè)試代碼如下:

@Test
void testQueryWrapper(){
	QueryWrapper<UserInfo> queryWrapper =new QueryWrapper<UserInfo>()
			.select("user_name","password","age")
			.eq("age",18)
			.like("user_name","min");//鏈?zhǔn)秸{(diào)用
	List<UserInfo> userInfoList=userInfoMapper.selectList(queryWrapper);
}

完成下述SQL查詢:(更新)

UPDATE user_info SET delete_flag=? WHERE age < 20

測(cè)試代碼如下:

@Test
void testUpdateByQueryWrapper(){
	QueryWrapper<UserInfo> queryWrapper =new QueryWrapper<UserInfo>()
			.lt("age",18); //構(gòu)造條件 where age<18
	UserInfo userInfo=new UserInfo();
	userInfo.setDeleteFlag(1);
    userInfoMapper.update(userInfo,queryWrapper);
}

MyBatis-Plus 條件構(gòu)造器核心比較方法速查表:(注意:所有基于 AbstractWrapper 派生的條件構(gòu)造器都可以使用)

方法名中文含義對(duì)應(yīng) SQL 運(yùn)算符
lt小于<
le小于等于<=
ge大于等于>=
gt大于>
eq等于=
ne不等于<>/!=

完成下述SQL查詢:(刪除)

DELETE FROM user_info WHERE age = 18

測(cè)試代碼:

@Test
void testDeleteByQueryWrapper(){
	QueryWrapper<UserInfo> queryWrapper =new QueryWrapper<UserInfo>()
			.eq("age",18);
	userInfoMapper.delete(queryWrapper);
}

3.3.2 UpdateWrapper

對(duì)于更新, 我們也可以直接使用 UpdateWrapper, 在不創(chuàng)建實(shí)體對(duì)象的情況下, 直接設(shè)置更新字段和條件.

UpdateWrapper 最核心的兩大能力:構(gòu)建字段賦值(set)+ 構(gòu)建更新條件條件(where)

完成下述SQL查詢:(基礎(chǔ)更新):

UPDATE user_info SET delete_flag=0, age=5 WHERE id IN (1,2,3)

測(cè)試代碼:

@Test
void testUpdateByUpdateWrapper(){
	UpdateWrapper<UserInfo> updateWrapper=new UpdateWrapper<UserInfo>()
			.set("delete_flag",0)
			.set("age", 5)
			.in("id",List.of(1,2,3));
	userInfoMapper.update(updateWrapper);
}

完成下述SQL查詢:(基于SQL更新)

UPDATE user_info SET age = age+10 WHERE id IN (1,2,3)

測(cè)試代碼:

@Test
void testUpdateBySQLUpdateWrapper(){
	UpdateWrapper<UserInfo> updateWrapper=new UpdateWrapper<UserInfo>()
			.setSql("age=age+10")
			.in("id",List.of(1,2,3));
	userInfoMapper.update(updateWrapper);
}
對(duì)比項(xiàng)set() 方法setSql() 方法
賦值方式靜態(tài)值賦值(字段 = 固定值)自定義 SQL 片段賦值
適用場(chǎng)景簡(jiǎn)單賦值(如 status = 1)復(fù)雜賦值(如字段自增、函數(shù)計(jì)算)
語(yǔ)法set("字段名", 固定值)setSql("SQL片段")

3.3.3 LambdaQueryWrapper

QueryWrapper 和 UpdateWrapper存在?個(gè)問(wèn)題,就是需要寫死數(shù)據(jù)庫(kù)列名字段名 , 如果字段名發(fā)生變更,可能會(huì)因?yàn)闇y(cè)試不到位釀成事故. MyBatis-Plus給我們提供了?種基于Lambda表達(dá)式的條件構(gòu)造器,它通過(guò)Lambda表達(dá)式來(lái)引用實(shí)體類的屬性,從而避免了硬編碼字段名,也提高了代碼的可讀性和可維護(hù)性.

接下來(lái)我們看下具體使用:

寫法一:

@Test
void testLambdaQueryWrapper(){
	QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<UserInfo>();
	queryWrapper.lambda()
		        .select(UserInfo::getUserName, UserInfo::getPassword,UserInfo::getAge)
		        .eq(UserInfo::getUserid, 1);
	 userInfoMapper.selectList(queryWrapper);
}

寫法二:

@Test
void testLambdaQueryWrapper(){
	LambdaQueryWrapper<UserInfo> lambdaQueryWrapper=new LambdaQueryWrapper<UserInfo>()
		        .select(UserInfo::getUserName, UserInfo::getPassword,UserInfo::getAge)
		        .eq(UserInfo::getUserid, 1);
	 userInfoMapper.selectList(lambdaQueryWrapper);
}

3.3.4 LambdaUpdateWrapper

LambdaUpdateWrapper 用法和 LambdaQueryWrapper 相似

@Test
void testLambdUpdateByUpdateWrapper(){
//同樣有兩種寫法,這里只寫一種
 UpdateWrapper<UserInfo> updateWrapper = new UpdateWrapper<UserInfo>();
 updateWrapper.lambda()
 .set(UserInfo::getDeleteFlag, 0)
 .set(UserInfo::getAge, 5)
 .in(UserInfo::getUserId, List.of(1,2,3));
 userInfoMapper.update(updateWrapper);
}

3.3 自定義SQL

在實(shí)際的開發(fā)中, MyBatis-Plus提供的操作不能滿足我們的實(shí)際需求, MyBatis-Plus 也提供了自定義 SQL的功能, 我們可以利用Wrapper構(gòu)造查詢條件,再結(jié)合Mapper編寫SQL

注意事項(xiàng):

• 參數(shù)命名:在自定義SQL時(shí),傳遞Wrapper對(duì)象作為參數(shù)時(shí),參數(shù)名必須為ew ,或者使用注解 @Param(Constants.WRAPPER) 明確指定參數(shù)為 Wrapper 對(duì)象.

• 使用${ew.customSqlSegment} :在SQL語(yǔ)句中,使用 ${ew.customSqlSegment} 來(lái) 引用Wrapper對(duì)象生成的SQL片段.

• 不支持基于entity的where語(yǔ)句:自定義SQL時(shí),Wrapper對(duì)象不會(huì)基于實(shí)體類自動(dòng)生成 where子句,你需要手動(dòng)編寫完整的SQL語(yǔ)句.(即必須使用占位符)

代碼示例1:

select id,username,password,age FROM user_info WHERE username = "admin"

Mapper接口:

@Mapper
public interface UserInfoMapper extends BaseMapper<UserInfo> {
    @Select("select id,username,password,age FROM user_info ${ew.customSqlSegment}")
    List<UserInfo> queryUserByCustom( @Param(Constants.WRAPPER) Wrapper<UserInfo> wrapper);//括號(hào)里等同于 Wrapper<UserInfo> ew
}

測(cè)試代碼:

 @Test
    void queryUserByCustom() {
        QueryWrapper<UserInfo> queryWrapper=new QueryWrapper<UserInfo>()
                .eq("username","admin");
        List<UserInfo> userInfo=userInfoMapper.queryUserByCustom(queryWrapper);
        System.out.println(userInfo);
    }

代碼示例二:

MyBatis-Plus 在 MyBatis 的基礎(chǔ)上只做增強(qiáng)不做改變,所以也支持XML的實(shí)現(xiàn)方式上述功能也可以使用XML的方式完成

1. 配置mapper路徑

mybatis-plus:
 mapper-locations: "classpath*:/mapper/**.xml" # Mapper.xml

2. 定義?法

@Mapper 
public interface UserInfoMapper extends BaseMapper {
 List queryUserByCustom2(@Param(Constants.WRAPPER) Wrapper wrapper);
 }

3. 編寫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="com.bite.mybatis.plus.mapper.UserInfoMapper">
 <select id="queryUserByCustom2">
 select id,username,password,age FROM user_info ${ew.customSqlSegment}
 </select>
</mapper>

4. 測(cè)試:

@Test
void testQueryUserByCustom2(){
 QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<UserInfo>()
 .eq("username","admin");
 
userInfoMapper.queryUserByCustom2(queryWrapper).forEach(System.out::println);
}

代碼示例3:

UPDATE user_info SET age = age+10 WHERE id IN (1,2,3)

Mapper接口:

@Mapper
public interface UserInfoMapper extends BaseMapper<UserInfo> {
@Update("UPDATE user_info SET age = age+ #{addAge} ${ew.customSqlSegment}")
    void updateUserByCustom(@Param("addAge") Integer add ,@Param("ew") Wrapper<UserInfo> wrapper);
}

測(cè)試代碼:

    @Test
    void updateUserByCustom() {
     QueryWrapper<UserInfo> queryWrapper=new QueryWrapper<UserInfo>()
             .in("id",List.of(1,2,3));
     userInfoMapper.updateUserByCustom(10,queryWrapper);
    }

到此這篇關(guān)于MyBatis-Plus高效開發(fā)實(shí)戰(zhàn)指南的文章就介紹到這了,更多相關(guān)MyBatis-Plus高效開發(fā)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用kotlin編寫spring cloud微服務(wù)的過(guò)程

    使用kotlin編寫spring cloud微服務(wù)的過(guò)程

    這篇文章主要介紹了使用kotlin編寫spring cloud微服務(wù)的相關(guān)知識(shí),本文給大家提到配置文件的操作代碼,給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • 詳解使用JavaCV/OpenCV抓取并存儲(chǔ)攝像頭圖像

    詳解使用JavaCV/OpenCV抓取并存儲(chǔ)攝像頭圖像

    本篇文章主要介紹了使用JavaCV/OpenCV抓取并存儲(chǔ)攝像頭圖像,實(shí)例分析了使用JavaCV/OpenCV抓取并存儲(chǔ)攝像頭圖像的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-04-04
  • 如何在Java SpringBoot項(xiàng)目中配置動(dòng)態(tài)數(shù)據(jù)源你知道嗎

    如何在Java SpringBoot項(xiàng)目中配置動(dòng)態(tài)數(shù)據(jù)源你知道嗎

    這篇文章主要介紹了SpringBoot如何在運(yùn)行時(shí)動(dòng)態(tài)添加數(shù)據(jù)源,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-09-09
  • Springboot中登錄后關(guān)于cookie和session攔截問(wèn)題的案例分析

    Springboot中登錄后關(guān)于cookie和session攔截問(wèn)題的案例分析

    這篇文章主要介紹了Springboot中登錄后關(guān)于cookie和session攔截案例,本文通過(guò)實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 基于java構(gòu)造方法Vevtor添加元素源碼分析

    基于java構(gòu)造方法Vevtor添加元素源碼分析

    這篇文章主要介紹了基于java構(gòu)造方法中對(duì)Vevtor添加元素的源碼分析,有需要的朋友可以借鑒參考下,希望可以對(duì)大家有所幫助,祝大家早日升職加薪
    2021-09-09
  • springboot代碼,注解配置獲取yml,properties文件的map即鍵值對(duì)

    springboot代碼,注解配置獲取yml,properties文件的map即鍵值對(duì)

    這篇文章主要介紹了springboot代碼,注解配置獲取yml,properties文件的map即鍵值對(duì),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • SpringBoot整合阿里?Druid?數(shù)據(jù)源的實(shí)例詳解

    SpringBoot整合阿里?Druid?數(shù)據(jù)源的實(shí)例詳解

    這篇文章主要介紹了SpringBoot整合阿里?Druid?數(shù)據(jù)源,主要講解了手動(dòng)配置方法,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-11-11
  • Spring3?中?RabbitMQ?的使用與常見場(chǎng)景分析

    Spring3?中?RabbitMQ?的使用與常見場(chǎng)景分析

    本文介紹了Spring3中RabbitMQ的使用,涵蓋了RabbitMQ的基本知識(shí)、五種模式、數(shù)據(jù)隔離、消費(fèi)者確認(rèn)、死信交換機(jī)、延遲功能、消息堆積解決方法、高可用性以及消息重復(fù)消費(fèi)問(wèn)題的解決方案,感興趣的朋友跟隨小編一起看看吧
    2025-02-02
  • java8中新的Date和Time詳解

    java8中新的Date和Time詳解

    這篇文章主要是java8中新的Date和Time,探討新Date類和Time類背后的設(shè)計(jì)原則,有所需要的小伙伴希望能幫助到你
    2016-07-07
  • java poi設(shè)置生成的word的圖片為上下型環(huán)繞以及其位置的實(shí)現(xiàn)

    java poi設(shè)置生成的word的圖片為上下型環(huán)繞以及其位置的實(shí)現(xiàn)

    這篇文章主要介紹了java poi設(shè)置生成的word的圖片為上下型環(huán)繞以及其位置的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09

最新評(píng)論

文登市| 肇东市| 嵊泗县| 嵩明县| 田阳县| 广宗县| 苏尼特左旗| 梅河口市| 芜湖县| 武鸣县| 凌云县| 镇坪县| 镶黄旗| 镇原县| 云南省| 龙井市| 房产| 揭阳市| 东光县| 永寿县| 景谷| 分宜县| 华坪县| 铁岭县| 大洼县| 铜鼓县| 陈巴尔虎旗| 玉龙| 鞍山市| 金华市| 固原市| 库尔勒市| 广饶县| 英德市| 疏附县| 温泉县| 章丘市| 平远县| 富民县| 田阳县| 石城县|