1、数据源的配置与构建(例:HikariCP DataSource)

HiKariCP是数据库连接池的一个后起之秀,号称性能最好,可以完美地PK掉其他连接池。

a.引入依赖
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>4.0.3</version>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>
b.添加配置
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"
maxLifetime: 1000000
c.配置HikariCP数据源

建议这种操作,都安排在 @Configuration 配置类里执行。

//注解模式
//
@Configuration
public class Config{
// 同时支持 name 和 类型 两种方式注入(注入时没有name,即为按类型注入)
//
@Bean(value = "db1", typed = true)
pubblic DataSource dataSource(@Inject("${test.db1}") HikariDataSource ds){
return ds;
}
} //静态类模式(或纯手动模式)
//
//public class Config{
// pubblic static HikariDataSource dataSource = Solon.cfg().getBean("test.db1", HikariDataSource.class);
//}

之后就可以通过@Inject注解得到这个数据源了。一般会改用加强注解对数据源进行自动转换;所有与solon对接的ORM框架皆采用这种方案。

2、数据库操作框架集成

a.Weed3集成

Wee3是一个轻巧的ORM框架,配置起来也简单。

在pom.xml中引用weed3扩展组件

<dependency>
<groupId>org.noear</groupId>
<artifactId>weed3-solon-plugin</artifactId>
</dependency>

刚才的Config配置类即可复用。先以单数据源场景演示:

//使用示例
@Controller
public class DemoController{
//@Db 按类型注入 //或 @Db("db1") 按名字注入
//@Db是weed3在Solon里的扩展注解 //可以注入 Mapper, BaseMapper, DbContext
//
@Db
BaseMapper<UserModel> userDao; @Mapping("/user/")
pubblic UserModel geUser(long puid){
return userDao.selectById(puid);
}
}
b.Mybatis集成

在pom.xml中引用mybatis扩展组件

<dependency>
<groupId>org.noear</groupId>
<artifactId>mybatis-solon-plugin</artifactId>
</dependency>

添加mybatis mappers及相关的属性配置

mybatis.db1: #db1 要与数据源的bean name 对上
typeAliases: #支持包名 或 类名(.class 结尾)
- "webapp.model"
mappers: #支持包名 或 类名(.class 结尾)或 xml(.xml结尾);配置的mappers 会 mapperScan并交由Ioc容器托管
- "webapp.dso.mapper.UserMapper.class"

刚才的Config配置类即也可复用

//使用示例
@Controller
public class DemoController{
//@Db 是 mybatis-solon-plugin 里的扩展注解,可注入 SqlSessionFactory,SqlSession,Mapper
//
@Db
UserMapper userDao; //UserMapper 已被 db1 自动 mapperScan 并已托管,也可用 @Inject 注入 @Mapping("/user/")
pubblic UserModel geUser(long puid){
return userDao.geUser(puid);
}
}

3、使用事务注解

Solon 中推荐使用@Tran注解来申明和管理事务。它适用于被动态代理的Bean,如:@Controller、 @Service、@Dao 注解的类;支持多数据源事务,使用方便。体验与Springboot的事务注解差不多。

a.Weed3的事务
//使用示例
@Controller
public class DemoController{
@Db //@Db("db1") 为多数据源模式
BaseMapper<UserModel> userDao; @Tran
@Mapping("/user/add")
pubblic Long addUser(UserModel user){
return userDao.insert(user, true);
}
}
b.Mybatis的事务
@Controller
public class DemoController{
@Db
UserMapper userDao; //UserMapper 已被 db1 mapperScan并已托管,也可用 @Inject 注入 @Tran
@Mapping("/user/add")
pubblic Long addUser(UserModel user){
return userDao.addUser(user);
}
}
c.混合多源事务(这个时候,我们需要Service层参演了)
@Service
public class UserService{
@Db("db1") //数据库1
UserMapper userDao; @Tran
public void addUser(UserModel user){
userDao.insert(user);
}
} @Service
public class AccountService{
@Db("db2") //数据库2
AccountMapper accountDao; @Tran
public void addAccount(UserModel user){
accountDao.insert(user);
}
} @Controller
public class DemoController{
@Inject
AccountService accountService; @Inject
UserService userService; @Tran
@Mapping("/user/add")
pubblic Long geUser(UserModel user){
Long puid = userService.addUser(user); //会执行db1事务 accountService.addAccount(user); //会执行db2事务 return puid;
}
}

