package ly.test; import java.io.IOException; import java.sql.Connection; import java.sql.SQLException; import java.util.Properties; import ly.po.Param; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.transform.Transformers; import org.springframework.orm.hibernate4.LocalSessionFactoryBean; import com.mchange.v2.c3p0.ComboPooledDataSource; public class MyConfiguration { /** * 獲取 dataSource鏈接池 * 方法內設置的屬性值能夠放在參數中,方便動態封裝 * @return c3p0數據源 */ public ComboPooledDataSource getDataSource(){ ComboPooledDataSource cpds=new ComboPooledDataSource(); try{ cpds.setDriverClass("com.mysql.jdbc.Driver"); cpds.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/oa_db_center?useUnicode=true&characterEncoding=utf8"); cpds.setUser("root"); cpds.setPassword("root"); //鏈接池中保留的最小鏈接數。 cpds.setMinPoolSize(5); //鏈接池中保留的最大鏈接數。Default: 15 cpds.setMaxPoolSize(60); //初始化時獲取的鏈接數,取值應在minPoolSize與maxPoolSize之間。Default: 3 cpds.setInitialPoolSize(10); //最大空閒時間,60秒內未使用則鏈接被丟棄。若爲0則永不丟棄。Default: 0 cpds.setMaxIdleTime(60); //當鏈接池中的鏈接耗盡的時候c3p0一次同時獲取的鏈接數。Default: 3 cpds.setAcquireIncrement(5); //JDBC的標準參數,用以控制數據源內加載的PreparedStatements數量。但因爲預緩存的statements 屬於單個connection而不是整個鏈接池。因此設置這個參數須要考慮到多方面的因素。 //若是maxStatements與maxStatementsPerConnection均爲0,則緩存被關閉。Default: 0 cpds.setMaxStatements(0); //每60秒檢查全部鏈接池中的空閒鏈接。Default: 0 cpds.setIdleConnectionTestPeriod(60); //定義在從數據庫獲取新鏈接失敗後重復嘗試的次數。Default: 30 cpds.setAcquireRetryAttempts(30); //獲取鏈接失敗將會引發全部等待鏈接池來獲取鏈接的線程拋出異常。可是數據源仍有效 保留,並在下次調用getConnection()的時候繼續嘗試獲取鏈接。若是設爲true,那麼在嘗試 //獲取鏈接失敗後該數據源將申明已斷開並永久關閉。Default: false cpds.setBreakAfterAcquireFailure(true); //-因性能消耗大請只在須要的時候使用它。若是設爲true那麼在每一個connection提交的 時候都將校驗其有效性。建議使用idleConnectionTestPeriod或automaticTestTable //等方法來提高鏈接測試的性能。Default: false cpds.setTestConnectionOnCheckout(false); return cpds; }catch(Exception ex){ ex.printStackTrace(); return null; } } /** * 獲取LocalSessionFactoryBean配置屬性 * 方法內設置的屬性值能夠放在參數中,方便動態封裝 * @return */ public Properties getProperties(){ Properties properties=new Properties(); properties.setProperty("hibernate.dialect","org.hibernate.dialect.MySQL5Dialect"); properties.setProperty("hibernate.current_session_context_class","org.springframework.orm.hibernate4.SpringSessionContext"); properties.setProperty("hibernate.hbm2ddl.auto","update"); properties.setProperty("hibernate.show_sql","true"); properties.setProperty("hibernate.format_sql","false"); properties.setProperty("current_session_context_class","thread"); properties.setProperty("hibernate.temp.use_jdbc_metadata_defaults","false"); return properties; } /** * 獲取SessionFactory * @param dataSource 數據源對象 * @param properties LocalSessionFactoryBean屬性對象 * @return SessionFactory 失敗返回null */ public SessionFactory getSessionFactory(ComboPooledDataSource dataSource,Properties properties){ SessionFactory sessionFactory=null; try { LocalSessionFactoryBean localSessionFactory=new LocalSessionFactoryBean(); localSessionFactory.setDataSource(dataSource); localSessionFactory.setHibernateProperties(properties); /** * 下面代碼在設置完localSessionFactory屬性後必須調用!! * 以前就沒有調用致使localSessionFactory.getObject(); 一直返回null */ localSessionFactory.afterPropertiesSet(); sessionFactory=localSessionFactory.getObject(); } catch (IOException e) { e.printStackTrace(); } return sessionFactory; } /** * 獲取Connection * 覺得dataSource能夠直接獲取到jdbc的Connection * 因此能夠直接jdbc操做,本例中沒有使用 * @param cpds 數據源對象 * @return Connection */ public Connection getConn(ComboPooledDataSource cpds){ try { return cpds.getConnection(); } catch (SQLException e) { e.printStackTrace(); return null; } } public static void main(String[]args) throws IOException{ MyConfiguration confinguration=new MyConfiguration(); //獲取c3p0 DataSource ComboPooledDataSource dataSource=confinguration.getDataSource(); //獲取LocalSessionFactoryBean配置屬性 Properties properties=confinguration.getProperties(); //獲得sessionFactory SessionFactory sessionFactory=confinguration.getSessionFactory(dataSource,properties); //獲得Session Session session=sessionFactory.openSession(); //測試sql String sql="select date_format(NOW(),'%Y-%m-%d %H:%i:%S') str from dual"; Query query=session.createSQLQuery(sql).setResultTransformer(Transformers.aliasToBean(Param.class)); Param param=(Param)query.list().get(0); String str=param.getStr(); System.out.println("str->>"+str); } }
console 信息:java
Hibernate: select date_format(NOW(),'%Y-%m-%d %H:%i:%S') str from dualmysql
str->>2015-09-06 12:18:32spring