支持C#分表分库组件。转载请联系后台Q公众号。简介携程DAL是携程框架部开发的一款数据库访问框架,支持代码生成和横向扩展。由携程技术中心框架部DAL团队开发。经过3年的不断打磨,在长期实际使用中根据大量用户反馈不断优化。开源范围包括代码生成器、Java客户端和C#客户端。背景随着企业规模的扩大和业务量的急剧增加,作为系统核心的数据库相关开发也将经历从单一团队到多团队的发展;从单机到集群;从单一数据库到多个数据库;从单一的数据库产品到多个数据库产品并存的过程。伴随这一过程而来的是如何管理数据库扩展、如何规范数据库访问、如何保护数据库投资、如何应对增加的访问、如何防范安全问题等一系列挑战。作为中国在线旅游行业的领头羊,携程也曾面临同样的问题。为了迎接这些挑战,实现10倍的企业发展速度,携程开发了自己特色的数据库访问框架CtripDAL。携程DAL支持流行的分库分表操作,支持Java和C#,支持Mysql和MSSqlServer。使用该框架可以有效保护企业现有的数据库投资,同时快速可靠地为企业提供数据库访问层的横向扩展能力。整个框架包括代码生成器和客户端。工作方式是使用代码生成器在线生成代码和配置,通过DAL客户端完成对数据库的操作。生成器向导丰富,操作简单明了。它可以批量生成标准的DAO,并在方法级别自定义数据库访问。客户端可以通过标准的maven方法简单地添加依赖项。携程DAL与一般数据库框架最大的区别在于跨部门企业的角度统一管理数据库相关资源。通过部署代码生成器,企业可以有效管理全公司的DAL开发团队,明确数据库所有权,自定义数据库访问权限。代码生成器生成的标准DAO代码与客户端配合使用,可以大大提高工作效率,保证代码质量。解决了业务增长带来的系统维护难、开发效率低、代码风格多样、代码质量参差不齐等业界普遍痛点。CodeGeneratorCodeGenerator允许用户创建Dal团队、组织开发人员、管理数据库、创建DAO以及生成代码和配置。不同于一般的基于JDBC驱动的分库分库产品,代码生成器生成的代码和配置可以直接用于实际使用,无需用户编写一行代码和配置。实现了只有开发人员需要关心业务逻辑,所有繁琐的数据库相关的编码和配置工作都交给了DAL。由于携程DAL完全工作在DAO层,不存在不支持或不能使用这种SQL语句的情况。同时,传递提示的方式也很自然。每个方法都有自己的提示接口。额外的DAL需要做什么可以直接根据给定的现有名称来设置,而不用重写原来的sql加怪异的注释。客户端介绍客户端配合代码生成器生成的代码,完成用户对数据库的访问操作。通过Dev和QA双重自动化测试保证质量,覆盖率99%,并在实际生产中经过长期严格检验。为了适应不同公司的实际情况,DAL客户端定义了丰富的扩展接口,涵盖了从数据源管理、数据库映射、连接字符串读取到自定义访问方式等各个方面的功能。同时,在为了方便系统监控,还内置了系统状态、日志和统计模块。C#客户端API列表以下API位于BaseDao类中。方法族描述:除了显示的方法外,至少包含一个带有IDictionaryhints参数的重载方法。注:适用于增删改查的API属于Update系列CreateObjectInsert(Tobj)whereT:class,new()方法族ObjectInsertByComplexPk(Tobj)whereT:class,new()方法族BooleanBulkInsert(IListlist)whereT:class,new()方法族RetrieveIQueryGetQuery()whereT:class,new()IListGetAll()whereT:class,new()方法族IListSelectListOfSingleField(Stringsql)方法族IListSelectList(Stringsql)whereT:class,new()方法族IListSelectList(IQueryquery)whereT:class,new()方法族IListSelectListByAdapter(Stringsql)whereT:class,new()方法族IListSelectListByAdapter(IQueryquery)whereT:class,new()方法族IListExecListBySp(StringprocName,StatementParameterCollectionparameters)whereT:class,new()方法族TGetByKey(Objectkey)whereT:class,new()方法族TSelectFirst(Stringsql)whereT:class,new()方法族TSelectFirst(IQueryquery)whereT:class,new()方法族TVisitDataReader(Stringsql,Funccallback)方法族TVisitDataReaderBySp(StringprocName,StatementParameterCollectionparameters,Funccallback)方法族DataTableSelectDataTable(Stringsql)方法族DataTableExecDataTableBySp(StringprocName,StatementParameterCollectionparameters)方法族DataSetSelectDataSet(Stringsql)方法方法系列DataSetSelectDataSet(IQueryquery)whereT:class,new()方法系列DataSetExecDataSetBySp(StringprocName,StatementParameterCollectionparameters)方法系列IDataReaderSelectDataReader(Stringsql)方法系列IDataReaderExecDataReaderBySp(StringprocName,StatementParameterCollectionparameters)方法系列ObjectExecScalar(Stringsql)方法系列))方法族UpdateInt32Update(Tobj)whereT:class,new()方法族IUpdatePartialGetUpdatePartially()whereT:class,new()Int32UpdatePartially(IUpdatePartialpartially,Tobj)其中T:类,新()方法族Int32ExecNonQuery(Stringsql)方法族voidExecSp(StringprocName,StatementParameterCollectionparameters)方法族DeleteInt32Delete(Tobj)whereT:class,new()方法族https://github.com/ctripcorp/dal