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

Mybatis-plus對(duì)單表操作的封裝實(shí)現(xiàn)

 更新時(shí)間:2024年12月19日 09:08:39   作者:five-five  
本文詳細(xì)介紹了MyBatis-Plus單表操作,包括自定義SQL、邏輯刪除、樂(lè)觀鎖、全局?jǐn)r截器和代碼生成器等,具有一定的參考價(jià)值,感興趣的可以了解一下

MyBatis-Plus是一個(gè)基于MyBatis的增強(qiáng)工具,它提供了豐富的CRUD操作和分頁(yè)查詢等功能,極大地簡(jiǎn)化了開(kāi)發(fā)人員的數(shù)據(jù)庫(kù)操作。本文將詳細(xì)介紹MyBatis-Plus官方已經(jīng)寫(xiě)好的單表操作,并提供一些拓展內(nèi)容。

1. 引言

在進(jìn)行單表操作之前,我們需要定義一個(gè)實(shí)體類(lèi)和對(duì)應(yīng)的Mapper接口。以下是一個(gè)簡(jiǎn)單的實(shí)體類(lèi)和Mapper接口示例:

@Data
@TableName("user")
public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    private String username;
    private String password;
    private Integer age;
}

@Mapper
public interface UserMapper extends BaseMapper<User> {
}

在實(shí)體類(lèi)上使用@TableName注解指定對(duì)應(yīng)的數(shù)據(jù)庫(kù)表名,使用@TableId注解指定主鍵字段。在Mapper接口上使用@Mapper注解標(biāo)識(shí)該接口為Mapper接口,并繼承BaseMapper<User>,這樣就可以直接使用MyBatis-Plus提供的CRUD操作方法。

2. 單表操作

2.1 插入操作

插入操作可以使用insert方法,示例代碼如下:

User user = new User();
user.setUsername("Tom");
user.setPassword("123456");
user.setAge(18);

UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
int result = userMapper.insert(user);
if (result > 0) {
    System.out.println("插入成功");
}

2.2 查詢操作

查詢操作可以使用selectById、selectListselectPage等方法,示例代碼如下:

UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

// 根據(jù)ID查詢
User user = userMapper.selectById(1L);

// 根據(jù)條件查詢
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(User::getUsername, "Tom");
List<User> userList = userMapper.selectList(queryWrapper);

// 分頁(yè)查詢
Page<User> page = new Page<>(1, 10);
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.orderByDesc(User::getAge);
IPage<User> resultPage = userMapper.selectPage(page, queryWrapper);
List<User> userList = resultPage.getRecords();

2.3 更新操作

更新操作可以使用updateById方法,示例代碼如下:

User user = new User();
user.setId(1L);
user.setUsername("Jerry");
user.setPassword("654321");
user.setAge(20);

UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
int result = userMapper.updateById(user);
if (result > 0) {
    System.out.println("更新成功");
}

2.4 刪除操作

刪除操作可以使用deleteById、deleteBatchIds、delete等方法,示例代碼如下:

UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

// 根據(jù)ID刪除
int result = userMapper.deleteById(1L);
if (result > 0) {
    System.out.println("刪除成功");
}

// 根據(jù)條件刪除
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(User::getUsername, "Tom");
int result = userMapper.delete(queryWrapper);
if (result > 0) {
    System.out.println("刪除成功");
}

3. 拓展內(nèi)容

除了官方提供的基本CRUD操作外,MyBatis-Plus還提供了許多其他功能和拓展,以下是一些常用的拓展內(nèi)容:

3.1 自定義SQL

如果需要自定義SQL語(yǔ)句,可以使用BaseMapper提供的selectList、selectByIdinsert、updateById、deleteById等方法的重載版本,傳入Wrapper對(duì)象和RowBounds對(duì)象進(jìn)行自定義查詢和分頁(yè)。

UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

// 自定義SQL查詢
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.select(User::getId, User::getUsername)
            .orderByAsc(User::getAge);
List<User> userList = userMapper.selectList(queryWrapper, new RowBounds(0, 10));

// 自定義SQL插入
User user = new User();
user.setUsername("CustomUser");
user.setPassword("password");
user.setAge(25);
int result = userMapper.insert(user, new InsertWrapper<User>().setSql("INSERT INTO user(username, password, age) VALUES(#{username}, #{password}, #{age})"));

