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