Solon详解(11)- Mybatis 与 Solon 相亲相爱

Solon详解系列文章:
Solon详解(一)- 快速入门
Solon详解(二)- Solon的核心
Solon详解(三)- Solon的web开发
Solon详解(四)- Solon的事务传播机制
Solon详解(五)- Solon扩展机制之Solon Plugin
Solon详解(六)- Solon的校验扩展框架使用与扩展
Solon详解(七)- Solon Ioc 的注解对比Spring及JSR330
Solon详解(八)- Solon的缓存框架使用和定制
Solon详解(九)- 渲染控制之定制统一的接口输出
Solon详解(十)- 怎么用 Solon 开发基于 undertow jsp tld 的项目?

相关的源码

https://gitee.com/noear/solon_demo/tree/master/demo08.solon_mybatis_multisource

故事开讲

Mybatis 是个资深的前辈,多年来它基本上只和 Spring 的家族企业合作。今天他尝试和年轻选手Solon组团做业务;Solon 是Java世界里一个新的极易上手的Web框架(哎,如同十八线的演员,没人知道的啦。。。但业务活也是一流的)

本次组队需要完成如下挑战:

简单的配置

多数据源支持(分区模式 和 注解模式)

事务支持

支持分页组件(这个,其实破坏了SQL的透明性......但业内很流行)

Action...

一、环境说明 环境 版本
IDEA   2020.2  
Maven   4.0  
Solon   1.1  
mybatis-solon-plugin   1.1  
mybatis-sqlhelper-solon-plugin   1.1  
Mybatis   5.3.3  
JDK   1.8  
二、现在代码走起

新建个空白的Maven项目:solon_mybatis_multisource,下面开始操作:

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

<parent> <groupId>org.noear</groupId> <artifactId>solon-parent</artifactId> <version>1.1</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.db1: typeAliases: #支持包名 或 类名(.class 结尾) - "webapp.model" mappers: #支持包名 或 类名(.class 结尾)或 xml(.xml结尾) - "webapp.dso.mapper.AppxMapper.class" #再定义个新配置(为了体现多数据源性 - 应该简单吧?) mybatis.db2: 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

(三)添加配置器(完成数据源的构建即可;看上去,极简洁的。。)

在Solon的适配下,只需要完成数据源的配置就完事了。其它的,根据配置已自动扫描或处理。

@XConfiguration public class Config { // //数据源名字与mybatis的配置名要对应上 // @XBean(value = "db1", typed = true) public DataSource db1(@XInject("${test.db1}") HikariDataSource ds) { return ds; } @XBean("db2") public DataSource db2(@XInject("${test.db2}") HikariDataSource ds) { return ds; } }

(四)添加控制器

关于多数据源的分包模式示例:

/** * 分包模式,一开始就被会话工厂mapperScan()并关联好了 * */ @XMapping("/demo/") @XController public class DemoController { @XInject AppxMapper appxMapper; //已被db1 mapperScan 了(内部自动处理),可直接注入 @XInject Appx2Mapper appxMapper2; //已被db2 mapperScan 了(内部自动处理),可直接注入 @XMapping("test") public AppxModel test(){ return appxMapper.appx_get(); } @XMapping("test2") public AppxModel test2(){ return appxMapper2.appx_get2(48); } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsfxzy.html