// 自定義SQL更新
User updateUser = new User();
updateUser.setId(1L);
updateUser.setUsername("UpdatedUser");
updateUser.setPassword("updatedPassword");
int result = userMapper.updateById(updateUser, new UpdateWrapper<User>

3.2 邏輯刪除

MyBatis-Plus提供了邏輯刪除功能,可以通過(guò)配置實(shí)體類(lèi)和數(shù)據(jù)庫(kù)表字段實(shí)現(xiàn)。邏輯刪除是指在數(shù)據(jù)庫(kù)中將記錄的刪除標(biāo)志位設(shè)置為已刪除,而不是物理刪除記錄。這樣可以避免誤刪除數(shù)據(jù),同時(shí)也可以滿足一些特殊需求,例如數(shù)據(jù)恢復(fù)、數(shù)據(jù)審計(jì)等。

要使用邏輯刪除功能,需要在實(shí)體類(lèi)上使用@TableLogic注解標(biāo)識(shí)刪除標(biāo)志位字段,并在Mapper接口上使用@Mapper注解的logicDelete屬性啟用邏輯刪除功能。示例代碼如下:

@Data
@TableName("user")
@TableLogic(value = "deleted", delval = "1")
public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    private String username;
    private String password;
    private Integer age;
    private Integer deleted;
}

@Mapper(logicDelete = true)
public interface UserMapper extends BaseMapper<User> {
}

在實(shí)體類(lèi)上使用@TableLogic注解指定刪除標(biāo)志位字段和已刪除值,在Mapper接口上使用@Mapper注解的logicDelete屬性啟用邏輯刪除功能。這樣就可以使用deleteById、deleteBatchIdsdelete等方法進(jìn)行邏輯刪除操作。

3.3 樂(lè)觀鎖

MyBatis-Plus提供了樂(lè)觀鎖功能,可以通過(guò)配置實(shí)體類(lèi)和數(shù)據(jù)庫(kù)表字段實(shí)現(xiàn)。樂(lè)觀鎖是一種并發(fā)控制策略,它假設(shè)多個(gè)事務(wù)并發(fā)執(zhí)行時(shí)不會(huì)發(fā)生沖突,每個(gè)事務(wù)在提交時(shí)都會(huì)驗(yàn)證其操作的數(shù)據(jù)是否已經(jīng)被其他事務(wù)修改過(guò)。如果發(fā)現(xiàn)數(shù)據(jù)已經(jīng)被修改,則當(dāng)前事務(wù)會(huì)回滾,避免了數(shù)據(jù)不一致的問(wèn)題。

要使用樂(lè)觀鎖功能,需要在實(shí)體類(lèi)上使用@Version注解標(biāo)識(shí)版本號(hào)字段,并在Mapper接口上使用@Mapper注解的optimisticLocker屬性啟用樂(lè)觀鎖功能。示例代碼如下:

@Data
@TableName("user")
@Version
public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    private String username;
    private String password;
    private Integer age;
    private Integer version;
}

@Mapper(optimisticLocker = true)
public interface UserMapper extends BaseMapper<User> {
}

在實(shí)體類(lèi)上使用@Version注解標(biāo)識(shí)版本號(hào)字段,在Mapper接口上使用@Mapper注解的optimisticLocker屬性啟用樂(lè)觀鎖功能。這樣就可以使用updateById等方法進(jìn)行樂(lè)觀鎖更新操作。

3.4 全局?jǐn)r截器

MyBatis-Plus提供了全局?jǐn)r截器功能,可以通過(guò)實(shí)現(xiàn)Interceptor接口自定義攔截器,并在配置文件中注冊(cè)攔截器。全局?jǐn)r截器可以攔截所有的SQL語(yǔ)句,并在SQL執(zhí)行前后進(jìn)行一些自定義操作,例如記錄日志、權(quán)限校驗(yàn)等。

示例代碼如下:

@Component
@Intercepts({@Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class})})
public class MyInterceptor implements Interceptor {
    @Override
    public InterceptResult intercept(Invocation invocation) throws Throwable {
        // 在SQL執(zhí)行前進(jìn)行一些自定義操作
        System.out.println("Before SQL: " + invocation.getTarget());

        // 執(zhí)行SQL語(yǔ)句
        Object result = invocation.proceed();

        // 在SQL執(zhí)行后進(jìn)行一些自定義操作
        System.out.println("After SQL: " + invocation.getTarget());

        return InterceptResult.success(result);
    }
}

