本篇为struts-2.5.2和spring-3.2.0以及hibernate-4.2.21的整合开篇。
一、测试的数据库表。
用户、角色和权限关系表。数据库是Mysql5.6。为了考虑到一些特殊数据类型处理,用户表(类)中加入日期(birthday-Date)和枚举(gender-Gender)类型。
用户、权限和角色的数据库设计,使用用户、角色和权限,多表查询的设计(关系如上图)。如果多对多的关系应该可以设计如下。(用户和角色)
1、User.hbm.xml
User.java中有一个Set<Role> roles
2、Role.hbm.xml
Role.java中有一个Set<User> users
3、生成的表
会生成中间表(user_role),有两个键user_id,role_id,且为联合主键。
二、SessionFactoryUtil(工具类)
要使用Session来操作数据库,需要通过SessionFactory来建立了。
hibernate 3 通过buildSessionFactory来创建的,但在4已经不推荐了。
大致如下:
Configuration configuration = new Configuration();
configuration.configure(configFile);
sessionFactory = configuration.buildSessionFactory();
hibernate 4 推荐用到ServiceRegistry来建立。
public class HibernateUtil { private static final SessionFactory sessionFactory = buildSessionFactory(); private static SessionFactory buildSessionFactory() { try { // Create the SessionFactory from hibernate.cfg.xml Configuration configuration = new Configuration().configure(); //要注意这里要再configure(),即默认配置的cfg.xml。也可以指定 ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry(); return configuration.buildSessionFactory(serviceRegistry); } catch (Throwable ex) { // Make sure you log the exception, as it might be swallowed System.err.println("Initial SessionFactory creation failed." + ex); throw new ExceptionInInitializerError(ex); } } public static SessionFactory getSessionFactory() { return sessionFactory; } }