`
flashcloud
  • 浏览: 188490 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

[转载]Grails生成DECIMAL(NUMERIC)类型字段

阅读更多

原文出自:http://www.blogjava.net/BlueSUN/archive/2007/04/23/112846.html

 

想用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

 

分享到:
评论

相关推荐

    Grails Grails Grails

    4. **命令行工具**:Grails 提供强大的命令行工具,支持创建项目、运行应用、生成代码等任务,大大提升了开发效率。 5. **构建工具**:Grails 使用Gradle作为其构建工具,允许自定义构建流程和依赖管理。 **Grails...

    Grails 工具文档

    Grails的命令行工具是开发过程中的得力助手,能够创建新项目、生成代码、运行测试等。掌握基本的CLI命令,可以提高开发效率。 ### 10. Internationalization (i18n) Grails支持多语言环境,通过i18n资源文件管理...

    Eclipse下搭建Grails项目

    创建新项目时,你可以利用配置好的Grails外部工具执行`create-domain-class`等命令,快速生成领域模型类。在Eclipse中,Grails项目的结构和管理将得到很好的支持,包括源代码编辑、构建、测试和调试。 注意,尽管...

    grails-用户手册

    Grails使用Gradle作为构建工具,提供了`grails war` 命令生成可部署的WAR文件,方便在各种Java应用服务器上部署。 九、测试 Grails内置了测试框架,支持单元测试、集成测试和功能测试。通过`test-app` 命令,可以...

    Grails权威指南 Grails权威指南

    4. **Grails命令行工具**:提供了一系列的命令,如`generate-all`用于自动生成控制器、视图和模型类,极大地提高了开发效率。 5. **Grails插件系统**:Grails拥有庞大的插件库,涵盖各种功能,如安全、缓存、报表、...

    grails中文参考手册

    - **测试Grails应用**:Grails内置了单元测试和集成测试框架,通过`grails test`命令执行各种类型的测试。 6. **部署** Grails应用可以部署到多种Java EE容器,如Tomcat、Jetty等。使用`grails war`命令打包应用...

    grails脚手架2次优化

    其中,脚手架(Scaffolding)是Grails提供的一种快速开发工具,它能够自动生成基本的CRUD操作,极大地提高了开发效率。然而,尽管脚手架在很多场景下能快速满足需求,但在实际项目中,我们往往需要对其进行二次优化...

    eclipse开发grails插件

    选择合适的Grails版本和其他配置,然后Eclipse会自动生成项目结构。 5. **开发与调试**:在Eclipse中,你可以直接编辑Grails的源代码,使用内置的Groovy编辑器进行语法高亮和代码提示。通过右键点击项目,选择"Run ...

    grails login

    这将在指定目录下生成一个完整的Grails项目结构。 **3. 数据库配置** Grails默认使用H2内存数据库,如需使用MySQL,需修改`Config.groovy`中的数据库配置。添加如下代码: ```groovy dataSource { pooled = true ...

    grails开发

    GORM支持动态及静态领域类,通过Grails的映射元数据来定义数据库表和字段。 5. **Grails插件系统** Grails的插件系统是其一大特色,允许开发者共享和复用功能。例如,`spring-security-core`插件用于安全控制,`...

    Grails权威指南.pdf

    - **Scaffolding**:Grails提供快速生成基础CRUD操作的模板代码,加速应用开发。 - **Plugins**:Grails插件系统允许开发者复用和扩展功能,如安全、缓存、邮件服务等。 - **配置管理**:通过`grails-app/conf/`...

    grails快速开发web

    ### Grails 快速开发 Web 应用程序 #### 一、Grails 概述 Grails 是一种基于 Groovy 的开源应用框架,用于简化 Web 应用程序的开发过程。它采用约定优于配置的原则,这使得开发者可以更快地创建功能丰富的 Web ...

    Grails中文参考手册

    Grails 提供了一个强大的命令行工具,用于初始化项目、创建域类、生成控制器、运行测试等。这大大提高了开发效率,减少了手动编写配置文件的工作。 **Testing** Grails 鼓励全面的测试实践,包括单元测试、集成...

    eclipse插件grails(groovy)

    Eclipse会自动为你的项目生成基本的Grails结构,包括`grails-app`目录,其中包含了`controllers`, `domains`, `services`, `views`等子目录。 在Grails项目中,控制器(Controllers)负责处理HTTP请求,领域类...

    Grails入门精通及中文API

    - **Groovy语言**: Grails的基础语言是Groovy,这是一种简洁、动态的Java方言,提供了很多Java没有的特性,如闭包、语法糖和类型推断。 - **GORM(Grails Object Relational Mapping)**: 内置的ORM框架,允许...

    grails中文文档

    例如,`grails create-app` 用于创建新的 Grails 应用,`grails run-app` 用于启动应用,`grails generate-controller` 可以自动生成控制器代码。这些命令大大提高了开发效率,让开发者能专注于业务逻辑而非基础架构...

    Grails+快速开发+Web+应用程序.pdf

    - **动态性**:得益于Groovy语言的动态特性,Grails支持动态类型和脚本化编程,使得开发者能够快速编写代码并部署应用。 - **一站式解决方案**:Grails提供了一套完整的开发环境,包括构建工具、测试框架、数据库...

Global site tag (gtag.js) - Google Analytics