<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    想飛就別怕摔

    大爺的并TM罵人

    Hibernate中操縱實體對象

    一、Session的保存、刪除及更新
    1.save()方法:將一個對象的屬性取出放入PreparedStatement語句中,然后向數據庫中插入n語句。
    例:
    //打開Session,開啟事務
    Students students = new Students();
            students.setCardId(
    20080929);//設置學號
            session.save(students);
            System.out.println(students.getid());
    //提交事務,關閉Session

    2.update()方法:
    例:
    //打開Session,開啟事務
    students=(Students)session.get(Students.class,"1");
            students.setName(
    "123");
            session.update(students);
    //提交事務,關閉session
    3.批量更新:在進行批量操作時,最好的方法是調用JDBC的API進行操作。
    例:將所有學生的姓名前加上一個字符串“xiao”。
    Connection conn = session.connection();
    PreparedStatement stmt 
    = conn.prepareStatement("update students  set sname='xiao'+sname");
    stmt.executeUpdate();
    4.saveOrUpdate()方法:與save方法,update方法用法相同。只是處理的細節不同。
    5.delete()方法:
    負責刪除一個對象例:
    //打開Session,開啟事務
    students=(Students)session.get(Students.class,"1");
    session.delete(students);
    //提交事務,關閉Session
    二、通過主鍵ID取得數據對象
    1.get()方法:用立即加載的方式發送SQL語句,并得到已經初始化的對象。
    //打開Session,開啟事務
    Students students=(Students)session.get(Students.class,"1")
    //提交事務,關閉Session
    2.load()方法:它返回一個代理對象,直到這個對象被訪問,此代理對象才會被初始化。
    students = (Students)session.load(Students.class1);
        System.out.println(students.getSid());
    三、Query接口(重點)
    1.使用“?”綁定參數
    例:查找age大于27,名字中有a的所有記錄,打印姓名和年齡。
    Students students = new Students();
            Query query 
    = session.createQuery("from Students where age>? and sname like ?");
            query.setInteger(
    027);
            query.setString(
    1,"%a%");
            List list
    = query.list();
            
    for(int i=0;i<list.size();i++)
            
    {
                students 
    = (Students)list.get(i);
                System.out.print(students.getSname()
    +",");
                System.out.println(students.getAge());
            }
    2使用“:”后跟變量的方法設置參數
    Students students = new Students();
            Query query 
    = session.createQuery("from Students where age>:minAge and sname like:likeName");
            query.setInteger(minAge, 
    27);
            query.setString(likeName,
    "%a%");
            List list
    = query.list();
            
    for(int i=0;i<list.size();i++)
            
    {
                students 
    = (Students)list.get(i);
                System.out.print(students.getSname()
    +",");
                System.out.println(students.getAge());
            }
    3.使用命名查詢(namedQuery)
    students.hbm.xml的源碼如下:
     1<?xml version="1.0" encoding="utf-8"?>
     2<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
     3"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
     4<hibernate-mapping>
     5    <class name="com.zzn.hibernate.Students" table="students" schema="dbo" catalog="hibernate">
     6        <id name="sid" type="java.lang.Integer">
     7            <column name="sid" />
     8            <generator class="native"></generator>
     9        </id>
    10        <property name="sname" type="java.lang.String">
    11            <column name="sname" length="10" not-null="true" />
    12        </property>
    13        <property name="age" type="java.lang.Integer">
    14            <column name="age" not-null="true" />
    15        </property>
    16    </class>
    17    <query name="queryStudents_byAgeAndName">
    18        <![CDATA[
    19            from Students where age>25:minAge and sname like:likeName
    20            ]]>
    21    </query>
    22</hibernate-mapping>
    23
    使用命名查詢的源碼如下:
     1package com.zzn.hibernate;
     2import java.util.List;
     3import org.hibernate.Query;
     4import org.hibernate.Session;
     5import org.hibernate.SessionFactory;
     6import org.hibernate.Transaction;
     7import org.hibernate.cfg.Configuration;
     8
     9public class Test3 {
    10    @SuppressWarnings("unchecked")
    11    public static void main (String[]args){
    12        Configuration configuration = new Configuration().configure();
    13        SessionFactory sessionFactory = configuration.buildSessionFactory();
    14        Session session = sessionFactory.openSession();
    15        Transaction transation = session.beginTransaction();
    16        
    17        Students students = new Students();
    18        Query query = session.getNamedQuery("queryStudents_byAgeAndName");
    19        query.setInteger("minAge"25);
    20        query.setString("likeName""%a%");
    21        List list = query.list();
    22        for(int i=0;i<list.size();i++)
    23        {
    24            students = (Students)list.get(i);
    25            System.out.println(students.getSname());
    26            System.out.println(students.getAge());
    27            System.out.print(students.getSid());
    28        }

    29        transation.commit();
    30        session.close();
    31    }

    32}

    33
    四、查詢緩存:對于有很多select語句,可insert、delete、update、語句較少的情況,使用查詢緩存性能上有一定的改善作用。反之查詢比較少的情況,這方法意義就不大了。
    (1)在hibernate.cfg.xml中設定hibernate.cache.use_query_cache屬性
    1<?xml version='1.0' encoding='UTF-8'?>
    2<!DOCTYPE hibernate-configuration PUBLIC
    3          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    4          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    5<hibernate-configuration>
    6<session-factory>       
    7<property name="hibernate.cache.use_query_cache">true</property>
    8</session-factory>
    9</hibernate-configuration>
    (2)每次建立Query實例時,執行setCacheable(true)。
     1Students students= new Students();
     2        Query query = session.createQuery("from Students");
     3        query.setCacheable(true);//準許把查詢放入查詢緩存
     4        List list=query.list();
     5        for(int i=0;i<list.size();i++){
     6            students =(Students) list.get(i);
     7            System.out.println(students.getSname());
     8        }

     9        //一下是再次查詢并打印
    10        Query q = session.createQuery("from Students");
    11        q.setCacheable(true);
    12        List l=q.list();
    13        for(int i=0;i<l.size();i++){
    14            students =(Students) l.get(i);
    15            System.out.println(students.getSname());
    16        }
    (3)從結果可以看出第一次查詢是從數據庫查詢出來的,而第二次則是從緩存中將Query中的結果返回的。
    五、清除緩存對象:如果在數據庫中插入1000000條數據,再插入500000條時程序拋出例外OutOfMemoryException。因為Hibernate總是把新添加的對象加入到Session級別的緩存中。所以我們必須清除緩存。
    (1)clear()方法:
    在hibernate.cfg.xml中設置
    1<?xml version='1.0' encoding='UTF-8'?>
    2<!DOCTYPE hibernate-configuration PUBLIC
    3          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    4          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    5<hibernate-configuration>
    6<session-factory>   
    7<property name="hibernate.jdbc.batch_size">20</property>
    8</session-factory>
    9</hibernate-configuration>
    然后在一個合適的頻率下調用flush()清理緩存發送SQL語句,調用Session的clear()方法清空Session緩存。
     1//打開Session,開啟事務
     2for(int i=0;i<1000000;i++){
     3    Students students = new Students();
     4    students.setCardid();
     5    session.save(students);
     6    if(i%20){
     7        //第20個對象保存一次,之后馬上清空Session
     8        session.flush();
     9        session.clear();
    10    }

    11}

    12//提交事務,關閉session
    (2)evict()方法:清除緩存中的某個對象
    1//打開事務Session,開啟事務
    2        for(int i=0;i<1000000;i++){
    3            Students students = new Students();
    4            students.getSid();
    5            session.save(students);
    6            session.evict(students);//把students對象 清除出Session緩存
    7            SessionFactory.evict(Students.class,students.getSid());//把students對象清除出二級緩存
    8        }

    9        //提交事務,關閉Session
    以上說的都是重點要掌握的,還有一些方法如:setEntity();setparameter();setPropertyies();uniqueResult();iterator()等大家有興趣也可以自己去看看。

    posted on 2008-09-28 12:20 生命的綻放 閱讀(430) 評論(0)  編輯  收藏 所屬分類: Hibernate

    <2008年9月>
    31123456
    78910111213
    14151617181920
    21222324252627
    2829301234
    567891011

    導航

    統計

    常用鏈接

    留言簿(5)

    隨筆分類(94)

    隨筆檔案(93)

    文章分類(5)

    文章檔案(5)

    相冊

    JAVA之橋

    SQL之音

    兄弟之窗

    常用工具下載

    積分與排名

    最新評論

    閱讀排行榜

    主站蜘蛛池模板: 国产一级片免费看| 免费观看黄网站在线播放| 亚洲av伊人久久综合密臀性色 | 国产麻豆视频免费观看| 亚洲AV噜噜一区二区三区| 亚洲中文字幕久久精品无码APP| 秋霞人成在线观看免费视频| 亚洲精品无码高潮喷水A片软| 国产亚洲?V无码?V男人的天堂| 99在线热视频只有精品免费| 亚洲AV无码XXX麻豆艾秋| 亚洲αv在线精品糸列| 成人毛片免费观看视频在线| baoyu116.永久免费视频| 亚洲码欧美码一区二区三区| 亚洲成a人片77777老司机| 成人爱做日本视频免费| 久久一本岛在免费线观看2020| 亚洲依依成人亚洲社区| 亚洲AV无码专区在线播放中文| 日韩精品无码人妻免费视频| 久久午夜无码免费| 成人免费观看男女羞羞视频| 亚洲人成777在线播放| 亚洲熟妇丰满多毛XXXX| 日韩黄色免费观看| 亚洲一级毛片免费看| 巨胸喷奶水www永久免费| 亚洲国产精品成人综合色在线| 亚洲综合精品香蕉久久网97| 亚洲日韩在线观看| 四虎成人精品在永久免费| 国产免费看JIZZ视频| 久久一本岛在免费线观看2020| yellow视频免费在线观看| 国产精品成人亚洲| 亚洲最大无码中文字幕| 亚洲毛片基地日韩毛片基地| 国产亚洲精品AA片在线观看不加载| 日韩一级在线播放免费观看| AV大片在线无码永久免费|