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

淺談Mybatis Plus的BaseMapper的方法是如何注入的

 更新時間:2021年09月15日 10:34:29   作者:王偉王胖胖  
我們在用的時候經(jīng)常就是生產(chǎn)自定義的Mapper繼承自BaseMapper,那么BaseMapper怎么被注入到mybatis里的,本文就詳細的介紹一下,感興趣的可以了解一下

Mybatis Plus的BaseMapper的方法

我們在用的時候經(jīng)常就是生產(chǎn)自定義的Mapper繼承自BaseMapper,然后我們就可以使用了,但是有沒想過BaseMapper里的方法是怎么被注入到mybatis里的,也沒看到什么xml啊,今天我們就來看看是怎么回事。

在這里插入圖片描述

Mybatis Plus的初始化方法

MybatisPlusAutoConfiguration中的SqlSessionFactory

在創(chuàng)建的時候會創(chuàng)建MybatisSqlSessionFactoryBean,然后設(shè)置MybatisConfiguration作為配置類。

在這里插入圖片描述

MybatisConfiguration是繼承自Configuration的:

在這里插入圖片描述

自定義了一個MybatisMapperRegistry注冊器,后面會用到。

在這里插入圖片描述

BaseMapper方法的注入的過程

MybatisSqlSessionFactoryBean的初始化后方法afterPropertiesSet調(diào)用buildSqlSessionFactory創(chuàng)建SqlSessionFactory

在這里插入圖片描述

其實就會去解析自定義的mapperxml文件:

在這里插入圖片描述

在這里插入圖片描述

其中有個addMapper的方法,是前面MybatisConfiguration調(diào)用的。

在這里插入圖片描述

會解析出對應(yīng)的類型,然后內(nèi)部調(diào)用MybatisMapperRegistry的方法:

在這里插入圖片描述

內(nèi)部最后是MybatisMapperAnnotationBuilder去解析的:

在這里插入圖片描述

里面會進行基本的SQL方法注入:

在這里插入圖片描述

在這里插入圖片描述

完成每個方法的注入:

在這里插入圖片描述

注入的實現(xiàn):

在這里插入圖片描述

其實每一個AbstractMethod的子類都會實現(xiàn)自己的injectMappedStatement

在這里插入圖片描述

在這里插入圖片描述

最后會去枚舉類SqlMethod中獲取對應(yīng)的枚舉,里面就是類似定義在xml中的信息,最后轉(zhuǎn)換為sqlSource再進行封裝:

在這里插入圖片描述

SqlMethod 枚舉值:

public enum SqlMethod {
    /**
     * 插入
     */
    INSERT_ONE("insert", "插入一條數(shù)據(jù)(選擇字段插入)", "<script>\nINSERT INTO %s %s VALUES %s\n</script>"),
    UPSERT_ONE("upsert", "Phoenix插入一條數(shù)據(jù)(選擇字段插入)", "<script>\nUPSERT INTO %s %s VALUES %s\n</script>"),

    /**
     * 刪除
     */
    DELETE_BY_ID("deleteById", "根據(jù)ID 刪除一條數(shù)據(jù)", "<script>\nDELETE FROM %s WHERE %s=#{%s}\n</script>"),
    DELETE_BY_MAP("deleteByMap", "根據(jù)columnMap 條件刪除記錄", "<script>\nDELETE FROM %s %s\n</script>"),
    DELETE("delete", "根據(jù) entity 條件刪除記錄", "<script>\nDELETE FROM %s %s %s\n</script>"),
    DELETE_BATCH_BY_IDS("deleteBatchIds", "根據(jù)ID集合,批量刪除數(shù)據(jù)", "<script>\nDELETE FROM %s WHERE %s IN (%s)\n</script>"),

    /**
     * 邏輯刪除
     */
    LOGIC_DELETE_BY_ID("deleteById", "根據(jù)ID 邏輯刪除一條數(shù)據(jù)", "<script>\nUPDATE %s %s WHERE %s=#{%s} %s\n</script>"),
    LOGIC_DELETE_BY_MAP("deleteByMap", "根據(jù)columnMap 條件邏輯刪除記錄", "<script>\nUPDATE %s %s %s\n</script>"),
    LOGIC_DELETE("delete", "根據(jù) entity 條件邏輯刪除記錄", "<script>\nUPDATE %s %s %s %s\n</script>"),
    LOGIC_DELETE_BATCH_BY_IDS("deleteBatchIds", "根據(jù)ID集合,批量邏輯刪除數(shù)據(jù)", "<script>\nUPDATE %s %s WHERE %s IN (%s) %s\n</script>"),

