中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么理解Mybatis和Solon

發布時間:2021-11-17 13:33:35 來源:億速云 閱讀:170 作者:iii 欄目:大數據

這篇文章主要介紹“怎么理解Mybatis和Solon”,在日常操作中,相信很多人在怎么理解Mybatis和Solon問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么理解Mybatis和Solon”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

一、環境說明
環境版本
IDEA2020.2
Maven4.0
Solon1.0.10
mybatis-solon-plugin1.0.10 (本例用到的關鍵框架)
mybatis-sqlhelper-solon-plugin1.0.10
Mybatis5.3.3
JDK1.8
二、代碼

新建個空白的Maven項目:solon_mybatis,下面開始操作:

  • (一)在 pom.xml 文件里添加依賴

<parent>
    <groupId>org.noear</groupId>
    <artifactId>solon-parent</artifactId>
    <version>1.0.10</version>
    <relativePath />
</parent>

<dependencies>
    <dependency>
        <groupId>org.noear</groupId>
        <artifactId>solon-web</artifactId>
        <type>pom</type>
    </dependency>

    <dependency>
        <groupId>org.noear</groupId>
        <artifactId>mybatis-solon-plugin</artifactId>
    </dependency>
    
    <dependency>
        <groupId>org.noear</groupId>
        <artifactId>mybatis-sqlhelper-solon-plugin</artifactId>
    </dependency>
    
    <!-- 其它依賴參考源碼,不然占板面太多了  -->
</dependencies>
  • (二)修改屬性文件 application.yml (添加多數據源和分布組件的配置)

Solon 沒有特定的數據源配置,所以隨便自己起個頭就可以;配置項與使用的數據源匹配即可。本例用的是HikariCP

#數據庫1的配置
test.db1:
    schema: rock
    jdbcUrl: jdbc:mysql://localdb:3306/rock?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=true
    driverClassName: com.mysql.cj.jdbc.Driver
    username: demo
    password: UL0hHlg0Ybq60xyb

#數據庫2的配置(其實我用的是同一個庫)
test.db2:
    schema: rock
    jdbcUrl: jdbc:mysql://localdb:3306/rock?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=true
    driverClassName: com.mysql.cj.jdbc.Driver
    username: demo
    password: UL0hHlg0Ybq60xyb


#默認
mybatis:
    typeAliases:    #支持包名 或 類名(.class 結尾)
        - "webapp.model"
    mappers:        #支持包名 或 類名(.class 結尾)或 xml(.xml結尾)
        - "webapp.dso.mapper.AppxMapper.class"

#再定義個新配置(為了體現多數據源性 - 應該簡單吧?)
mybatis.db2f:
    typeAliases:
        - "webapp.model"
    mappers:
        - "webapp.dso.mapper.Appx2Mapper.class"


#分頁組件的配置
sqlhelper:
    mybatis:
        instrumentor:
            dialect: "mysql"
            cache-instrumented-sql: true
            subquery-paging-start-flag: "[PAGING_StART]"
            subquery-paging-end-flag: "[PAGING_END]"
        pagination:
            count: true
            default-page-size: 10
            use-last-page-if-page-no-out: true
            count-suffix: _COUNT
  • (三)添加配置器(完成會話工廠的構建 及 Mapper 的描述與關聯;看上去,挺簡潔的)

基于 Spring 的@MapperScan實現,需要多個配置器才可以完成;mybatis-solon-plugin把它調整為一個函數,故多個數據源可以整到一個配置器里:

@XConfiguration
public class Config {
    @XBean("db1f")
    public SqlSessionFactory db1f(@XInject("${test.db1}") HikariDataSource dataSource) {
        //
        //可以用默認的配置
        //
        return new MybatisAdapter(dataSource)
                .mapperScan()   //完成Spring 的 @MapperScan注解的功能(相對來說,改成函數可以把多個 mapperScan 安排在一個 Config里)
                .getFactory();
    }

    @XBean("db2f")
    public SqlSessionFactory db2f(
            @XInject("${test.db2}") HikariDataSource dataSource,  
            @XInject("${mybatis.db2f}") Properties props) {
        //
        //可以指定配置 ${mybatis.db2f}
        //
        return new MybatisAdapter(dataSource, props)
                .mapperScan()
                .getFactory();
    }
}
  • (四)添加控制器

關于多數據源的分包模式示例:

/**
 * 分包模式,一開始就被會話工廠mapperScan()并關聯好了
 * */
@XMapping("/demo/")
@XController
public class DemoController {
    @XInject
    AppxMapper appxMapper;      //已被db1f mapperScan 了,可直接注入

    @XInject
    Appx2Mapper appxMapper2;    //已被db2f mapperScan 了,可直接注入

    @XMapping("test")
    public AppxModel test(){
        return appxMapper.appx_get();
    }

    @XMapping("test2")
    public AppxModel test2(){
        return appxMapper2.appx_get2(48);
    }

}

關于多數據源的注解模式示例:

/**
 * 注解模式,通過@Db注入,并指定具體的會話工廠
 *
 * @Df 可注入 Mapper, SqlSession, SqlSessionFactory, MybatisProxy
 * */
@XMapping("/demo2/")
@XController
public class Demo2Controller {
    @Df("db1f")
    AppxMapper appxMapper;     //使用@Db 指定會話工廠并注入

    @Df("db2f")
    Appx2Mapper appxMapper2;

    @XMapping("test")
    public AppxModel test(){
        return appxMapper.appx_get();
    }

    @XMapping("test2")
    public AppxModel test2(){
        return appxMapper2.appx_get2(48);
    }

}

關于事務的示例:(分布式環境下,盡量用消息代理JDBC事務)

/**
 * 事務演示
 *
 * @Df 可注入 Mapper, SqlSession, SqlSessionFactory, MybatisProxy
 * */
@XMapping("/tran/")
@XController
public class TranController {
    @XInject
    AppxMapper appxMapper;

    /**
     * mybatis-solon-plugin 的事務,需要通過 MybatisProxy 發起
     *
     * solon 不目前支持注解事務,說是出于性能和細顆粒度的考慮;以及現在都流行引入消息處理事務了。
     * */
    @Df("db1f")
    MybatisProxy proxy;

    @XMapping("test")
    public Object test() throws Throwable{
        return proxy.tran((s)->{
            s.result = appxMapper.appx_get();
        });
    }
}

關于分頁的示例:(本案用的是sqlhelper)

@XMapping("/page/")
@XController
public class PageController {
    @XInject
    AppxMapper appxMapper;

    @XMapping("test")
    public Object test() throws Throwable{
        SqlPaginations.preparePagination(2,2);

       return appxMapper.appx_get_page();
    }
}
  • (五)略過的代碼文件(看開頭的相關源碼)

//這幾個文件不是重點,可以直接看源碼

//Appx2Mapper.java
//AppxMapper.java

//Appx2Mapper.xml
//AppxMapper.xml

到此,關于“怎么理解Mybatis和Solon”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

浦城县| 交口县| 昆明市| 三明市| 鄯善县| 富平县| 宁阳县| 罗田县| 开化县| 定西市| 府谷县| 揭西县| 镇宁| 昌吉市| 来凤县| 北川| 舟曲县| 仲巴县| 蓬溪县| 大庆市| 红桥区| 武穴市| 本溪市| 隆昌县| 滨海县| 中宁县| 垣曲县| 泰兴市| 织金县| 定西市| 鄯善县| 九龙城区| 泗洪县| 柳州市| 阿合奇县| 根河市| 普陀区| 额尔古纳市| 图们市| 马尔康县| 娄底市|