1. 程式人生 > 其它 >Python中'+='和extend的區別

Python中'+='和extend的區別

框架是什麼?

1.框架是用來提高開發效率的
2.封裝了一些功能,我們需要使用這些功能時呼叫即可,不需要手動實現
3.所以框架可以理解為是一個半成品專案,我們只需要懂得如何駕馭這些功能即可

Hibernate框架是什麼?

Hibernate的好處?

操作是資料庫的時候.可以以面向物件的方式來完成,不需要書寫SQL語句

Hibernate是一款orm框架


orm:object relation mapping 物件關係對映.

使用配置(或者其他手段)將物件的資訊資料庫的表進行繫結來完成持久化操作,這種性質就稱為orm

搭建Hibernate框架


1.導包


  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-core</artifactId>
      <version>5.0.7.Final</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-entitymanager -->
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-entitymanager</artifactId>
      <version>5.0.7.Final</version>
    </dependency>
    <!--JSP支援包-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.0</version>
      <scope>provided</scope>
    </dependency>
    <!--Servlet-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
      <scope>provided</scope>
    </dependency>
    <!--mysql驅動-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.6</version>
    </dependency>
  </dependencies>

2.建立資料庫,準備表

DROP TABLE IF EXISTS `customer`;
CREATE TABLE `customer` (
  `c_id` int(18) NOT NULL DEFAULT '0',
  `c_name` varchar(155) DEFAULT NULL,
  PRIMARY KEY (`c_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of customer
-- ----------------------------
INSERT INTO `customer` VALUES ('1', 'zhangsan');

3.書寫orm元資料(物件與表的對映配置檔案)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 <!--配置表與實體物件的關係  -->
 <!--package:填寫一個包名 ,在元素內部凡是需要書寫類名屬性,可以直接寫簡寫類名了  -->
<hibernate-mapping package="com.chinasofti.domain">
     <!--class元素:配置實體與表之間的關係
         name:完整類名
         table:資料庫表名
     -->
    <class name="Customer" table="cst_customer" lazy="true">
        <!--id:配置主鍵對映的屬性
                name:填寫主鍵對應的屬性名
                column(可選):填寫表中的屬性列名,預設值:列名會預設使用屬性名
                type(可選):填寫列(屬性)的型別,hibernate會自動檢測實體的屬性型別
                not-null(可選):配置改屬性(列)是否不能為空。 預設值:false
                length(可選):配置資料庫中列的長度。預設值:使用資料庫型別的最大長度
          -->
        <id name="cust_id" column="cust_id">
            <!--generator:主鍵生成策略 
                identity: 主鍵自增,由資料庫來維護主鍵值,錄入時,不需要指定主鍵
                sequence: Oracle中的主鍵生成策略
                increment(瞭解):主鍵自增,由hibernate來維護,開發時一般不使用
                hilo:高低位演算法,主鍵自增,由hibernate類維護,開發時一般不適用
                native:hilo+sequence+identity 自動三選一
                uuid:產生隨機字串作為主鍵,主鍵型別必須為String型別
                assigned:自然主鍵生成策略,hibernate不會管理主鍵值,由開發人員自己錄入
             -->
            <generator class="native"></generator>
        </id>
        <!--property:除ID之外的普通元素對映
            name:填寫屬性名
            column:填寫列名
            type(可選):填寫列(屬性)的型別,hibernate會自動檢測實體的屬性型別
            not-null(可選):配置改屬性(列)是否不能為空。 預設值:false
            length(可選):配置資料庫中列的長度。預設值:使用資料庫型別的最大長度
          -->
        <property name="cust_name" column="cust_name" type="java.lang.String"></property>
        <property name="cust_source" column="cust_source"></property>
        <property name="cust_level" column="cust_level"></property>
        <property name="cust_linkman" column="cust_linkman"></property>
        <property name="cust_phone" column="cust_phone"></property>
        <!--集合,一對多關係
            name屬性:集合屬性名
            column屬性:外來鍵列名
            class屬性:與我關聯的物件的完整類名        
          -->
         <!--級聯操作:cascade
             save-update: 級聯儲存更新
             delete:級聯刪除
             all: save-update+delete
         
           -->
         <!--inverse屬性:配置關係是否維護
                 true: customer不維護關係
                 false:customer維護關係
              效能優化,提高關係維護的效能
              原則:無論怎麼放棄,總是有一方必須要維護關係
              一對多的關係中:只能是一的放棄,多的一方不能放棄
           --> 
           <!--
                   lazy屬性:決定是否延遲載入
                       true(預設值):延遲載入,重載入
                       flase:立即載入
                       extra:及其懶惰
                   fetch屬性:決定載入策略,使用什麼型別的sql查詢方式去載入
                       select(預設值):查表查詢策略
                       join:使用多表查詢載入策略
                       subselect:使用子查詢載入策略
             --> 
             <!--
                 batch-size:  抓取集合的數量
               -->
        <set name="linkMans" inverse="true" lazy="true" fetch="subselect">
            <key column="lkm_cust_id"></key>
            <one-to-many class="LinkMans"/>
        </set>
    </class>
</hibernate-mapping>

4.書寫住配置檔案

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <!--資料庫驅動  -->
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <!--資料庫連線  -->
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>
    <!--資料庫連線使用者名稱  -->
    <property name="hibernate.connection.username">root</property>
    <!--資料庫連線密碼  -->
    <property name="hibernate.connection.password">123456</property>
    <!--資料庫方言
        不同的資料庫中,sql語法略有區別
      -->
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

    <!--講hibernate生成的sql語句列印到控制檯  -->
    <property name="hibernate.show_sql">true</property>
    <!--講hibernate生成的sql語句格式化(語法縮排)  -->
    <property name="hibernate.format_sql">true</property>

    <!--
        自動匯出表結構,自動建表

        hibernate.hbm2ddl.auto  create        自動建表,每次框架執行都會建立新的表,以前的表將會被覆蓋,表資料會丟失。(開發環境中使用)
          hibernate.hbm2ddl.auto  create-drop   自動建表,每次框架執行結束都會將所有表刪除(開發環境中使用)
          hibernate.hbm2ddl.auto  update(推薦使用)自動建表,如果已經存在則不會再生成,如果表結構有變動,自動更新表(不會刪除任何資料)
          hibernate.hbm2ddl.auto  validate      校驗,不會自動生成表,每次框架執行時,都會校驗表結構
      -->
    <!--     <property name="hibernate.hbm2ddl.auto">update</property> -->

    <!--指定hibernate操作資料庫時的隔離級別
    hibernate.connection.isolation
           1  讀未提交
           2 讀已提交
           4 可重複讀
           8序列化
    -->
    <property name="hibernate.connection.isolation">4</property>

    <!--指定session與當前執行緒繫結  -->
<!--    <property name="hibernate.current_session_context_class">thread</property>-->

    <!--將對映檔案載入到主配置檔案-->
    <mapping class="com.chinasofti.pojo.Customer"/>
    <mapping class="com.chinasofti.pojo.Order"/>
  </session-factory>
</hibernate-configuration>

5.書寫程式碼測試

public class Test01 {
    private SessionFactory sessionFactory;
    private Session session;
    private Transaction transaction;
    @Test
    public void fun1(){
        Configuration conf = new Configuration().configure("hibernate.cfg.xml");

        //獲取session工廠
        sessionFactory = conf.buildSessionFactory();
        System.out.println(sessionFactory);

        session = sessionFactory.openSession();

        transaction = session.beginTransaction();

        //=================儲存客戶資訊
       Customer customer = new Customer();
       customer.setcId(1);
       customer.setcName("zhangsan");
       session.save(customer);

       transaction.commit();
       session.close();
       sessionFactory.close();

    }