需要动态地使用数据库用户名和密码登录Hibernate

Fak*_*ikh 5 java spring hibernate

有点像这个链接描述:用 编程方式配置Hibernate动态用户名和密码

只是,我需要相同的实现,但我无法指定applicationContext.xml而不是hibernate.cfg.xml,因为我的应用程序在dataSource里面指定了hibernate属性,applicationContext.xml 所以

<bean id="dataSourceShrms" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="oracle.jdbc.OracleDriver" />
    <property name="url" value="jdbc:oracle:thin:@192.168.100.155:1546:TSHRMS" />
    <property name="username" value="${database.username}" />
    <property name="password" value="${database.password}" />
</bean>
Run Code Online (Sandbox Code Playgroud)

编辑:使用像JDBC登录conn=DBUtils.getConnection(user, pass, host)(直接从Web应用程序UI),但使用Hibernate.

Jav*_*rid 1

想象一下,您的数据库urldriverClassname用户名密码位于同名的变量中。在您的情况下,这些变量将从输入页面或用户引入该数据的任何地方填充。

并且您有一个MyClass类,在com.myapplication.POJO 包上配置了 Hibernate 注释

因此,您只需创建 Configuration 对象并查询数据库:

Configuration configuration = new Configuration().configure()
            .setProperty("hibernate.dialect", "org.hibernate.dialect.Oracle8iDialect")
            .setProperty("hibernate.connection.driver_class", driverClassname)
            .setProperty("hibernate.connection.url", url)
            .setProperty("hibernate.connection.username", username)
            .setProperty("hibernate.connection.password", password)

//In next line you just tell Hibernate which classes are you going to query
configuration = configuration.addPackage("com.myapplication.POJO").
                addAnnotatedClass(MyCustomClass.class);
StandardServiceRegistryBuilder ssrb = new StandardServiceRegistryBuilder()
                .applySettings(configuration.getProperties());
SessionFactory factory = configuration.buildSessionFactory(ssrb.build());

//We open session with database
Session session = factory.openSession();

List<MyCustomClass> result = null;
try {
    //Here we get the list of MyCustomClass objects from database
    result = session.createQuery("FROM MyCustomClass").list();
} catch (Exception e) {
    e.printStackTrace();
} finally {
    session.close();
}
Run Code Online (Sandbox Code Playgroud)

重要提示:我认为Oracle8iDialect是 Oracle DB 最常见的。如果您使用的是Oracle 10g或 Oracle 9i,则应该使用org.hibernate.dialect.Oracle10gDialectorg.hibernate.dialect.Oracle9iDialect。此处完整参考:http://docs.jboss.org/hibernate/orm/3.5/javadocs/org/hibernate/dialect/package-summary.html