快速业务通道

SpringSide开发实战(四):打通数据持久层的任督二脉 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
rchar ( 20 ) not  null , privilegesFlag varchar ( 255 ), index (rolename) );

创建群组表:

create  table groups( id int  not  null auto_increment primary  key , name varchar ( 40 ) not  null , creatorid int  not  null , createtime timestamp  not  null  default  CURRENT_TIMESTAMP , isdeleted varchar ( 2 ) not  null  default  '' 0 '' , index (groupname));

creatorid代表组的创始人,同时也是管理员,这里同样设置群组不做物理删除。

创建用户群组多对多映射辅助表:

create  table users_groups( id int  not  null auto_increment primary  key , userid int  not  null , groupid int  not  null , jointime timestamp , status tinyint , index (userid), index (groupid) );

SpringSide开发实战(四):打通数据持久层的任督二脉(3)

时间:2011-05-07 blogjava 海边沫沫

其中status列代表用户是否通过了管理员的批准,为了加快查找速度,在userid和 groupid列上建立索引。

设计完数据库,就该设计领域对象了,领域对象的设计方法为先设计简单的POJO,然后 再在POJO上添加Hibernate Annotation来配置映射关系。在进行Annotation配置的时候,可 以从以下几个方面进行思考。

1、使用什么样的数据类型映射数据库中的列类型?

2、对象之间是一对一、一对多还是多对多关系?

3、关联的对象之间哪一个作为主控方?

4、对象之间的关联是单向的还是双向的?

首先来看看users和roles之间的关系,考虑到加载一个用户数据的时候,往往同时需要 知道他属于哪个角色,而加载一个角色的时候,就没有必要知道它管理哪些用户了,因此, 它们是简单的单向关系,是多对一映射。当出现多对一映射的时候,永远都应该选择多的这 一方作为主控方,道理很简单,打个比方,让一个国家元首记住全国人民的名字基本是不可 能的,而让全国人民记住国家元首的名字就很简单了。因此,这里User作为主控方,Role作 为被控方。

再来看看数据类型的映射,对于简单的int、varchar这样的就不用多说了。而日期时间 类型的映射是一个重点,可以看到,前面的数据库创建语句中,所有需要时间的地方都使用 了timestamp列类型,使用timestamp列类型的唯一目的就是为了能够使用default CURRENT_TIMESTAMP语句,使用date和datetime类型就不行,在MySQL中,timestamp只能表 示从''1970-01-01 00:00:00''到2037年的范围。

MySQL中的timestamp和java.sql.Timestamp表现不一致,在MySQL中,timestamp和 datetime类型精度是一样的,都只能储存到整数秒,而timestamp比datetime能表示的时间 范围要小得多,在Java中,java.util.Date和MySQL的timestamp的精度是一致的,只能储存 到整数秒,而java.sql.Timestamp还保存毫微秒,因此建议使用java.util.Date来映射 timestamp列,使用java.sql.Timestamp只是浪费。

MySQL和Java在时间上面还有一个冲突,那就是MySQL支持全零的时间,如''0000-00-00 00:00:00'',而Java不支持,因此如果在定义users表的logintime列时使用logintime timestamp not null default ''0000-00-00 00:00:00'',那么在使用Hibernate来获取User 对象的时候就会出错,所以在创建数据库的时候要选择一个合法的默认时间,如''2007-01- 01 00:00:00''。

下面请看User.java的代码:

package com.xkland.domain; import java.io.Serializable; import java.util.Date; import org.springside.core.dao.extend.Undeletable; import org.hibernate.annotations.Cache; import org.hibernate.annotations.CacheConcurrencyStrategy; import javax.persistence. * ; @Entity

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号