對Hibernate框架的學習
-
Hibernate 的執行流程
1、配置文件 (hbm.xml 映射文件,建立對象和表的關係映射;.java 對象;.hibernate.cfg.xml(Hibernate的主配置文件))
2、通過Configuration加載配置文件,準備hibernate的運行環境
3、創建SessionFactory創建會話工廠,用於創建session
4、通過sessionFactory創建session會話 通過session發出sql語句
5、增刪改需要開啓事物,通過transaction提交或者回滾
6、查詢操作,不需要開啓事物,通過query對象構造查詢條件查詢
7、釋放資源 -
在hbm.xml 文件下配置:
// hbm.xml的配置 先進行配置Hibernate的dtd約束
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-/Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernatre.org/dtd/hibernate-mapping-3.0.dtd">
<!--配置表和類的映射關係-->
<hibernate-mappin>
<class name="類名" table="表名">
<!--配置主鍵的映射-->
<id name="類中的屬性名" type="屬性的類型">
<column name="數據表的主鍵名"></column>
<!-- identity自增;uuid(唯一字符串);assgiend(手動指定)-->
<generator class="identity"></generator>
</id>
<!--普通的屬性和表的映射-->
<property name="類的屬性名" type="string(Hibernatet提供的類型,不寫的話爲字符串)">
<column name="表的字段的名稱" length="長度"></column>
</property>
。
。
。
<!--使用工具去生成這些對應的關係-->
</class>
</hibernate-mapping/>
// 配置主配置文件 hibernate.cfg.xml
// hbm.xml的配置 先進行配置Hibernate的dtd約束
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-/Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernatre.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-configuration>
<session_factory>
<!--配置hibernate的運行參數-->
<!--數據庫方言,根據選擇的數據庫進行配置-->
<property name="hibernat.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<!--數據庫連接url-->
<property name="hibernate.connection.url"> jdbc:mysql://localhost:3306/text_hibernate</property>
<!--加載數據庫的名稱和密碼-->
<property name="hobernate.connection.username">root</property>
<property name="hibernate.connection.password">123</property>
<!--是否允許輸出sql語句-->
<property name="hibernate-show_sql">true</property>
<!--是否允許sql語句格式化-->
<property name="hibernate.format_sql">true</property>
<!--sql驅動-->
<property name="hibernate.connection.driver_class">com.sql.jdbc.Driver</property>
<!--自動補全-->
<property name="hibernate.hbm2ddl.auto">none</property>
<!--加載hnm.xml的映射文件-->
<mapping resource="cn/zhou/ hbm.xml" />
</session-factory>
</hibernate-configuration>
QBC的研究和學習
QBC是按照條件查詢,通過Criteria構造查詢條件,即,通過使用Criteria的api進行去查詢。通過對象進行拼裝去查詢。Hibernate 通過所拼寫的對象生成sql語句!
// 通過Criteria對象去分組查詢
Criteria criteria=session.createCriteria(Castumer.class);
criteria.add(Restrictions.eq("","")); //查詢的條件
criteria.add(Restrictions.like("","%內容%")); //查詢的條件
//查詢單個投影列
criteria.setProjection(Projections.property("列名"))
List list=criteria.list();
//查詢多個投影列.
criteria.setProjection(Projections.projectionList().add(Projections.property("列名"))
.add(Projections.property("列名"))
.add(Projections.property("列名"))
);
//將結果封裝成對象object[]數組轉成對象
criteria.setResultTransformer(new AliasToBeanResultTransformer(Cstumer.class));
//記錄總數的查詢
criteria.setProjection(Projections.rowCount());
Long title=criteria.uniqueResult();
Log4j的學習
- 使用log4j自定義輸出日誌信息
- hibernate 默認使用的是slf4j框架
- slf4提供了提了一套日誌接口的規範
Log4j的使用步驟:
1、在根目錄下添log4.properties
2、將jar包導進去
Log4j包括三個主要部件:
記錄器:(Logger):配置日誌在哪記錄
輸出源:(Appender):配置輸出到哪裏
佈局:(Layouts):指定日誌輸出的格式
配置的內容:
log4j.rootLogger=debug,A
log4j.appender.A=org.apache.log4j.ConsoleAppender
log4j.appender.A.layout=org.apache.log4j.PatternLayout
日誌級別會將比 log4j.rootLogger=debug A (debug)高的輸出出來。
在開發結算將日誌級別設置成debug,生產期間設置成infor或error
//在查詢sql的時候可以將參數打印出來
log4j.logger.org.hibernate.type=TRACE
連接池c3p0
<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>