4、使用缓存注解

构建缓存服务

@Configuration
public class DemoConfig{
@Bean
public CacheService cache(){
//其实,默认已经有一个本地缓存服务存在了
return new LocalCacheService();
}
}

简单的缓存应用

//比如,加在 Service 类上
@Service
public class AccountService{
@Db("db2")
AccountMapper accountDao; @Tran
public void addAccount(UserModel user){
accountDao.insert(user);
} //当有缓存,则直接读取缓存;没有,则执行并缓存
@Cache
public UserModel getAccount(long userId){
return accountDao.getById(userId);
}
}

更详细的缓存使用,请参考后面的章节。

Solon Web 开发,五、数据访问、事务与缓存应用的更多相关文章

  1. Solon Web 开发

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...

  2. Solon Web 开发,一、开始

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...

  3. Solon Web 开发,二、开发知识准备

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...

  4. Solon Web 开发,四、请求上下文

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...

  5. Solon Web 开发,六、过滤器、处理、拦截器

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...

  6. Solon Web 开发,七、视图模板与Mvc注解

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...

  7. Solon Web 开发,八、校验、及定制与扩展

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...

  8. Solon Web 开发,九、跨域处理

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...

  9. Solon Web 开发,十一、国际化

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...

随机推荐

  1. 磁盘分区丢失testdisk恢复

    故障修复步骤: 1. 检查磁盘分区级文件系统确实不在: 2. 云主机内部下载testdisk工具修复 yum install testdisk -y 3. 执行命令testdisk /dev/vdc进 ...

  2. 奇怪的现象,打印出来可以见到数据,在右边看不到数据,放到list里在页面上也显示不了数据

  3. .net 程序通过 crontab 无法启动,手动执行脚本可以启动

    一.问题描述 .net 网关程序需要设置定时重启,按照日常操作先把正在运行的 PID kill 掉后,再执行启动服务. 把脚本放到 crontab 计划任务上,可以把服务 PID kill 掉,但无法 ...

  4. JAVA微信支付——微信公众号内支付 代码

    官方文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1 微信PC二维码支付方式参考:https://www.cnblogs. ...

  5. 基于 SoC 的卷积神经网络车牌识别系统设计(0)摘要

    ​NOTES:现如今,芯片行业无比火热啊,无论是前景还是钱景,国家芯片战略的发布,公司四五十万的年薪,着实令人非常的向往,为了支持芯片设计者,集成了工作.科研.竞赛于一体的<基于 SoC 的卷积 ...

  6. c++基础之虚函数表指针和虚函数表创建时机

    虚函数表指针 虚函数表指针随对象走,它发生在对象运行期,当对象创建的时候,虚函数表表指针位于该对象所在内存的最前面. 使用虚函数时,虚函数表指针指向虚函数表中的函数地址即可实现多态. 虚函数表 虚函数 ...

  7. Android 控件使用教程(二)—— RecyclerView 展示图片

    简介 在上一篇博文中,介绍了大家已经很熟悉的布局控件ListView,在这篇文章中,我将使用比较新.功能也更强大的RecyclerView. RecyclerView 首先,要用这个控件,你需要在gr ...

  8. 【九度OJ】题目1185:特殊排序 解题报告

    [九度OJ]题目1185:特殊排序 解题报告 标签(空格分隔): 九度OJ [LeetCode] http://ac.jobdu.com/problem.php?pid=1185 题目描述: 输入一系 ...

  9. 自我学习与理解:keras框架下的深度学习(三)回归问题

    本文主要是使用keras对其有的波士顿房价数据集做一个回归预测,其代码架构与之前一样(都只是使用多层感知机):数据的预处理.搭建网络框架.编译.循环训练以及测试训练的网络模型.其中除了数据预处理与之前 ...

  10. 【Java笔记】Java使用mysql包注意

    注意 安装的mysql5.x版本对应 5.x版本的驱动包 安装的mysql8.x版本对应 8.x版本的驱动包 如果安装的MySQL版本和驱动包版本不符合,则Java的连接不了数据库