實(shí)現(xiàn)Interceptor接口,并使用@Intercepts注解標(biāo)識(shí)攔截的方法和參數(shù)類(lèi)型。在intercept方法中進(jìn)行自定義操作,并使用invocation.proceed()執(zhí)行SQL語(yǔ)句。最后返回InterceptResult.success(result)表示攔截器執(zhí)行成功。

在配置文件中注冊(cè)攔截器,示例代碼如下:

<mybatis-plus>
    <configuration>
        <interceptors>
            <interceptor class="com.example.MyInterceptor"/>
        </interceptors>
    </configuration>
</mybatis-plus>

mybatis-plus標(biāo)簽中配置configuration標(biāo)簽,在configuration標(biāo)簽中配置interceptors標(biāo)簽,在interceptors標(biāo)簽中配置自定義攔截器類(lèi)。

3.5 代碼生成器

MyBatis-Plus提供了代碼生成器功能,可以通過(guò)配置文件自動(dòng)生成實(shí)體類(lèi)、Mapper接口、Service接口和Controller接口等代碼。代碼生成器可以大大提高開(kāi)發(fā)效率,避免重復(fù)勞動(dòng)。

示例代碼如下:

<mybatis-plus-generator>
    <global-config>
        <output-dir>D:\code\mybatis-plus-generator\src\main\java</output-dir>
        <author>zhangsan</author>
        <open>false</open>
    </global-config>
    <data-source>
        <url>jdbc:mysql://localhost:3306/mybatis_plus</url>
        <username>root</username>
        <password>123456</password>
        <driver-class-name>com.mysql.jdbc.Driver</driver-class-name>
    </data-source>
    <package-info>
        <module-name>user</module-name>
        <parent>com.example</parent>
    </package-info>
    <strategy>
        <table-prefix>t_</table-prefix>
        <entity-lombok-model>true</entity-lombok-model>
        <rest-controller-style>true</rest-controller-style>
        <controller-mapping-hyphen-style>true</controller-mapping-hyphen-style>
        <include>t_user</include>
    </strategy>
</mybatis-plus-generator>

mybatis-plus-generator標(biāo)簽中配置代碼生成器的全局配置、數(shù)據(jù)源配置、包信息配置和策略配置。在global-config標(biāo)簽中配置輸出目錄、作者信息和是否自動(dòng)打開(kāi)生成的文件夾。在data-source標(biāo)簽中配置數(shù)據(jù)庫(kù)連接信息。在package-info標(biāo)簽中配置包名信息。在strategy標(biāo)簽中配置表名前綴、實(shí)體類(lèi)是否使用Lombok注解、Controller接口是否使用RESTful風(fēng)格和需要生成的表名。

運(yùn)行代碼生成器后,會(huì)自動(dòng)生成實(shí)體類(lèi)、Mapper接口、Service接口和Controller接口等代碼。

4. 總結(jié)

MyBatis-Plus是一個(gè)非常強(qiáng)大的ORM框架,它提供了豐富的CRUD操作和分頁(yè)查詢等功能,同時(shí)也提供了許多其他功能和拓展,例如自定義SQL、邏輯刪除、樂(lè)觀鎖、全局?jǐn)r截器和代碼生成器等。使用MyBatis-Plus可以大大提高開(kāi)發(fā)效率,同時(shí)也可以滿足一些特殊需求。

