对于后端开发者来说,一款好用的框架能够大大提升应用的开发效率。为了降低开发者使用TiDB的门槛,方便开发者快速连接到TiDB,我们也在和合作伙伴一起,逐步完善面向主流开发语言和框架的连接支持。 近日,Facebook开源的Golang实体框架Ent完成了对TiDB数据库的支持。Ent是一款易于构建和维护应用程序与大数据模型的框架。具有以下特点:Schema即代码:能将任何数据库表建模为Go对象;轻松地遍历任何图形:可以轻松地运行查询、聚合和遍历任何图形结构;静态类型和显式API:使用代码生成静态类型和显式API,查询数据更加便捷;多存储驱动程序:支持MySQL、PostgreSQL、SQLite、Gremlin,现在也已经支持了TiDB;可扩展:易于扩展和使用Go模板自定义。 下面通过一个HelloWorld的应用示例,来看下如何快速实现一个基于EntTiDB的应用。HelloWorld应用示例 1。用Docker在本地启动一个TiDBServerdockerrunp4000:4000pingcaptidb 现在你应该有一个运行的TiDB实例,开放了4000端口监听。 2。在本地拷贝helloworld的示例repogitclonehttps:github。comhedwigztidbhelloworld。git 在这个示例repo中我们定义了一个简单的Userschemagotitleentschemauser。gofunc(User)Fields()〔〕ent。Field{return〔〕ent。Field{field。Time(createdat)。Default(time。Now),field。String(name),field。Int(age),}} 然后,连接Ent和TiDB:gotitlemain。goclient,err:ent。Open(mysql,roottcp(localhost:4000)test?parseTimetrue)iferr!nil{log。Fatalf(failedopeningconnectiontoTiDB:v,err)}deferclient。Close()Runtheautomigrationtool,withAtlas。iferr:client。Schema。Create(context。Background(),schema。WithAtlas(true));err!nil{log。Fatalf(failedprintingschemachanges:v,err)} 可以看到,在第一行我们通过一个MySQL语句去连接TiDBServer,因为TiDB是兼容MySQL的,所以不需要其他特殊的driver。话虽如此,TiDB和MySQL还是有很多不同,尤其是与Schema迁移相关的操作,比如SQL诊断和迁移规划。所以,Atlas可以自动监测出是连接到TiDB,做相应的迁移处理。此外,第七行我们使用schema。WithAtlas(true),表示Ent是使用Atlas作为迁移引擎。Atlas是Ent刚刚发布的迁移引擎,得益于Atlas的最新设计,对新数据库的支持也变得前所未有的简单。 最后,我们新建一条user数据,并保存到TiDB中,以用于后需的数据读取和输出。gotitlemain。goclient。User。Create()。SetAge(30)。SetName(hedwigz)。SaveX(context。Background())user:client。User。Query()。FirstX(context。Background())fmt。Printf(theuser:sisdyearsold,user。Name,user。Age) 3。运行这个示例程序:gorunmain。gotheuser:hedwigzis30yearsold 在这次快速演练中,我们成功实现了:启动一个本地的TiDB实例;连接Ent和TiDB数据库;使用Atlas迁移EntS使用Ent从TiDB中插入和读取数据。版本说明 目前,这个示例应用在Entv0。10和TiDBv5。4。0中可以正常运行,Ent也计划在未来继续拓展对TiDB的支持。如果你使用其他版本的TiDB或者需要帮助,欢迎加入asktug。com来交流。如果你也有项目希望与TiDB适配,欢迎来GitHub提交issue。除了Ent,TiDB此前已经添加了对GORM和gosqldrivermysql的支持,详情可查看文档:https:docs。pingcap。comappdevdev