貓學Grails之完善編寫的第一個程式和資料庫設定
在上一篇中程式已經基本成型了。但是還有很多地方需要完善。Grails的預設設定是一個HQLDB的記憶體資料庫。每次啟動時建立,關閉時銷燬,不能保留下來。而且輸入資料的校驗目前還只侷限在是否為Null。
貓咪先來說如何修改資料庫配置。首先在機器上安裝一個MySQL資料庫,當然別的資料庫也可以。不過如果裝了Oralce和DB2,機器配置又低跑不動別找我。資料庫配置的結構已經和書上說得完全不一樣了。“grails-app\conf”下並沒有書上說的DevelopmentDataSource.groovy、TestDataSource.groovy和ProductionDataSource.groovy這三個檔案。只有一個把這三個配置放到一起的DataSource.groovy。
內容如下:
很好改的。如果要把開發資料庫換成MySQL只要把開發部分的資料庫配置改了就是了。這種配置格式,經常修改Unix下各種軟體的配置的人應該很熟悉。
首先把MySQL的資料庫驅動複製到lib目錄下,然後修改配置檔案的開發資料庫配置。
和一般的資料庫連線池的設定沒什麼不一樣的。不過“dbCreate”要注意。它有三個值:“create”(如果資料庫不存在則建立)、“create-drop”(啟動的時候建立資料庫,結束的時候銷燬資料庫)、“update”(當資料庫表和程式不一致時,修改資料庫結構)。不過我不能在MySQL資料庫上使用“create”和“create-drop”這兩個屬性。一用就出現異常,說表不存在。看來目前這兩個屬性只用於內嵌的HQLDB。不過MySQL倒不用建表,只要建立一個空資料庫就可以了。系統在啟動的時候,會自動在資料庫裡建立表(不能建立資料庫)。如果大家使用其他的資料庫,可以試試看能否自動建庫。如果你不想Grails對你的資料庫動手動腳,把這條去了就是了。
下面是對領域物件建立驗證和頁面的屬性顯示順序。如果驗證錯誤,是無法寫入資料庫的。
在Race類中新增下面的程式碼:
constraints同時也決定了屬性出現在頁面上的順序。如果只是想規定某個屬性的位置但是沒有驗證,那麼直接放進去就可以了,比如maxRunners。注:這個順序是輸入頁面的順序。然後另一個物件也加入驗證。
看記錄詳細資訊的時候,“Registration : 1”之類的東西很難看吧。解決的方法就是重寫toString()方法。
好了最初的架子就到此為止了。大家可以多試試。
貓咪先來說如何修改資料庫配置。首先在機器上安裝一個MySQL資料庫,當然別的資料庫也可以。不過如果裝了Oralce和DB2,機器配置又低跑不動別找我。資料庫配置的結構已經和書上說得完全不一樣了。“grails-app\conf”下並沒有書上說的DevelopmentDataSource.groovy、TestDataSource.groovy和ProductionDataSource.groovy這三個檔案。只有一個把這三個配置放到一起的DataSource.groovy。
內容如下:
//預設的資料庫配置模板 dataSource { pooled = false driverClassName = "org.hsqldb.jdbcDriver" username = "sa" password = "" } //Hibernate快取配置 hibernate { cache.use_second_level_cache=true cache.use_query_cache=true cache.provider_class='org.hibernate.cache.EhCacheProvider' } // environment specific settings environments { //開發環境配置 development { dataSource { dbCreate = "create-drop" // one of 'create', 'create-drop','update' url = "jdbc:hsqldb:mem:devDB" } } //測試環境配置 test { dataSource { dbCreate = "update" url = "jdbc:hsqldb:mem:testDb" } } //生產環境配置 production { dataSource { dbCreate = "update" url = "jdbc:hsqldb:file:prodDb;shutdown=true" } } } <p class="indent"> |
很好改的。如果要把開發資料庫換成MySQL只要把開發部分的資料庫配置改了就是了。這種配置格式,經常修改Unix下各種軟體的配置的人應該很熟悉。
首先把MySQL的資料庫驅動複製到lib目錄下,然後修改配置檔案的開發資料庫配置。
development { dataSource { dbCreate = "update" pooled = true driverClassName = "com.mysql.jdbc.Driver" username = "root" password = "****" url = "jdbc:mysql://localhost:3306/MyMiao" } } <p class="indent"> |
和一般的資料庫連線池的設定沒什麼不一樣的。不過“dbCreate”要注意。它有三個值:“create”(如果資料庫不存在則建立)、“create-drop”(啟動的時候建立資料庫,結束的時候銷燬資料庫)、“update”(當資料庫表和程式不一致時,修改資料庫結構)。不過我不能在MySQL資料庫上使用“create”和“create-drop”這兩個屬性。一用就出現異常,說表不存在。看來目前這兩個屬性只用於內嵌的HQLDB。不過MySQL倒不用建表,只要建立一個空資料庫就可以了。系統在啟動的時候,會自動在資料庫裡建立表(不能建立資料庫)。如果大家使用其他的資料庫,可以試試看能否自動建庫。如果你不想Grails對你的資料庫動手動腳,把這條去了就是了。
下面是對領域物件建立驗證和頁面的屬性顯示順序。如果驗證錯誤,是無法寫入資料庫的。
在Race類中新增下面的程式碼:
static constraints ={ name(maxlength:50,blank:false)//名字最長50,不許為Null startDateTime(validator:{return (it>new Date())})//不能輸入過去的時間。這是自定義驗證,返回布林值。it表示這個屬性。 city(maxLength:30,blank:false)//最長30,不能為Null state(inList:["BeiJing","TianJin","ShangHai","ChongQing"],blank:false)//只能輸入的值必須在四地中,不能為Null。書上是美國的四個州。我用我們們直轄市代替了。不過目前還不能在這裡寫中文。頁面上能正確顯示,但是驗證過不去 maxRunners() distance(min:3.1f,max:100f)//跑道長度。最小3.1最長100。(100英里,即160千米。快4個馬拉松了) cost(min:0f,max:999.99f)//費用必須在0到999.99美元之間 } <p class="indent"> |
constraints同時也決定了屬性出現在頁面上的順序。如果只是想規定某個屬性的位置但是沒有驗證,那麼直接放進去就可以了,比如maxRunners。注:這個順序是輸入頁面的順序。然後另一個物件也加入驗證。
static constraints = { name(maxLength:50,blank:false)//最長50,不能為Null dateOfBirth(nullable:false)//非空 gender(inList:["M","F"])//輸入只能是兩者之一 postalAddress(maxLength:255)//最長255 emailAddress(maxLength:50,email:true)//最長50,符合Email格式 race(nullable:false)//非空 } |
看記錄詳細資訊的時候,“Registration : 1”之類的東西很難看吧。解決的方法就是重寫toString()方法。
Race String toString(){"${this.name}:${this.city}:${this.state}"} Registration String toString(){"${this.name}:${this.emailAddress}"} <p class="indent"> |
好了最初的架子就到此為止了。大家可以多試試。
相關文章
- 編寫第一個Qt程式QT
- 編寫資料庫設計文件資料庫
- 選擇那個資料庫後 要設定 資料庫所用編碼資料庫
- 完善昨天寫的資料庫結構同步方案資料庫
- 程式設計面試題:編寫一個會造成資料庫死鎖的應用程式設計面試題資料庫
- 編寫第一個HADOOP應用程式Hadoop
- Flutter學習指南:編寫第一個應用Flutter
- Centos-Mysql建立資料庫-編碼設定CentOSMySql資料庫
- shell程式設計學習筆記(一):編寫我的第一段程式碼程式設計筆記
- 如何設定Struts 連線資料庫的公共類,作個公共的類,來連線資料庫,如何寫???資料庫
- 資料庫表的基本操作和編碼格式設定資料庫
- gluesql/gluesql:一個用Rust編寫的SQL資料庫引擎庫包SQLRust資料庫
- # 編寫第一個Chrome ExtensionChrome
- Flutter學習指南:編寫第一個Flutter應用Flutter
- 編寫一個使用wreq庫的爬蟲程式爬蟲
- java連線資料庫時jdbc設定編碼Java資料庫JDBC
- 好程式設計師大資料教程:SparkShell和IDEA中編寫Spark程式程式設計師大資料SparkIdea
- DLP攻略:五個危險的資料庫預設設定資料庫
- 編寫你人生中第一個機器學習程式碼吧!機器學習
- Xamarin iOS編寫第一個應用程式建立工程iOS
- 使用PyQt來編寫第一個Python GUI程式QTPythonGUI
- Go Web 程式設計之 資料庫GoWeb程式設計資料庫
- (7)資料庫讀寫分離,主從同步實現方法(資料庫設定)資料庫主從同步
- 編寫第一個 .NET 微服務微服務
- oracle資料庫snap的設定Oracle資料庫
- django—資料庫設定Django資料庫
- oracle資料庫設定Oracle資料庫
- React入門系列 – 2 編寫第一個Hello world的React程式React
- React入門系列 - 2 編寫第一個Hello world的React程式React
- isql指令碼編寫建立資料庫SQL指令碼資料庫
- 基礎入門: 編寫第一個 Go 語言程式Go
- 同步寫兩個資料庫資料庫
- oracle 資料庫設定表和欄位的別名Oracle資料庫
- oracle資料庫rman歸檔設定和管理Oracle資料庫
- 可定製的資料庫備份和恢復程式資料庫
- LotusDomino編寫Web瀏覽器多資料庫檢索程式Web瀏覽器資料庫
- 資料庫學習:透過作業定時同步兩個資料庫(轉)資料庫
- 大資料基礎之開發第一個Java程式大資料Java