`

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 配置mongodb数据库

    grails 配置mongodb数据库,并实现了用户登录的系统,只要将grails的环境配置好,安装上mongodb,再建立一个数据库ggtest,然后运行即可自动生成相应的集合数据。

    grails开发环境配置及应用开发

    详细讲解grails开发环境配置。 详细讲解grails连接mysql数据库,crud开发

    Grails3配置单独的数据库properties.pdf

    Grails3配置单独的数据库properties.pdf

    Grails Grails Grails

    Grails Grails Grails 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工程 ...

    grails3 CAS链接接数据库

    NULL 博文链接:https://youngbrick.iteye.com/blog/2352298

    Grails 中文参考手册

    2.1 下载并安装Grails 2.2 创建一个Grails应用 2.3 Hello World示例 2.4 使用IDE 2.5 规约配置 2.6 运行Grails应用 2.7 测试Grails应用 2.8 部署Grails应用 2.9 所支持的Java EE容器 2.10 创建工件 2.11 生成Grails...

    Grails权威指南 Grails权威指南

    Grails权威指南Grails权威指南Grails权威指南Grails权威指南Grails权威指南Grails权威指南

    grails 连接mysql

    这个例子实现了用grails 连接mysql 数据库,并且把内容显示出来,可以增删除改,下载这个例子后大家要把jdk tomcat grails环境搭好,然后用grails run-app来执行,也可以用其它的开发工具,本人用的是netbeans

    grails-data-mapping:GORM-Groovy对象映射

    GORM(Grails对象映射) [Grails] [Grails]是用于使用[Groovy] [Groovy]编程语言构建Web应用程序的框架。 该项目为Hibernate和NoSQL数据存储上的GORM的新实现提供了GORM API管道。 [Grails]: : [Groovy]: : ...

    Grails权威指南.pdf

    本书详细讲解了Grails开发的全部过程,包括项目构架、控制器和视图、与关系数据库之间的ORM映射,以及与Ajax和Java平台的无缝集成。

    Grails入门精通及中文API

    Grails入门到精通,Java平台快速web开发之选。

    Eclipse下搭建Grails项目

    Grails项目的应用越来越多,而对于初学者来说,在Eclipse下搭建Grails项目是一个难题,这个文档将教会你如何搭建Grails项目,希望对你有所帮助。

    Grails入门指南 -- 针对grails1.0.4更新

    Grails入门指南中文pdf -- 针对grails1.0.4更新,附加idea8 开发grails的流程

    grails login

    grails 用户登录的例子,必须登录后才可以查看信息,并且只有admin用户才可以创建用户,此例子,只要将grails 的环境配好,就可以用了,用的是自带的数据库,如果需要mysql 可以更改。

    Grails 教程

    易于使用的基于Hibernate的对象-关系映射(ORM)层 称为Groovy Server Pages (GSP)的表现层技术 基于Spring MVC的控制器层 构建于Gant 上的命令行脚本运行环境 内置Jetty服务器,不用重新启动服务器就可以进行重新加载...

    Grails1.1中文文档

    Grails1.1中文文档

    grails 1.0.4

    Grails专为下一代JavaWeb应用程序而设计的框架,其借助于Groovy动态语言,使...不过在我们继续介绍Grails之前,有必要先探究一下如今其他的Java框架及他们的用户体验,因为正是他们的积累,才会产生Grails这样的框架。

    grails+Xfire webservice

    grails+Xfire webservice

    grails

    grails-2.1.zip.001

Global site tag (gtag.js) - Google Analytics