SpringSide开发实战(四):打通数据持久层的任督二脉 - 编程入门网
rchar ( 20 ) not null ,
privilegesFlag varchar ( 255 ),
index (rolename)
);
创建群组表:
creatorid代表组的创始人,同时也是管理员,这里同样设置群组不做物理删除。 创建用户群组多对多映射辅助表:
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的代码:
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |