`

grails约束及数据库映射

 
阅读更多

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

分享到:
评论

相关推荐

    grails中文入门简介

    验证是Web开发中不可或缺的一部分,Grails通过声明约束和验证约束来实现。它支持客户端验证,使得可以在用户提交表单之前校验数据。Grails的国际化支持非常好,开发者可以通过简单的配置来为不同的语言环境定制应用...

    grails增删改查(初学者必备)

    - 在`grails-app/conf/UrlMappings.groovy`文件中定义URL到控制器动作的映射,方便访问和操作。 8. **运行应用** - 运行`grails run-app`命令启动Grails应用。应用将监听默认的8080端口,你可以通过浏览器访问`...

    grails 中文第二版

    - GORM是Grails的核心特性之一,用于处理对象与数据库之间的映射。 - 支持基本的CRUD操作。 **领域(Domain)建模** - 领域类是GORM的基础,代表数据库中的实体。 - 支持多种关联方式,如多对一、一对多等。 - 支持...

    学生管理系统课程设计(grails)

    首先,我们需要创建数据库模型,这通常涉及到定义领域类(Domain Classes),这些类对应于数据库中的表,并通过Grails的ORM(对象关系映射)自动与数据库交互。 三、数据库设计 在Grails中,使用GORM(Grails ...

    Grails基础教程.pdf

    - **可选的变量和约束**:如何在URL映射中定义可选参数及其约束条件。 - **处理响应代码**:处理HTTP响应代码,实现更精细的控制。 综上所述,《Grails基础教程》不仅涵盖了Grails的基本概念和发展背景,还深入介绍...

    Grails权威指南

     3.8 使用grails控制台(console)及命令解释程序(shell)  3.8.1 使用命令行shell  3.8.2 grails控制台(console)  3.9 ide集成  3.9.1 安装groovy-eclipse插件  3.9.2 导入grails工程 ...

    grails入门经典

    在 Grails 中,Domain 类代表数据库中的表,是 ORM(对象关系映射)的核心组件。下面通过具体示例来详细了解如何定义 Domain 类: 1. **Race 类**:表示比赛相关信息。 - **属性**: - `String name`:比赛名称。...

    grails开发笔记

    1. **Domain (持久化层)**:Grails 的 `Domain` 类用于表示数据模型,它们直接映射到数据库表。通过 `Constraints` 和 `Mapping` 方法可以自定义字段约束和映射规则。Grails 还提供了 `toString()` 方法来自定义对象...

    Grails基础教程

    - **GORM的介绍**:GORM是Grails对象关系映射(Object-Relational Mapping)框架的核心部分,它简化了数据库操作,使得开发者能够专注于业务逻辑而不是底层的数据库交互。 **5.2 第一个领域类对象** - **领域类**:...

    Grails_DC_Cheat_Sheet_1.09.pdf

    3. **Publisher类**:Publisher类展示了更复杂的数据库映射配置,如自定义表名、缓存策略、层级映射、版本控制、主键生成策略、复合主键、自定义列名、延迟加载和索引等。这些配置使得Publisher能够更灵活地与数据库...

    Grails 中文参考手册

    《Grails 中文参考手册》是一本全面介绍Grails框架的指南,旨在帮助开发者快速上手并深入理解Grails的各个核心概念和技术。Grails是一个基于Groovy语言的开源Web应用框架,它提供了高效的开发环境和强大的功能,使得...

    Grails Persistence with GORM and GSQL

    - **GORM (Grails Object Relational Mapping)**: 是Grails框架中的对象关系映射(ORM)组件,用于简化与数据库的交互过程。通过GORM,开发者可以将数据库表映射到Grails中的域类,从而实现数据的增删改查操作。 - *...

    Grails完全入门.pdf

    GORM是Grails对Hibernate和Datastore的封装,提供了更简单的对象关系映射规则,使得开发人员无需深入了解Hibernate即可进行数据库操作。 七、对象间关系 通过静态属性`hasMany`和`belongsTo`来定义一对多和多对一的...

Global site tag (gtag.js) - Google Analytics