First they ignore you
          then they ridicule you
          then they fight you
          then you win
              -- Mahatma Gandhi
          Chinese => English     英文 => 中文             
          隨筆-221  評論-1047  文章-0  trackbacks-0
          想用Grails這個東西生成指定為DECIMAL類型(NUMERIC類型)的字段,并控制精度, 搞了一下午未果, 于是請教山風小子, 最終兩個人試驗N次, 失敗N-1次的前提下, 最后一次終于成功了, 在這里尤其感謝山風的技術支持以及精神支持;

          成功案例記錄在這里:
          groovy(domain-class):
          class Oldtable {
          static withTable = "oldtable"
          ??? Integer id
          ??? BigDecimal? number //要為BigDecimal類型
          ??? static constraints = {
          ???????????? // 山風小子注:正確的約束應該為number(max:new BigDecimal("9999.999999"), scale:6)
          ??? ??? ??? ?number(max:1000, scale:6)??? //這個限制搞了很久才搞出來, 映射為DECIMAL(10,6)
          ??? ??? ??? }
          }
          DataSource:
          class DevelopmentDataSource {
          ?? boolean pooling = true
          ??? String dbCreate = "update" // one of 'create', 'create-drop','update'
          ??? String url = "jdbc:mysql://localhost:3306/grails"
          ??? String driverClassName = "com.mysql.jdbc.Driver"
          ??? String username = "ymiao"
          ??? String password = "letmein"
          }

          PS:
          1. 最大的感觸是: 一定要練好英語
          2. mysql里面NUMERIC類型會自動轉換為DECIMAL類型, 比如用GUI工具建表指定為NUMERIC(10,6), 會自動轉換為DECIMAL(10,6),表示最高有效數字10位, 小數點后保留6位; 這里的precision="10" scale="6", 注意數據庫里的precision是有效數字, scale表示精確到小數點后的位數
          // 山風小子注:number(max:new BigDecimal("9999.999999"), scale:6),4(小數點左側位數) + 6(scale) = 10(precision) => DECIMAL(10, 6)
          3. number(max:1000, scale:6) 這個精度限制這么寫的原因一直搞不懂, 跟山風試驗了好多次才成功的, 最后理解為1000是4位, 4+6=10, precision="10", 同理max:10000, scale:6會生成DECIMAL(11,6)類型的字段, 暫且這么理解吧...
          4. String dbCreate = "update", 這里用update, 如果數據庫中有對應的表, 則用舊表, 不會覆蓋舊表以及里面的數據
          5. mysql數據庫中
          DECIMAL(10,6)類型的數據, 通過hibernate逆向映射生成的屬性是:
          ??????? <property name="number" type="java.lang.Double">
          ??????????? <column name="number" precision="10" scale="6" not-null="true" />
          ??????? </property>
          但是在groovy里面定義為Double類型出現N多異常, 最終定義為BigDecimal類型的成功;
          6. 貼出常見類型的映射關系
          Hibernate映射類型 Java類型 標準SQL類型
          integer/int java.lang.Integer/int INTEGER 4字節
          long java.lang.Long/long BIGINT 8字節
          short java.lang.Short/short SMALLINT 2字節
          byte java.lang.Byte/byte TINYINT 1字節
          float java.lang.Float/float FLOAT 4字節
          double java.lang.Double/double DOUBLE 8字節
          big_decimal java.math.BigDecimal NUMERIC
          character java.lang.Character/java.lang.String/char CHAR(1) 定長字符
          string java.lang.String VARCHAR 變長字符
          boolean/ yes_no/true_false java.lang.Boolean/Boolean BIT 布爾類型
          date java.util.Date/java.sql.Date DATE 日期
          timestamp java.util.Date/java.util.Timestamp TIMESTAMP 日期
          calendar java.util.Calendar TIMESTAMP 日期
          calendar_date java.util.Calendar DATE 日期
          binary byte[] BLOB
          BLOB
          text java.lang.String TEXT CLOB
          serializable 實現java.io.Serializablej接口的任意Java類 BLOB BLOB
          clob java.sql.Clob CLOB CLOB
          blob java.sql.Blob BLOB BLOB
          class java.lang.Class VARCHAR 定長字符
          locale java.util.Locale VARCHAR 定長字符
          timezone java.util.TimeZone VARCHAR 定長字符
          currency java.util.Currency VARCHAR 定長字符
          7. 用于測試的mysql的schema+table
          DROP TABLE IF EXISTS `grails`.`oldtable`;
          CREATE TABLE? `grails`.`oldtable` (
          ? `id` int(11) NOT NULL,
          ? `number` decimal(10,6) NOT NULL,
          ? PRIMARY KEY? (`id`)
          ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
          8. Hibernate相關
          http://docs.huihoo.com/framework/hibernate/reference-v3_zh-cn/toolsetguide.html
          http://www.itpub.net/699923.html

          // 山風小子注:成功其實就在你眼前,關鍵要看自己的恒心和毅力

          原文地址:http://miaoyachun.blog.sohu.com/43152463.html
          附:Groovy與Grails同甘共苦,苦盡甘來
          posted on 2007-04-23 00:36 山風小子 閱讀(3419) 評論(6)  編輯  收藏 所屬分類: Groovy & Grails
          主站蜘蛛池模板: 祥云县| 清远市| 安庆市| 禄丰县| 绵竹市| 竹北市| 越西县| 天镇县| 大渡口区| 哈尔滨市| 吉林市| 射阳县| 砀山县| 全南县| 金坛市| 墨玉县| 青河县| 聂拉木县| 仙桃市| 鱼台县| 奉新县| 西青区| 西乡县| 孟津县| 宁海县| 彩票| 滨州市| 万全县| 修文县| 兴国县| 蓝田县| 阿拉善盟| 蒙自县| 泽州县| 青冈县| 宾川县| 富源县| 彭阳县| 栾城县| 彰化县| 泾川县|