引用:
Hibernate 配置通过c3p0连接MYSQL** 需要的包: c3p0_versionxx.jar** hibernate.cfg.xml<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" ""><!-- Generated by MyEclipse Hibernate Tools. --><hibernate-configuration><session-factory> <property name="connection.url">jdbc:mysql://localhost:3306/spring</property> <property name="connection.username">root</property> <property name="connection.password">fangjean</property> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.useUnicode">true</property> <property name="connection.characterEncoding">UTF-8</property> <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property> <property name="hibernate.c3p0.max_size">20</property> <property name="hibernate.c3p0.min_size">5</property> <property name="hibernate.c3p0.timeout">120</property> <property name="hibernate.c3p0.max_statements">100</property> <property name="hibernate.c3p0.idle_test_period">120</property> <property name="hibernate.c3p0.acquire_increment">2</property> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <property name="show_sql">true</property> <mapping resource="cn/com/mytest/dao/hibernate/Tblogin.hbm.xml" /> <mapping resource="cn/com/mytest/dao/hibernate/Tbfile.hbm.xml"></mapping></session-factory></hibernate-configuration>Hibernate 配置proxool 连接MYSQL** 需要的包: proxool_versionxx.jar** proxool.xml<?xml version="1.0" encoding="UTF-8"?><!-- the proxool configuration can be embedded within your own application's.Anything outside the "proxool" tag is ignored. --><something-else-entirely> <proxool> <!--连接池的别名--> <alias>DBPool</alias> <!--proxool只能管理由自己产生的连接--> <driver-url>jdbc:mysql://localhost:3306/spring</driver-url> <!-- JDBC驱动程序--> <driver-class>com.mysql.jdbc.Driver</driver-class> <driver-properties> <property name="user" value="root"/> <property name="password" value="fangjean"/> </driver-properties> <!-- proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回 收,超时的销毁--> <house-keeping-sleep-time>90000</house-keeping-sleep-time> <!-- 指因未有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的 用户连接就不会被接受--> <maximum-new-connections>20</maximum-new-connections> <!-- 最少保持的空闲连接数--> <prototype-count>5</prototype-count> <!-- 允许最大连接数,超过了这个连接,再有请求时,就排在队列中等候,最大的 等待请求数由maximum-new-connections决定--> <maximum-connection-count>100</maximum-connection-count> <!-- 最小连接数--> <minimum-connection-count>10</minimum-connection-count></proxool></something-else-entirely>** hibernate.cfg.xml<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" ""><!-- Generated by MyEclipse Hibernate Tools. --><hibernate-configuration><session-factory> <property name="hibernate.connection.provider_class">org.hibernate.connection.ProxoolConnectionProvider</property> <property name="hibernate.proxool.pool_alias">DBPool</property> <property name="hibernate.proxool.xml">proxool.xml</property> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <property name="show_sql">true</property> <mapping resource="cn/com/mytest/dao/hibernate/Tblogin.hbm.xml" /> <mapping resource="cn/com/mytest/dao/hibernate/Tbfile.hbm.xml"></mapping></session-factory></hibernate-configuration>** SessionFactoryClass.javapackage cn.com.mytest.dao.hibernate.config;import org.hibernate.HibernateException;import org.hibernate.Session;import org.hibernate.cfg.Configuration;/** * Configures and provides access to Hibernate sessions, tied to the * current thread of execution. Follows the Thread Local Session * pattern, see {@link }. */public class SessionFactoryClass { /** * Location of hibernate.cfg.xml file. * NOTICE: Location should be on the classpath as Hibernate uses * #resourceAsStream style lookup for its configuration file. That * is place the config file in a Java package - the default location * is the default Java package.<br><br> * Examples: <br> * <code>CONFIG_FILE_LOCATION = "/hibernate.conf.xml". * CONFIG_FILE_LOCATION = "/com/foo/bar/myhiberstuff.conf.xml".</code> */ private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml"; /** Holds a single instance of Session */ private static final ThreadLocal threadLocal = new ThreadLocal(); /** The single instance of hibernate configuration */ private static final Configuration cfg = new Configuration(); /** The single instance of hibernate SessionFactory */ private static org.hibernate.SessionFactory sessionFactory; /** * Returns the ThreadLocal Session instance. Lazy initialize * the <code>SessionFactory</code> if needed. * * @return Session * @throws HibernateException */ public static Session currentSession() throws HibernateException { Session session = (Session) threadLocal.get(); if (session == null) { if (sessionFactory == null) { try { cfg.configure(CONFIG_FILE_LOCATION); sessionFactory = cfg.buildSessionFactory(); } catch (Exception e) { System.err.println("%%%% Error Creating SessionFactory %%%%"); e.printStackTrace(); } } session = sessionFactory.openSession(); threadLocal.set(session); } return session; } /** * Close the single hibernate session instance. * * @throws HibernateException */ public static void closeSession() throws HibernateException { Session session = (Session) threadLocal.get(); threadLocal.set(null); if (session != null) { session.close(); } } /** * Default constructor. */ private SessionFactoryClass() { }}BLOB 字段的使用(和hibernate的配合使用)1。MySQL supports four different BLOB datatypes: TINYBLOB, BLOB, MEDIUMBLOB, and LONGBLOB.2。建立表:tbfileCREATE TABLE `tbfile` ( `fileid` int(11) NOT NULL auto_increment, `filename` varchar(200) default NULL, `filesize` int(11) default NULL, `filebody` longblob, `createuserid` int(11) default NULL, `createdate` date default NULL, PRIMARY KEY (`fileid`))3. tbfile.hbm.xml<?xml version="1.0" encoding='UTF-8'?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "" ><!-- DO NOT EDIT: This is a generated file that is synchronized --><!-- by MyEclipse Hibernate tool integration. --><!-- Created Thu Jul 10 10:41:47 CST 2008 --><hibernate-mapping package="cn.com.mytest.dao.hibernate"> <class name="Tbfile" table="tbfile"> <id name="fileid" column="fileid" type="integer"> <generator class="increment"/> </id> <property name="filename" column="filename" type="string" /> <property name="filesize" column="filesize" type="integer" /> <!-- <property name="filebody" column="filebody" type="serializable" /> --> <property name="filebody"> <column name="filebody" sql-type="LONGBLOB" /> </property> <property name="createuserid" column="createuserid" type="integer" /> <property name="createdate" column="createdate" type="date" /> </class> </hibernate-mapping>4. AbstractTbfile.javapackage cn.com.mytest.dao.hibernate;import java.io.Serializable;import java.sql.Blob;/** * A class that represents a row in the tbfile table. * You can customize the behavior of this class by editing the class, {@link Tbfile()}. * WARNING: DO NOT EDIT THIS FILE. This is a generated file that is synchronized * by MyEclipse Hibernate tool integration. */public abstract class AbstractTbfile implements Serializable{ /** The cached hash code value for this instance. Settting to 0 triggers re-calculation. */ private int hashValue = 0; /** The composite primary key value. */ private java.lang.Integer fileid; /** The value of the simple filename property. */ private java.lang.String filename; /** The value of the simple filesize property. */ private java.lang.Integer filesize; /** The value of the simple filebody property. */ //private java.lang.String filebody; private Blob filebody; /** The value of the simple createuserid property. */ private java.lang.Integer createuserid; /** The value of the simple createdate property. */ private java.util.Date createdate; /** * Simple constructor of AbstractTbfile instances. */ public AbstractTbfile() { } /** * Constructor of AbstractTbfile instances given a simple primary key. * @param fileid */ public AbstractTbfile(java.lang.Integer fileid) { this.setFileid(fileid); } /** * Return the simple primary key value that identifies this object. * @return java.lang.Integer */ public java.lang.Integer getFileid() { return fileid; } /** * Set the simple primary key value that identifies this object. * @param fileid */ public void setFileid(java.lang.Integer fileid) { this.hashValue = 0; this.fileid = fileid; } /** * Return the value of the filename column. * @return java.lang.String */ public java.lang.String getFilename() { return this.filename; } /** * Set the value of the filename column. * @param filename */ public void setFilename(java.lang.String filename) { this.filename = filename; } /** * Return the value of the filesize column. * @return java.lang.Integer */ public java.lang.Integer getFilesize() { return this.filesize; } /** * Set the value of the filesize column. * @param filesize */ public void setFilesize(java.lang.Integer filesize) { this.filesize = filesize; } /** * Return the value of the filebody column. * @return java.lang.String */ public Blob getFilebody() { return this.filebody; } /** * Set the value of the filebody column. * @param filebody */ public void setFilebody(Blob filebody) { this.filebody = filebody; } /** * Return the value of the createuserid column. * @return java.lang.Integer */ public java.lang.Integer getCreateuserid() { return this.createuserid; } /** * Set the value of the createuserid column. * @param createuserid */ public void setCreateuserid(java.lang.Integer createuserid) { this.createuserid = createuserid; } /** * Return the value of the createdate column. * @return java.util.Date */ public java.util.Date getCreatedate() { return this.createdate; } /** * Set the value of the createdate column. * @param createdate */ public void setCreatedate(java.util.Date createdate) { this.createdate = createdate; } /** * Implementation of the equals comparison on the basis of equality of the primary key values. * @param rhs * @return boolean */ public boolean equals(Object rhs) { if (rhs == null) return false; if (! (rhs instanceof Tbfile)) return false; Tbfile that = (Tbfile) rhs; if (this.getFileid() == null || that.getFileid() == null) return false; return (this.getFileid().equals(that.getFileid())); } /** * Implementation of the hashCode method conforming to the Bloch pattern with * the exception of array properties (these are very unlikely primary key types). * @return int */ public int hashCode() { if (this.hashValue == 0) { int result = 17; int fileidValue = this.getFileid() == null ? 0 : this.getFileid().hashCode(); result = result * 37 + fileidValue; this.hashValue = result; } return this.hashValue; }}5. Tbfile.javapackage cn.com.mytest.dao.hibernate;import java.io.Serializable;import java.io.InputStream;import java.io.IOException;import java.sql.SQLException;import org.hibernate.Hibernate;/** * A class that represents a row in the 'tbfile' table. * This class may be customized as it is never re-generated * after being created. */public class Tbfile extends AbstractTbfile implements Serializable{ /** * Simple constructor of Tbfile instances. */ public Tbfile() { } /** * Constructor of Tbfile instances given a simple primary key. * @param fileid */ public Tbfile(java.lang.Integer fileid) { super(fileid); } /* Add customized code below */ public InputStream getFilebodyStream() throws SQLException{ if(getFilebody()==null) return null; System.out.println("is not null"); return getFilebody().getBinaryStream(); } public void setFilebodyStream(InputStream input) throws IOException{ setFilebody(Hibernate.createBlob(input)); }}6. insert an object: String filename = "abc.doc"; File file = new File(filename); try{ FileInputStream fis = new FileInputStream(file); Tbfile tfile = new Tbfile(); tfile.setCreatedate(new java.util.Date()); tfile.setCreateuserid(new Integer(2)); tfile.setFilebodyStream(fis); tfile.setFilename("abc.doc"); tfile.setFilesize(new Integer((int)file.length())); FileDaoImpl dao = new FileDaoImpl(); dao.add(tfile); }catch(Exception ex){ ex.printStackTrace(); }7. get an object try{ Tbfile tfile = new Tbfile(); FileDaoImpl dao = new FileDaoImpl(); tfile = (Tbfile) dao.get(new Integer(2)); String filename = tfile.getFilename().trim(); InputStream fis = tfile.getFilebodyStream(); filename = "E://" + filename; if(fis!=null){ File file = new File(filename); FileUtility.save(fis,file); } }catch(Exception ex){ ex.printStackTrace(); }8. FileUtility.java public static void save(InputStream is, File file){ if(file==null) log.error("FileUtility.save(InputStream is, File file) error: File file is null!"); if(is==null) log.error("FileUtility.save(InputStream is, File file) error: InputStream is is null!"); try{ OutputStream out = new FileOutputStream(file); byte buf[] = new byte[1024*4]; int len = 0; while((len=is.read(buf))>0){ out.write(buf,0,len); } out.close(); is.close(); }catch(IOException ioe){ log.error("FileUtility.save(InputStream is, File file) error:" + ioe.getMessage()); ioe.printStackTrace(); }catch(Exception ex){ log.error("FileUtility.save(InputStream is, File file) error:" + ex.getMessage()); ex.printStackTrace(); } }