DAO层框架介绍:gavin
源码:https://gitee.com/l311576/gavin
特性:
1.支持分表分库
2.支持读写分离
3.加载一次可以系统在任意地方调用事务
简单的使用方式:
1.配置数据库连接信息,可以配置n个,读写分开配置
<DataGroup Id="readTemplates" ClassPath="com.gavin.plugin.database.DataEngine" Driver="com.mysql.jdbc.Driver">
<Database URI="jdbc:mysql://127.0.0.1:3306/Templates?Unicode=true&characterEncoding=utf8" LoadLevel="100" KeyIV="DECSECURITYKEYABCDEFG|EiJPWIgQQDgoJXlRy91SZncpdZgwQEHi">
<User UserName="root" Password="root"/>
<ConnectionPool>
<MinConnectionCount>1</MinConnectionCount>
<MaxConnectionCount>5</MaxConnectionCount>
</ConnectionPool>
</Database>
</DataGroup>
<DataGroup Id="writeTemplates" ClassPath="com.gavin.plugin.database.DataEngine" Driver="com.mysql.jdbc.Driver">
<Database URI="jdbc:mysql://127.0.0.1:3306/Templates?Unicode=true&characterEncoding=utf8" LoadLevel="100" KeyIV="DECSECURITYKEYABCDEFG|EiJPWIgQQDgoJXlRy91SZncpdZgwQEHi">
<User UserName="root" Password=""/>
<ConnectionPool>
<MinConnectionCount>1</MinConnectionCount>
<MaxConnectionCount>5</MaxConnectionCount>
</ConnectionPool>
</Database>
</DataGroup>
2.配置分表分库规则,可以配置多个表
<Sharding Resource="templates/sharding.xml" Encoding="utf-8"/>
<?xml version="1.0" encoding="UTF-8"?>
<TableRule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="DataService.xsd" Id="write">
<!-- 表名 数据库标识 单库表数量 (哈希或)容量 库数量 总表数量,不填默认10000表 -->
<BigTable Name="templatesRecord" GroupId="writeTemplates" GroupTableCount="10" GroupTableCapacity="1" GroupCount="5" HashedIdCount="50"/><BigTable Name="tradeDetail" GroupId="writeTemplates" GroupTableCount="100" GroupTableCapacity="1" GroupCount="100" />
</TableRule>
3.配置事务插件路径,可以配置多个,适用于分模块开发互不影响
<Plugin Resource="user/plugin.xml" Encoding="utf-8"/>
<Plugin Resource="pay/plugin.xml" Encoding="utf-8"/>
4.编写事务逻辑,如下:查询分页 传值(pageNumber,pageSize)
<SQLTrans TransName="queryPage" TransFlag="0" DataGroupId="readTemplates">
<SelectRecordSet OutputId="{list}">
<OutputSQL>select * from {TI:tbTemplatesRecord, strUserName} limit {startIndex},{pageSize}</OutputSQL>
</SelectRecordSet>
<!--判断第一条数据的金额是否等于100,是则打印日志-->
<If Value1="{list[0].lMoney}" Type="Long" Operator="=" Value2="100">
<Then>
<Log Text="金额等于100" Level="info"/>
</Then>
</If>
<SelectField OutputId="{totalCount}">
<OutputSQL>select count(*) from {TI:tbTemplatesRecord, strUserName}</OutputSQL>
</SelectField>
<OnException>
<Return Info="TemplatesService.xml.query.Error.{userId}:异常" Code="-1" Text="数据库异常"></Return>
</OnException>
<Return Info="查询信息成功" Code="0" Text="查询信息成功" >
<ReturnItem FieldId="{totalCount}" ValueId="{totalCount}"/>
<ReturnItem FieldId="{list}" ValueId="{list}"/>
</Return>
</SQLTrans>注意:
一个<SQLTrans>标签代表一个事务,事务必须在同一个SQLTrans标签中完成
一个<SQLTrans>里面写多条sql语句进行数据库操作,也可以返回多个结果值
5.service层调用方式:
Request query=Request.build("TemplatesService", "queryPage").page(0, 10).set("type", username).set("strUserName", username);
Page<Datas> datas=DBTrans.page(query,Datas.class);
if(datas==null){//查询失败
}
从上面的步骤可以看出一个完整的事务,需要步骤4和步骤5
6.通过事务标签属性实现读写分离:
写:<SQLTrans TransName="insert" TransFlag="1" DataGroupId="writeTemplates" BigTableGroupId="write">
读:<SQLTrans TransName="query" TransFlag="0" DataGroupId="readTemplates" BigTableGroupId="read">
7.通过表达式实现分表分库,目前有两种方式
ai:按指定字段数值顺序分表分库
TI:按指定字段哈希值分表分库
<OutputSQL>select * from {TI:tbTemplatesRecord, strUserName} limit {startIndex},{pageSize}</OutputSQL>
8.在项目任意地方可调用事务,通过DBTrans操作数据库的方式主要有4种,分别为:
插件启动方式:
DBTrans.getInstance().config("templates/config.properties").start();8.1.查询一条数据并使用Respones对象返回
DBTrans.beanResult(Request,Class<?>);
8.2.查询分页信息(需要返回:totalCount和list),如果查询失败或异常则返回null
DBTrans.page(Request,Class<?>);
8.3.查询list集合(需要返回:list),如果查询失败或异常则返回null
DBTrans.list(Request,Class<?>);
8.4.查询一个对象,如果查询失败或异常则直接报错RuntimeException()
DBTrans.bean(Request,Class<?>);
8.5.执行数据库事务(这是一个万能方法,可以执行上面所有的操作并且可以有多个返回值)
DBTrans.execute(Request);
<<终>>
DAO层框架介绍:gavin相关推荐
- SpringBoot实现Java高并发秒杀系统之DAO层开发(一)
SpringBoot实现Java高并发秒杀系统之DAO层开发(一) 秒杀系统在如今电商项目中是很常见的,最近在学习电商项目时讲到了秒杀系统的实现,于是打算使用SpringBoot框架学习一下秒杀系统( ...
- 轻量级DAO层实践初体验
最近快被 Hibernate 给坑哭了,有了自己动手实现 ORM 映射 DAO 的冲动. 工作之余折腾了快一星期,总算是有点小成就. 现打算将过程记录下来,方便自己后续回顾填补遗漏. 回到顶部 1. ...
- 秒杀系统练习及问题总结——Dao层
秒杀系统项目体系结构(Dao层) pom.xml文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi ...
- 框架学习(1)——service层,dao层和service实现类进行数据库操作
最近也是比较忙,也只能忙里偷闲地抓紧时间接着学习一下技术,自从上次学习了maven之后,越来越对框架产生了兴趣,下了好多的spring视屏,听着老师的建议,最近也萌生了看别人的代码进行学习的想法,然后 ...
- MyBatis是啥子东西?是一个DAO层的框架
文章目录 一.MyBatis 介绍 二.入门 MyBatis 三.源码示例 第一站:查 第二站:增 第三站:删 第四站:改 四.更多使用说明 映射文件 核心配置文件 相应API方法 一.MyBatis ...
- EduSoho框架DAO层缓存机制
EduSoho框架从2013年发布首个开源版本以来,收到了几万条用户真实需求及优化建议.Edusoho主产品历时5年多的不间断的迭代,发布了380多个版本,目前已得到了国内多家互联网巨头企业及大型培训 ...
- java 框架 Dao层 Mapper层 controller层 service层 model层 entity层 简介
目录 简介 entity层 mapper层 service层 controller层 简介 SSM是sping+springMVC+mybatis集成的框架. MVC即model view contr ...
- 后端:最受欢迎Java数据库访问框架(DAO层)
来自:覃佑桦 | 责编:乐乐 链接:dzone.com/articles/what-java-dao-layer-is-best-for-your-project 本文将带您浏览和比较最受欢迎Java ...
- dao层和service层和control_最受欢迎Java数据库访问框架(DAO层)
本文将带您浏览和比较最受欢迎Java数据库访问框架(DAO层). 假设您正在开发一个Java程序,有许多办法可以让您的应用连上数据库.下面会列举各数据库访问框架的适用场景,相信能够帮您选到适合项目的开 ...
最新文章
- VS2013中使用git发布解决方案master分支的时候出现错误
- 079_html5内联SVG
- 为什么将0.1f改为0会使性能降低10倍?
- spring mvc 教程_Spring MVC开发–快速教程
- vue.js 引用背景图 background 无效的3种解决办法
- python桌面开发吐血_想用java写个桌面小demo,就布局都差点写吐血了,学艺不精...
- 《真还传》剧终:6亿欠款还完了?罗永浩被执行信息清零,最新回应来了
- 单片机c语言实习报告,单片机C语言程序设计实训100例.pdf
- ZendStudio
- 计算机系统确认的gmp附录,马义岭--中国GMP 附录确认与验证计算机化系统.pdf
- 查询结果按中文拼音顺序排序
- 令人深思的文章:也许你这辈子都只是个小人物
- asciinema终端录屏神器使用及过坑
- linux中touch命令如何使用,一天一个shell命令 linux文本操作系列-touch命令用法
- 《JSP实用教程(第4版)》第2章学习笔记
- 人物专访|大家好,我是橡树,研究车联网安全
- 创业故事:记YouTube创始人陈士骏,选择满意工作,让自己人生无悔
- vue 精简教程(四) vuerouter 路由
- 基于Java的电影订票网站的设计
- SOC FPGA linux系统搭建(Terasic DE10-Nano开发板)