6 用Properties补充hibernate.cfg.xml配置

来源:互联网 发布:ubuntu安装mysql命令 编辑:程序博客网 时间:2024/04/30 04:49

     在一些特殊情况下,我们可能会把数据库连接信息保存在config.properties 文件中, 例如做一个install.jsp 来修改config.properties文件 ,实现对数据库信息的在线配置.这时 数据库连接信息保存在hibernate.cfg.xml就不方便.所以要单独保存到properties文件 中. 

config.properties文件内容如下 :

#数据库IPdbhost = localhost#端口号dbport=3306#用户名dbuser = root#密码dbpw = 1234#数据库名dbname = test
 

 

hibernate.cfg.xml 文件 无数据库配置信息, 如下:

<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory ><property name="show_sql">true</property><property name="hibernate.hbm2ddl.auto">update</property><property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><!--   注释了, 不起作用//<property name="hibernate.connection.url">jdbc:mysql:///test</property>//<property name="hibernate.connection.username">root</property>//<property name="hibernate.connection.password">1234</property>    --><mapping resource="dao/po/User.hbm.xml"/></session-factory></hibernate-configuration>

 我们这样结合使用:

package dao;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.InputStream;import java.io.UnsupportedEncodingException;import java.net.URLDecoder;import java.util.Properties;import org.hibernate.HibernateException;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;/** * 这是一个工具类, 快速取得session *  */public class HibernateUtil{static SessionFactorysessionFactory= null;static{try{final String path = URLDecoder.decode(Thread.currentThread().getContextClassLoader().getResource("config.properties").getPath(), "UTF-8"); //config.properties保存的真实路径final Properties properties = new Properties();final InputStream fis = new FileInputStream(path); //config.properties 文件对象,里面有数据库的连接信息,properties.load(fis);fis.close(); //关流final String dbhost = properties.getProperty("dbhost"); //数据库IP(从config.properties读)final String dbport = properties.getProperty("dbport"); //端口(从config.properties读)final String dbname = properties.getProperty("dbname"); //数据库名(从config.properties读)final String dbuser = properties.getProperty("dbuser"); //用户名(从config.properties读)final String dbpw = properties.getProperty("dbpw"); //密码(从config.properties读)final Properties extraProperties = new Properties();extraProperties.setProperty("hibernate.connection.url", "jdbc:mysql://" + dbhost + ":" + dbport + "/"+ dbname + "?zeroDateTimeBehavior=convertToNull");extraProperties.setProperty("hibernate.connection.username", dbuser);extraProperties.setProperty("hibernate.connection.password", dbpw);final Configuration cfg = new Configuration();cfg.addProperties(extraProperties);cfg.configure("hibernate.cfg.xml"); //路径可以改变sessionFactory = cfg.buildSessionFactory();}catch (final UnsupportedEncodingException e){//不支持字符编码。e.printStackTrace();}catch (final FileNotFoundException e){//config.properties文件没找到e.printStackTrace();}catch (final HibernateException e){//cfg.configure("hibernate.cfg.xml");时异常e.printStackTrace();}catch (final Exception e){//创建SessionFactory 异常e.printStackTrace();}}public static SessionFactory getSessionFactory(){return sessionFactory;}/** * 取得session *  * @return session */public static Session getSeesion(){return sessionFactory.openSession();}}