原文出自: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 Grails Grails
Grails权威指南Grails权威指南Grails权威指南Grails权威指南Grails权威指南Grails权威指南
第1章 寻找grails之旅 1.1 java的困惑 1.2 webc2.0时代 1.3 java的力量 1.4 什么是grails 1.4.1 与java集成 1.4.2 简单而强大 1.4.3 吸取的经验教训 1.5 使用grails的原因 ...
Grails项目的应用越来越多,而对于初学者来说,在Eclipse下搭建Grails项目是一个难题,这个文档将教会你如何搭建Grails项目,希望对你有所帮助。
Grails入门指南中文pdf -- 针对grails1.0.4更新,附加idea8 开发grails的流程
Grails1.1中文文档
grails+Xfire webservice
grails-2.1.zip.001
在学习任何东西之前,最重要的是培养兴趣,Groovy世界最耀眼的技术之一--Grails相信大家早已耳闻,我将通过Grails实战系列文章 向您展现Grails的迷人风采,使您感受到Grails的魅力,以至疯狂地爱上Grails,并坠入...
详细讲解grails开发环境配置。 详细讲解grails连接mysql数据库,crud开发
供初学者使用,在grails中只有list(自动生成)中有分页实现,而自己新增的页面中需自己实现分页,该文档中描述了如何实现分页以及注意点
Grails 中文 参考手册
本教程介绍 Grails,这是一个搭建在动态语言 Groovy 之上的开源 MVC 快速 Web 开发框架。使用 Grails 可以提高 Web 开发的...从 Grails 自动生成代码入手,以示例为中心逐步增加深度与难度,对 Grails 开发进 行演示。
Grails专为下一代JavaWeb应用程序而设计的框架,其借助于Groovy动态语言,使Web开发变得简单而方便。Grails尽量为更多现有的Java项目创建一个全面的框架(不仅局限于视图处理),这和当前一些Java框架提供给用户的一...
grails3.2.8 part1
grails grails入门经典 grails入门 grails例子 grails资料 通过自学一点点积累起来的,相信对你有帮助的。
Grails 1.3.7英文版官方参考手册,学习Grails的权威指南
grails 中文文档+grails-fckeditor-0.9.5.zip插件
grails-2.3.6