到此這篇關(guān)于Mybatis-plus對(duì)單表操作的封裝實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Mybatisplus 單表操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文教會(huì)Java新手使用Spring?MVC中的查詢字符串和查詢參數(shù)

    一文教會(huì)Java新手使用Spring?MVC中的查詢字符串和查詢參數(shù)

    在使用springMVC框架構(gòu)建web應(yīng)用,客戶端常會(huì)請(qǐng)求字符串、整型、json等格式的數(shù)據(jù),這篇文章主要給大家介紹了關(guān)于通過(guò)一文教會(huì)Java新手使用Spring?MVC中的查詢字符串和查詢參數(shù)的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • Java中線程狀態(tài)+線程安全問(wèn)題+synchronized的用法詳解

    Java中線程狀態(tài)+線程安全問(wèn)題+synchronized的用法詳解

    這篇文章主要介紹了Java中線程狀態(tài)+線程安全問(wèn)題+synchronized的用法詳解,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • 2020年編程選Java的8大理由,JAVA前景如何

    2020年編程選Java的8大理由,JAVA前景如何

    這篇文章主要介紹了2020年編程選Java的8大理由,JAVA前景如何,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • IntelliJ?IDEA?2021.3永久最新激活至2099年(親測(cè)有效)

    IntelliJ?IDEA?2021.3永久最新激活至2099年(親測(cè)有效)

    最新版idea2021.3已出來(lái),很多網(wǎng)友迫不及待的要升級(jí)idea2021最新版,今天小編抽空給大家整理了一篇教程關(guān)于idea2021.3最新激活教程,本文以idea2021.2.3為例通過(guò)圖文并茂的形式給大家分享激活詳細(xì)過(guò)程,感興趣的朋友參考下吧
    2020-12-12
  • 設(shè)置Myeclipse中的代碼格式化、注釋模板及保存時(shí)自動(dòng)格式化

    設(shè)置Myeclipse中的代碼格式化、注釋模板及保存時(shí)自動(dòng)格式化

    這篇文章主要介紹了設(shè)置Myeclipse中的代碼格式化、注釋模板及保存時(shí)自動(dòng)格式化方法,需要的朋友可以參考下
    2014-10-10
  • Maven使用方法詳及方式詳細(xì)介紹

    Maven使用方法詳及方式詳細(xì)介紹

    使用maven倉(cāng)庫(kù)的話需要從網(wǎng)上下載maven的包,比如“apache-maven-3.5.4-bin.tar”,下載完成之后解壓,在解壓的文件夾中的conf目錄下的settings.xml文件夾下就可以配置maven遠(yuǎn)程倉(cāng)庫(kù)和本地倉(cāng)庫(kù)的地址
    2022-11-11
  • spring boot 實(shí)現(xiàn)熱部署的幾種方式及配置方法

    spring boot 實(shí)現(xiàn)熱部署的幾種方式及配置方法

    這篇文章主要介紹了spring boot 實(shí)現(xiàn)熱部署的幾種方式及配置方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2025-05-05
  • Java利用字符流輕松處理文本數(shù)據(jù)

    Java利用字符流輕松處理文本數(shù)據(jù)

    在Java中,文本數(shù)據(jù)是經(jīng)常處理的一種數(shù)據(jù)類(lèi)型,而字符流就是用來(lái)處理文本數(shù)據(jù)的一種流,下面就為大家介紹一下Java字符流的基本概念、常用類(lèi)和方法,以及如何使用字符流來(lái)讀寫(xiě)文件吧
    2023-09-09
  • MyBatis插件實(shí)現(xiàn)SQL執(zhí)行耗時(shí)監(jiān)控

    MyBatis插件實(shí)現(xiàn)SQL執(zhí)行耗時(shí)監(jiān)控

    MyBatis插件(Plugin)是其框架擴(kuò)展性的核心,本文深入剖析插件實(shí)現(xiàn)原理,手把手教你開(kāi)發(fā)企業(yè)級(jí)SQL監(jiān)控插件,有需要的小伙伴可以了解下
    2025-12-12
  • spring-boot-maven-plugin:unknown的完美解決方法

    spring-boot-maven-plugin:unknown的完美解決方法

    這篇文章主要介紹了spring-boot-maven-plugin:unknown的完美解決方法,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11

最新評(píng)論

紫阳县| 阆中市| 永城市| 宾阳县| 牟定县| 安顺市| 高雄县| 门头沟区| 湘潭市| 郴州市| 祁门县| 内丘县| SHOW| 西乡县| 乐至县| 芦溪县| 抚松县| 聂拉木县| 宁陕县| 山东省| 安顺市| 凤翔县| 晴隆县| 闽清县| 广宁县| 巴青县| 团风县| 贺州市| 扶风县| 清苑县| 东辽县| 黄浦区| 腾冲县| 东乡族自治县| 双鸭山市| 红安县| 前郭尔| 镇安县| 阿拉善盟| 张家港市| 双鸭山市|