基于resty orm的ActiveRecord操作數(shù)據(jù)指南
Active Record(中文名:活動(dòng)記錄)是一種領(lǐng)域模型模式,特點(diǎn)是一個(gè)模型類(lèi)對(duì)應(yīng)關(guān)系型數(shù)據(jù)庫(kù)中的一個(gè)表,而模型類(lèi)的一個(gè)實(shí)例對(duì)應(yīng)表中的一行記錄。
Active Record 和 Row Gateway (行記錄入口)十分相似,但前者是領(lǐng)域模型,后者是一種數(shù)據(jù)源模式。關(guān)系型數(shù)據(jù)庫(kù)往往通過(guò)外鍵來(lái)表述實(shí)體關(guān)系,Active Record 在數(shù)據(jù)源層面上也將這種關(guān)系映射為對(duì)象的關(guān)聯(lián)和聚集。
Active Record 適合非常簡(jiǎn)單的領(lǐng)域需求,尤其在領(lǐng)域模型和數(shù)據(jù)庫(kù)模型十分相似的情況下。如果遇到更加復(fù)雜的領(lǐng)域模型結(jié)構(gòu)(例如用到繼承、策略的領(lǐng)域模型),往往需要使用分離數(shù)據(jù)源的領(lǐng)域模型,結(jié)合 Data Mapper (數(shù)據(jù)映射器)使用。
Active Record 驅(qū)動(dòng)框架一般兼有 ORM 框架的功能,但 Active Record 不是簡(jiǎn)單的 ORM,正如和 Row Gateway 的區(qū)別。
著名的例子是全棧(Full Stack) Web 開(kāi)發(fā)框架 Ruby on Rails ,其默認(rèn)使用一個(gè)純 Ruby 寫(xiě)成的 Active Record 框架來(lái)驅(qū)動(dòng) MVC 中的模型層。
在Resty中ActiveRecord表現(xiàn)為兩部分:
Model
映射指定的表數(shù)據(jù),數(shù)據(jù)存儲(chǔ)在一個(gè)attrs的map中,map的key不區(qū)分大小寫(xiě),適合具有固定業(yè)務(wù)的實(shí)體,可動(dòng)態(tài)切換數(shù)據(jù)源,內(nèi)部實(shí)現(xiàn)了屬性檢測(cè)和Query Cache,包含了基本的數(shù)據(jù)操作方法
Record
除了具有model的全部特征外,還是一個(gè)動(dòng)態(tài)的映射,適合動(dòng)態(tài)的數(shù)據(jù)表業(yè)務(wù),不需要建立指定的model來(lái)映射數(shù)據(jù)
使用方法
1. 在application.properties 配置jdbc連接,連接池等
##druid plugin auto load,default 為數(shù)據(jù)源名字 ##druid plugin auto load db.default.url=jdbc:mysql://127.0.0.1/example?useUnicode=true&characterEncoding=UTF-8 db.default.user=dev db.default.password=dev1010 db.default.dialect=mysql #c3p0配置 c3p0.default.minPoolSize=3 c3p0.default.maxPoolSize=20 #druid配置 #druid.default.initialSize=10 #druid.default.maxPoolPreparedStatementPerConnectionSize=20 #druid.default.timeBetweenConnectErrorMillis=1000 #druid.default.filters=slf4j,stat,wall #flyway database migration auto load flyway.default.valid.clean=true flyway.default.migration.auto=true flyway.default.migration.initOnMigrate=true
2. 在AppConfig類(lèi)中配置ActiveRecordPlugin,來(lái)加載連接和映射model
public void configPlugin(PluginLoader pluginLoader) { C3p0DataSourceProvider cdsp = new C3p0DataSourceProvider("default"); ActiveRecordPlugin activeRecordCdsp = new ActiveRecordPlugin(cdsp, true); //映射的model必須能被掃描到 activeRecordCdsp.addIncludePaths("cn.dreampie.orm"); pluginLoader.add(activeRecordCdsp); }
3. 編寫(xiě)一個(gè)Model類(lèi)映射數(shù)據(jù)表,需要繼承Model
//假設(shè)cn.dreampie.orm目錄下有個(gè)model叫User //使用table注解來(lái)映射指定的數(shù)據(jù)表,generatedKey是自增主鍵(自增方式分為數(shù)據(jù)庫(kù)自增和自定義生成器自增,如uuid),primaryKey非自增主鍵,generated=true 表示使用自定義的生成器生成主鍵,cached 表示緩存 @Table(name = "sec_user",generatedKey="id", primaryKey = "sid",generated=true, cached = true) public class User extends Model<User> { public static User dao = new User(); }
4. 編寫(xiě)一個(gè)Resouce來(lái)執(zhí)行某個(gè)數(shù)據(jù)操作
如果你只使用了orm部分,在其他地方也可以執(zhí)行該操作
@API("/users") public class UserResource extends ApiResource { /** * 查詢(xún)一個(gè)user的集合 */ @GET public List<User> findAll() { //使用Record 達(dá)到相同的效果,而不需要編寫(xiě)User.java //Record userDAO=new Record("sec_user","id,sid",true,true); //userDAO.findAll(); return User.dao.findAll(); } }
以上就是基于resty orm的ActiveRecord操作數(shù)據(jù)指南的詳細(xì)內(nèi)容,更多關(guān)于resty orm的ActiveRecord數(shù)據(jù)操作的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
基于Spring Batch向Elasticsearch批量導(dǎo)入數(shù)據(jù)示例
本文介紹了基于Spring Batch向Elasticsearch批量導(dǎo)入數(shù)據(jù)示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-02-02SpringMVC?bean加載控制的實(shí)現(xiàn)分析
SpringMVC是一種基于Java,實(shí)現(xiàn)了Web?MVC設(shè)計(jì)模式,請(qǐng)求驅(qū)動(dòng)類(lèi)型的輕量級(jí)Web框架,即使用了MVC架構(gòu)模式的思想,將Web層進(jìn)行職責(zé)解耦?;谡?qǐng)求驅(qū)動(dòng)指的就是使用請(qǐng)求-響應(yīng)模型,框架的目的就是幫助我們簡(jiǎn)化開(kāi)發(fā),SpringMVC也是要簡(jiǎn)化我們?nèi)粘eb開(kāi)發(fā)2023-02-02基于SpringBoot接口+Redis解決用戶(hù)重復(fù)提交問(wèn)題
當(dāng)網(wǎng)絡(luò)延遲的情況下用戶(hù)多次點(diǎn)擊submit按鈕導(dǎo)致表單重復(fù)提交,用戶(hù)提交表單后,點(diǎn)擊瀏覽器的【后退】按鈕回退到表單頁(yè)面后進(jìn)行再次提交也會(huì)出現(xiàn)用戶(hù)重復(fù)提交,辦法有很多,我這里只說(shuō)一種,利用Redis的set方法搞定,需要的朋友可以參考下2023-10-10java進(jìn)階解析Springboot上傳excel存入數(shù)據(jù)庫(kù)步驟
項(xiàng)目需要,寫(xiě)了一個(gè),批量導(dǎo)入的接口。因?yàn)樾枰褂胑xcel去批量導(dǎo)入數(shù)據(jù),所以寫(xiě)了一個(gè)例子,經(jīng)過(guò)測(cè)試已經(jīng)可以用于實(shí)際開(kāi)發(fā),這里記錄一下2021-09-09基于feign傳參MultipartFile問(wèn)題解決
這篇文章主要介紹了基于feign傳參MultipartFile問(wèn)題解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03java開(kāi)啟遠(yuǎn)程debug竟有兩種參數(shù)(最新推薦)
這篇文章主要介紹了java開(kāi)啟遠(yuǎn)程debug竟有兩種參數(shù),本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07