测试用数据库表设计和SessionFactory

本篇为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;
    }
}

 

posted @ 2016-08-22 14:54  jway0101  阅读(466)  评论(0编辑  收藏  举报