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

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

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

    想飛就別怕摔

    大爺?shù)牟M罵人

    Hibernate中操縱實體對象

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

    2.update()方法:
    例:
    //打開Session,開啟事務
    students=(Students)session.get(Students.class,"1");
            students.setName(
    "123");
            session.update(students);
    //提交事務,關(guān)閉session
    3.批量更新:在進行批量操作時,最好的方法是調(diào)用JDBC的API進行操作。
    例:將所有學生的姓名前加上一個字符串“xiao”。
    Connection conn = session.connection();
    PreparedStatement stmt 
    = conn.prepareStatement("update students  set sname='xiao'+sname");
    stmt.executeUpdate();
    4.saveOrUpdate()方法:與save方法,update方法用法相同。只是處理的細節(jié)不同。
    5.delete()方法:
    負責刪除一個對象例:
    //打開Session,開啟事務
    students=(Students)session.get(Students.class,"1");
    session.delete(students);
    //提交事務,關(guān)閉Session
    二、通過主鍵ID取得數(shù)據(jù)對象
    1.get()方法:用立即加載的方式發(fā)送SQL語句,并得到已經(jīng)初始化的對象。
    //打開Session,開啟事務
    Students students=(Students)session.get(Students.class,"1")
    //提交事務,關(guān)閉Session
    2.load()方法:它返回一個代理對象,直到這個對象被訪問,此代理對象才會被初始化。
    students = (Students)session.load(Students.class1);
        System.out.println(students.getSid());
    三、Query接口(重點)
    1.使用“?”綁定參數(shù)
    例:查找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使用“:”后跟變量的方法設置參數(shù)
    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實例時,執(zhí)行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)從結(jié)果可以看出第一次查詢是從數(shù)據(jù)庫查詢出來的,而第二次則是從緩存中將Query中的結(jié)果返回的。
    五、清除緩存對象:如果在數(shù)據(jù)庫中插入1000000條數(shù)據(jù),再插入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>
    然后在一個合適的頻率下調(diào)用flush()清理緩存發(fā)送SQL語句,調(diào)用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//提交事務,關(guān)閉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        //提交事務,關(guān)閉Session
    以上說的都是重點要掌握的,還有一些方法如:setEntity();setparameter();setPropertyies();uniqueResult();iterator()等大家有興趣也可以自己去看看。

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

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

    導航

    統(tǒng)計

    常用鏈接

    留言簿(5)

    隨筆分類(94)

    隨筆檔案(93)

    文章分類(5)

    文章檔案(5)

    相冊

    JAVA之橋

    SQL之音

    兄弟之窗

    常用工具下載

    積分與排名

    最新評論

    閱讀排行榜

    主站蜘蛛池模板: 久久久久成人片免费观看蜜芽 | 亚洲爽爽一区二区三区| 国产线视频精品免费观看视频| 久久久久亚洲AV无码麻豆| 免费看少妇作爱视频| 水蜜桃视频在线观看免费播放高清| 亚洲综合网美国十次| 国产一区二区三区免费看 | 又粗又黄又猛又爽大片免费 | 91麻豆最新在线人成免费观看| 亚洲AV性色在线观看| 亚洲AV中文无码乱人伦下载| 午夜两性色视频免费网站| 久久精品国产大片免费观看| 亚洲AV色欲色欲WWW| 亚洲视频在线一区二区三区| 亚洲AV无码一区二区三区在线观看| 7x7x7x免费在线观看| 一级毛片免费一级直接观看| 亚洲乱码一二三四区乱码| 亚洲熟妇无码八AV在线播放| 午夜免费福利网站| 中文字幕亚洲免费无线观看日本 | 91高清免费国产自产| 曰韩无码AV片免费播放不卡 | 国产传媒在线观看视频免费观看| 污污污视频在线免费观看| 亚洲国产理论片在线播放| 亚洲午夜久久久久久久久电影网| 成人啪精品视频免费网站| 久久免费区一区二区三波多野| MM1313亚洲精品无码久久| 91在线亚洲精品专区| 在线精品亚洲一区二区三区| 国产精品免费小视频| 麻豆最新国产剧情AV原创免费| 白白国产永久免费视频| 免费不卡在线观看AV| 波霸在线精品视频免费观看| 亚洲中文字幕无码中文| 亚洲国产精品自在在线观看|