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);
}
}
关于多数据源的注解模式示例:
/**
* 注解模式,通过@Db注入,并指定具体的数据源
*
* @Db 可注入 Mapper, SqlSession, SqlSessionFactory 类型的字段
* */
@XMapping("/demo2/")
@XController
public class Demo2Controller {
@Db("db1")
AppxMapper appxMapper; //使用@Db 指定会话工厂并注入
@Db("db2")
Appx2Mapper appxMapper2;
@XMapping("test")
public AppxModel test(){
return appxMapper.appx_get();
}
@XMapping("test2")
public AppxModel test2(){
return appxMapper2.appx_get2(48);
}
}
关于事务的示例:(分布式环境下,尽量用消息代理JDBC事务)
/**
* 事务演示
* */
@XMapping("/tran/")
@XController
public class TranController {
@XInject
AppxMapper appxMapper;
/**
* mybatis-solon-plugin 的事务,由 @XTran 注解发起(更详细的说明,参考其它文章)
* */
@XTran
@XMapping("test")
public Object test() throws Throwable{
appxMapper.appx_get();
}
}
关于多数据源事务的示例,需要用到Service层:(分布式环境下,尽量用消息代理JDBC事务)
/**
* 多数据源事务演示
* */
@XMapping("/tran2/")
@XController
public class Tran2Controller {
@XInject
AppService appService; //这是定义的Service类,里面的函数注解了@XTran("db1")
@XInject
App2Service app2Service; //同上
/**
* 这是一个多数据源的事务组
* */
@XTran
@XMapping("test")
public void test() throws Throwable {
//内部走的是db2的事务
app2Service.add();
//内部走的是db1的事务
appService.add();
}
}
关于分页的示例:(本案用的是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();
}
}
- (五)略过的一些代码文件(直接看开头的相关源码)
故事结尾
加了事务注解后,更加的简洁优雅了。。。所有组团挑战全部完成,OY...
Solon详解(11)- Mybatis 与 Solon 相亲相爱的更多相关文章
- Solon详解(二)- Solon的核心
Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...
- Solon详解(三)- Solon的web开发
Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...
- Solon详解(七)- Solon Ioc 的注解对比Spring及JSR330
Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...
- Springboot mini - Solon详解(二)- Solon的核心
Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...
- Springboot mini - Solon详解(三)- Solon的web开发
Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...
- Springboot mini - Solon详解(七)- Solon Ioc 的注解对比Spring及JSR330
Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...
- Solon详解(六)- Solon的校验扩展框架使用与扩展
Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...
- Solon详解(八)- Solon的缓存框架使用和定制
Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...
- Springboot mini - Solon详解(四)- Solon的事务传播机制
Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...
- Springboot mini - Solon详解(五)- Solon扩展机制之Solon Plugin
Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...
随机推荐
- photonServer学习之连接数据库
string connectStr = "server=127.0.0.1;port=3306;database=database;user=root;pwd=root";//连接 ...
- 白嫖码云Pages,两分钟的事,就能搭个百度能搜到的个人博客平台
为了攒点钱让女儿做个富二代(笑),我就没掏钱买服务器,白嫖 GitHub Pages 搭了一个博客平台.不过遗憾的是,GitHub Pages 只能被谷歌收录,无法被百度收录,这就白白损失了一大波流量 ...
- MAC 上编译安装nginx-rtmp-module 流媒体服务器
MAC 上编译安装nginx-rtmp-module 流媒体服务器 记录踩坑过程 下载nginx和nginx-rtmp-module wget http://nginx.org/download/ng ...
- 使用dbUnit的 IDataSet 因乱序造成assert失败而采取的措施
本例源码下载:https://files.cnblogs.com/files/xiandedanteng/dbUnitTest20200211.zip 在做IDataSet比较时,特殊情况下会有期盼的 ...
- Java通过http协议发送Get和Post请求
https://blog.csdn.net/qq_32599479/article/details/94439131
- 关于Vue-loader的那些事儿
什么是Vue-loader 一个webpack的加载器,负责将vue组件编译成普通的JavaScript模块. 关于webpack的介绍 这里呢?用到webpack,在项目的编译打包的过程中,将复杂的 ...
- linux系统jdk安装
1.软件包下载:官网 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html下载linu ...
- 从头看看Tomcat启动Spring容器的原理
通过带注解Spring Boot可以启动一个web容器,并初始化bean容器.那么Tomcat启动并初始化spring容器的原理是怎样的? Tomcat启动web程序时会创建一对父子容器(图1): 有 ...
- 逐浪CMS最新V8.1.6 Beta版安装部署操作
首先要获得内部最新版本的CMS,官网有公开发布版本,但不属于内部最新的,内部最新的CMS系统是不断的有功能的迭代更新. 操作系统建议是win10.1.windows server2012\2016\2 ...
- css常用属性之display属性
1.dispaly属性之一:块级标签转行内便签display: inline(内容有多大,就展示多大(用F12看区别)) 2.display属性之二:行内便签转块级标签:diaplay: block ...