源码: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&amp;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&amp;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相关推荐

  1. SpringBoot实现Java高并发秒杀系统之DAO层开发(一)

    SpringBoot实现Java高并发秒杀系统之DAO层开发(一) 秒杀系统在如今电商项目中是很常见的,最近在学习电商项目时讲到了秒杀系统的实现,于是打算使用SpringBoot框架学习一下秒杀系统( ...

  2. 轻量级DAO层实践初体验

    最近快被 Hibernate 给坑哭了,有了自己动手实现 ORM 映射 DAO 的冲动. 工作之余折腾了快一星期,总算是有点小成就. 现打算将过程记录下来,方便自己后续回顾填补遗漏. 回到顶部 1. ...

  3. 秒杀系统练习及问题总结——Dao层

    秒杀系统项目体系结构(Dao层) pom.xml文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi ...

  4. 框架学习(1)——service层,dao层和service实现类进行数据库操作

    最近也是比较忙,也只能忙里偷闲地抓紧时间接着学习一下技术,自从上次学习了maven之后,越来越对框架产生了兴趣,下了好多的spring视屏,听着老师的建议,最近也萌生了看别人的代码进行学习的想法,然后 ...

  5. MyBatis是啥子东西?是一个DAO层的框架

    文章目录 一.MyBatis 介绍 二.入门 MyBatis 三.源码示例 第一站:查 第二站:增 第三站:删 第四站:改 四.更多使用说明 映射文件 核心配置文件 相应API方法 一.MyBatis ...

  6. EduSoho框架DAO层缓存机制

    EduSoho框架从2013年发布首个开源版本以来,收到了几万条用户真实需求及优化建议.Edusoho主产品历时5年多的不间断的迭代,发布了380多个版本,目前已得到了国内多家互联网巨头企业及大型培训 ...

  7. java 框架 Dao层 Mapper层 controller层 service层 model层 entity层 简介

    目录 简介 entity层 mapper层 service层 controller层 简介 SSM是sping+springMVC+mybatis集成的框架. MVC即model view contr ...

  8. 后端:最受欢迎Java数据库访问框架(DAO层)

    来自:覃佑桦 | 责编:乐乐 链接:dzone.com/articles/what-java-dao-layer-is-best-for-your-project 本文将带您浏览和比较最受欢迎Java ...

  9. dao层和service层和control_最受欢迎Java数据库访问框架(DAO层)

    本文将带您浏览和比较最受欢迎Java数据库访问框架(DAO层). 假设您正在开发一个Java程序,有许多办法可以让您的应用连上数据库.下面会列举各数据库访问框架的适用场景,相信能够帮您选到适合项目的开 ...

最新文章

  1. VS2013中使用git发布解决方案master分支的时候出现错误
  2. 079_html5内联SVG
  3. 为什么将0.1f改为0会使性能降低10倍?
  4. spring mvc 教程_Spring MVC开发–快速教程
  5. vue.js 引用背景图 background 无效的3种解决办法
  6. python桌面开发吐血_想用java写个桌面小demo,就布局都差点写吐血了,学艺不精...
  7. 《真还传》剧终:6亿欠款还完了?罗永浩被执行信息清零,最新回应来了
  8. 单片机c语言实习报告,单片机C语言程序设计实训100例.pdf
  9. ZendStudio
  10. 计算机系统确认的gmp附录,马义岭--中国GMP 附录确认与验证计算机化系统.pdf
  11. 查询结果按中文拼音顺序排序
  12. 令人深思的文章:也许你这辈子都只是个小人物
  13. asciinema终端录屏神器使用及过坑
  14. linux中touch命令如何使用,一天一个shell命令 linux文本操作系列-touch命令用法
  15. 《JSP实用教程(第4版)》第2章学习笔记
  16. 人物专访|大家好,我是橡树,研究车联网安全
  17. 创业故事:记YouTube创始人陈士骏,选择满意工作,让自己人生无悔
  18. vue 精简教程(四) vuerouter 路由
  19. 基于Java的电影订票网站的设计
  20. SOC FPGA linux系统搭建(Terasic DE10-Nano开发板)

热门文章

  1. 国行三星S7(SM-G9300) root方法
  2. C++拷贝构造函数:深拷贝和浅拷贝
  3. ipad itunes 恢复
  4. 《程序员》9月:视频直播技术实践 分布式数据库华山论剑
  5. Win10家庭版任务管理器被禁用,解除方法
  6. js调用android的闹铃,JS定时器小应用--设置闹铃
  7. ubuntu20.04不能播放bilibili网页视频解决方法
  8. 学术工具-Citavi 简介
  9. MATLAB学习笔记#001 获取矩阵大小
  10. 年终颁奖盛典PPT模板