有点像这个链接描述: Programmatically configure Hibernate with dynamic username and password
只是,
我需要相同的实现,但我无法指定applicationContext.xml
而不是hibernate.cfg.xml
,因为我的应用程序在applicationContext.xml
内的dataSource中指定了hibernate属性
像这样
<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>
编辑:
通过Java(直接来自Web应用程序UI)使用JDBC登录conn=DBUtils.getConnection(user, pass, host)
之类的东西,但使用 Hibernate 。
答案 0 :(得分:0)
想象一下,您在同名变量中拥有数据库 url , driverClassname ,用户名和密码 。在您的情况下,这些变量将从输入页面或用户生成该数据的任何位置填充。
你有一个 MyClass 类使用Hibernate注释配置 在包 com.myapplication.POJO
上因此,您只需创建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();
}
重要:我认为 Oracle8iDialect 是Oracle DB最常见的。如果您使用的是 Oracle 10g 或Oracle 9i,则应使用 org.hibernate.dialect.Oracle10gDialect 或 org.hibernate.dialect.Oracle9iDialect 。完整参考:http://docs.jboss.org/hibernate/orm/3.5/javadocs/org/hibernate/dialect/package-summary.html
答案 1 :(得分:0)
您可以在applicationContext.xml中使用动态值。 例如,您可以从环境变量指向的外部属性文件中读取值,该变量包含文件的路径:
<context:property-placeholder location="file:${my_environmental_variable_name}/project.properties" />
假设您的属性文件包含:
hibernate.connection.url=jdbc:mysql://localhost:3306/yourapplication
hibernate.connection.username=username
hibernate.connection.password=yourpassword
您可以通过以下方式在appcontext.xml中使用它们:
<bean id="dataSourceShrms" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="oracle.jdbc.OracleDriver" />
<property name="url" value="${hibernate.connection.url}" />
<property name="username" value="${hibernate.connection.username}" />
<property name="password" value="${hibernate.connection.password}" />
</bean>
因此,您可以运行自己的应用程序,每次为您的&#39; my_environmental_variable_name&#39;定义不同的值。环境变量指向不同的属性配置文件。