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. 有时候错误很奇怪啊,Comparator问题

    有时候错误很奇怪啊,Comparator问题,在我的电脑上排序好用,但是在别的电脑上排序不好用, 真奇怪a

  2. flutter 学习笔记

    常用属性 container 填充padding,边距margins,边框borders,背景色color, decoration: 渐变gradient-Alignment(x,y),圆角borde ...

  3. JAVA提取字符串中所有的URL链接,并加上a标签

    工具类 Patterns.java 1 package com.util; 2 3 import java.util.regex.Matcher; 4 import java.util.regex.P ...

  4. VS2017激活key

    密钥 KBJFW-NXHK6-W4WJM-CRMQB-G3CDH

  5. 永中dcs实现浏览器上面的手绘效果

    永中dcs是一款在线预览各种办公文件的网络产品,我们可以只用一个浏览器就可以实现对word,ppt和excel等文件的在线浏览,在其中有一个在线手绘功能很有特色,让我们来探一探它的实现原理吧. 第一, ...

  6. 揭秘人脸对齐之3D变换-Java版(文末赋开源地址)

    一.人脸对齐基本概念 人脸对齐通过人脸关键点检测得到人脸的关键点坐标,然后根据人脸的关键点坐标调整人脸的角度,使人脸对齐,由于输入图像的尺寸是大小不一的,人脸区域大小也不相同,角度不一样,所以要通过坐 ...

  7. electron使用动态配置文件及持久化存储

    1.如何在打包之后,把动态配置文件比如[config.json]放在根目录,不被打包到asar文件中 //解决思路,electron可以拷贝静态资源,比如你把config.json放在项目的根目录下, ...

  8. 基于Spring MVC + Spring + MyBatis的【外包人力资源管理系统】

    资源下载:https://download.csdn.net/download/weixin_44893902/45600390 练习点设计:模糊查询.删除.新增 一.语言和环境 实现语言:JAVA语 ...

  9. 【MySQL作业】分组查询 group by 子句——美和易思分组查询应用习题

    点击打开所使用到的数据库>>> 1.按照商品类型分组统计商品数量和平均单价,并按平均单价升序显示. -- 按照商品类型分组统计商品数量和平均单价,并按平均单价升序显示: select ...

  10. python uwsgi 配置

    启动:uwsgi --ini xxx.ini 重启:uwsgi --reload xxx.pid 停止:uwsgi --stop xxx.pid ini 文件 [uwsgi] chdir = /vag ...