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類型)的字段,并控制精度, 搞了一下午未果, 于是請教山風(fēng)小子, 最終兩個人試驗N次, 失敗N-1次的前提下, 最后一次終于成功了, 在這里尤其感謝山風(fēng)的技術(shù)支持以及精神支持;

          成功案例記錄在這里:
          groovy(domain-class):
          class Oldtable {
          static withTable = "oldtable"
          ??? Integer id
          ??? BigDecimal? number //要為BigDecimal類型
          ??? static constraints = {
          ???????????? // 山風(fēng)小子注:正確的約束應(yīng)該為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類型會自動轉(zhuǎn)換為DECIMAL類型, 比如用GUI工具建表指定為NUMERIC(10,6), 會自動轉(zhuǎn)換為DECIMAL(10,6),表示最高有效數(shù)字10位, 小數(shù)點后保留6位; 這里的precision="10" scale="6", 注意數(shù)據(jù)庫里的precision是有效數(shù)字, scale表示精確到小數(shù)點后的位數(shù)
          // 山風(fēng)小子注:number(max:new BigDecimal("9999.999999"), scale:6),4(小數(shù)點左側(cè)位數(shù)) + 6(scale) = 10(precision) => DECIMAL(10, 6)
          3. number(max:1000, scale:6) 這個精度限制這么寫的原因一直搞不懂, 跟山風(fēng)試驗了好多次才成功的, 最后理解為1000是4位, 4+6=10, precision="10", 同理max:10000, scale:6會生成DECIMAL(11,6)類型的字段, 暫且這么理解吧...
          4. String dbCreate = "update", 這里用update, 如果數(shù)據(jù)庫中有對應(yīng)的表, 則用舊表, 不會覆蓋舊表以及里面的數(shù)據(jù)
          5. mysql數(shù)據(jù)庫中
          DECIMAL(10,6)類型的數(shù)據(jù), 通過hibernate逆向映射生成的屬性是:
          ??????? <property name="number" type="java.lang.Double">
          ??????????? <column name="number" precision="10" scale="6" not-null="true" />
          ??????? </property>
          但是在groovy里面定義為Double類型出現(xiàn)N多異常, 最終定義為BigDecimal類型的成功;
          6. 貼出常見類型的映射關(guān)系
          Hibernate映射類型 Java類型 標(biāo)準(zhǔn)SQL類型
          integer/int java.lang.Integer/int INTEGER 4字節(jié)
          long java.lang.Long/long BIGINT 8字節(jié)
          short java.lang.Short/short SMALLINT 2字節(jié)
          byte java.lang.Byte/byte TINYINT 1字節(jié)
          float java.lang.Float/float FLOAT 4字節(jié)
          double java.lang.Double/double DOUBLE 8字節(jié)
          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 實現(xiàn)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相關(guān)
          http://docs.huihoo.com/framework/hibernate/reference-v3_zh-cn/toolsetguide.html
          http://www.itpub.net/699923.html

          // 山風(fēng)小子注:成功其實就在你眼前,關(guān)鍵要看自己的恒心和毅力

          原文地址:http://miaoyachun.blog.sohu.com/43152463.html
          附:Groovy與Grails同甘共苦,苦盡甘來
          posted on 2007-04-23 00:36 山風(fēng)小子 閱讀(3417) 評論(6)  編輯  收藏 所屬分類: Groovy & Grails
          主站蜘蛛池模板: 阿克陶县| 虹口区| 时尚| 武宣县| 石首市| 兴安盟| 九寨沟县| 桐乡市| 亚东县| 保德县| 上高县| 乐至县| 镇沅| 五常市| 浙江省| 平潭县| 加查县| 江油市| 怀化市| 安阳县| 荣成市| 获嘉县| 金寨县| 阿合奇县| 元阳县| 东乡县| 时尚| 黄梅县| 武义县| 渭源县| 秭归县| 临夏市| 绍兴县| 肇庆市| 普洱| 修水县| 安顺市| 镇沅| 锡林浩特市| 江西省| 寿光市|