    /**
     * 修改
     */
    UPDATE_BY_ID("updateById", "根據(jù)ID 選擇修改數(shù)據(jù)", "<script>\nUPDATE %s %s WHERE %s=#{%s} %s\n</script>"),
    UPDATE("update", "根據(jù) whereEntity 條件,更新記錄", "<script>\nUPDATE %s %s %s %s\n</script>"),

    /**
     * 邏輯刪除 -> 修改
     */
    LOGIC_UPDATE_BY_ID("updateById", "根據(jù)ID 修改數(shù)據(jù)", "<script>\nUPDATE %s %s WHERE %s=#{%s} %s\n</script>"),

    /**
     * 查詢
     */
    SELECT_BY_ID("selectById", "根據(jù)ID 查詢一條數(shù)據(jù)", "SELECT %s FROM %s WHERE %s=#{%s} %s"),
    SELECT_BY_MAP("selectByMap", "根據(jù)columnMap 查詢一條數(shù)據(jù)", "<script>SELECT %s FROM %s %s\n</script>"),
    SELECT_BATCH_BY_IDS("selectBatchIds", "根據(jù)ID集合,批量查詢數(shù)據(jù)", "<script>SELECT %s FROM %s WHERE %s IN (%s) %s</script>"),
    SELECT_ONE("selectOne", "查詢滿足條件一條數(shù)據(jù)", "<script>%s SELECT %s FROM %s %s %s\n</script>"),
    SELECT_COUNT("selectCount", "查詢滿足條件總記錄數(shù)", "<script>%s SELECT COUNT(%s) FROM %s %s %s\n</script>"),
    SELECT_LIST("selectList", "查詢滿足條件所有數(shù)據(jù)", "<script>%s SELECT %s FROM %s %s %s\n</script>"),
    SELECT_PAGE("selectPage", "查詢滿足條件所有數(shù)據(jù)(并翻頁)", "<script>%s SELECT %s FROM %s %s %s\n</script>"),
    SELECT_MAPS("selectMaps", "查詢滿足條件所有數(shù)據(jù)", "<script>%s SELECT %s FROM %s %s %s\n</script>"),
    SELECT_MAPS_PAGE("selectMapsPage", "查詢滿足條件所有數(shù)據(jù)(并翻頁)", "<script>\n %s SELECT %s FROM %s %s %s\n</script>"),
    SELECT_OBJS("selectObjs", "查詢滿足條件所有數(shù)據(jù)", "<script>%s SELECT %s FROM %s %s %s\n</script>");

    private final String method;
    private final String desc;
    private final String sql;

    SqlMethod(String method, String desc, String sql) {
        this.method = method;
        this.desc = desc;
        this.sql = sql;
    }

    public String getMethod() {
        return method;
    }

    public String getDesc() {
        return desc;
    }

    public String getSql() {
        return sql;
    }
}

最終還是調(diào)用了MapperBuilderAssistantaddMappedStatement進行注冊:

在這里插入圖片描述

總結(jié)

  •  初始化注入自定義的MybatisConfiguration和MybatisMapperRegistry。
  • 解析Mapper類,獲取方法對應(yīng)的AbstractMethod。
  • 調(diào)用各自的實現(xiàn)進行去SqlMethod獲取對應(yīng)的枚舉,獲取到信息后進行注冊。

其實就相當于代碼里面定義了原本需要再xx.xml定義的數(shù)據(jù),直接在代碼中獲取注入常用的CRUD操作即可。

到此這篇關(guān)于淺談Mybatis Plus的BaseMapper的方法是如何注入的的文章就介紹到這了,更多相關(guān)Mybatis Plus BaseMapper注入內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

和政县| 车险| 固安县| 汉沽区| 淄博市| 陆良县| 张家口市| 繁昌县| 湘阴县| 竹山县| 凭祥市| 聊城市| 泰顺县| 离岛区| 陆川县| 宣城市| 雷山县| 潼南县| 丰城市| 肇东市| 府谷县| 玉门市| 罗山县| 闻喜县| 大方县| 石楼县| 凤庆县| 绥滨县| 芒康县| 五大连池市| 栖霞市| 商洛市| 且末县| 马鞍山市| 襄垣县| 宣恩县| 巩留县| 克东县| 铅山县| 眉山市| 蓝田县|