您好,登錄后才能下訂單哦!
這篇文章主要介紹“怎么理解Mybatis和Solon”,在日常操作中,相信很多人在怎么理解Mybatis和Solon問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么理解Mybatis和Solon”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
環境 | 版本 |
---|---|
IDEA | 2020.2 |
Maven | 4.0 |
Solon | 1.0.10 |
mybatis-solon-plugin | 1.0.10 (本例用到的關鍵框架) |
mybatis-sqlhelper-solon-plugin | 1.0.10 |
Mybatis | 5.3.3 |
JDK | 1.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”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。