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

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

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

    超級(jí)笨笨

    好腦子,不如一個(gè)爛博客
    數(shù)據(jù)加載中……
    Hibernate SQL優(yōu)化小技巧使用dynamic-insert="true" dynamic-update="true"
    最近正在拜讀Hibernate之父大作<Java Persistence with Hibernate>,頗有收獲。
    在我們熟悉的Hibernate映射文件中也大有乾坤,很多值得我注意的地方。
    在Hibernate的映射文件的class tag使用dynamic-insert,dynamic-update,可以優(yōu)化生成的SQL語句,提高SQL執(zhí)行效率,最終可以提高系統(tǒng)性能。
    如,有一個(gè)User類。

    public class User {
      
        /** Creates a new instance of User */
        public User() {
        }
        private long id;
        private int age;

        private String firstname;
        private String lastname;
        private Set emailAddresses;
    //省略getter 和setter方法
    }

    Hibernate映射文件(User.hbm.xml,省略了文件頭聲明)定義為:
    <hibernate-mapping>
        <class name="model.User" table="Users" >
            <id name="id" column="ID">
                <generator class="native"/>
            </id>
            <property name="age"/>
            <property name="firstname"/>
            <property name="lastname"/>
           
            <set name="emailAddresses" table="PERSON_EMAIL_ADDR">
                <key column="PERSON_ID"/>
                <element type="string" column="EMAIL_ADDR"/>
            </set>
        </class>
    </hibernate-mapping>
    我們寫一個(gè)測(cè)試類進(jìn)行測(cè)試UserTest。


    public class UserTest extends TestCase {
       
        public UserTest(String testName) {
            super(testName);
        }
       
        private Session session;
        private SessionFactory sessionFactory;
       
        protected void setUp() throws Exception {
            sessionFactory=HibernateUtil.getSessionFactory();
            session=sessionFactory.openSession();
            session.getTransaction().begin();
        }
       
        protected void tearDown() throws Exception {
            session.getTransaction().commit();
            session.close();
           
        }
       
        /**
         * Test of getAge method, of class model.User.
         */
        public void testSaveUser() {
            System.out.println("================testSaveUser=================");
           
            User user = new User();
            user.setAge(29);
            session.save(user);
            assertNotNull("id is assigned !",user.getId());
        }
        public void testUpdateUser() {
            System.out.println("================testUpdateUser=================");
           
            User user = new User();
            user.setAge(29);
            session.save(user);
            assertNotNull("id is assigned !",user.getId());
           
            User _user=(User) session.get(User.class, user.getId());
            _user.setFirstname("Array");
            session.update(_user);
           
        }
       
       
    }
    運(yùn)行測(cè)試后,此時(shí)會(huì)生成完整的SQL語句(注意將hibernate屬性show_sql設(shè)置成true)。

    ================testSaveUser=================
    Hibernate: insert into Users (age, firstname, lastname) values (?, ?, ?)
    ================testUpdateUser=================
    Hibernate: insert into Users (age, firstname, lastname) values (?, ?, ?)
    Hibernate: update Users set age=?, firstname=?, lastname=? where ID=?

    如果我們?cè)?lt;class ...>中加上 dynamic-insert="true" dynamic-update="true",變成如下。

    <class name="model.User" table="Users" dynamic-insert="true" dynamic-update="true">

    再次運(yùn)行測(cè)試類,就會(huì)發(fā)現(xiàn)生成的SQL中涉及的字段只包含User類中修改的屬性所對(duì)應(yīng)的表字段。

    ================testSaveUser=================
    Hibernate: insert into Users (age) values (?)
    ================testUpdateUser=================
    Hibernate: insert into Users (age) values (?)
    Hibernate: update Users set firstname=? where ID=?

    如果一個(gè)表的結(jié)構(gòu)很復(fù)雜,字段很多的情況下,使用dynamic-insert,dynamic-update能夠性能上的少許提升。

    posted on 2010-01-02 15:03 超級(jí)笨笨 閱讀(4216) 評(píng)論(4)  編輯  收藏 所屬分類: SSH

    評(píng)論

    # re: Hibernate SQL優(yōu)化小技巧使用dynamic-insert="true" dynamic-update="true" 2010-01-04 09:56 Robin's Java World

    不錯(cuò)不錯(cuò),學(xué)習(xí)了。

    # re: Hibernate SQL優(yōu)化小技巧使用dynamic-insert="true" dynamic-update="true" 2010-01-13 11:07 來如風(fēng)

    正在找,謝謝了!!!

    # re: Hibernate SQL優(yōu)化小技巧使用dynamic-insert="true" dynamic-update="true" 2010-02-04 11:59 袁偉強(qiáng)

    這個(gè)還真不知道
    還有就是 <set name="emailAddresses" table="PERSON_EMAIL_ADDR">
    <key column="PERSON_ID"/>
    <element type="string" column="EMAIL_ADDR"/>
    </set>

    這個(gè)<element> 這里什么意思啊 從來沒這么用過

    # re: Hibernate SQL優(yōu)化小技巧使用dynamic-insert="true" dynamic-update="true" 2010-04-30 15:31 habzy

    我是想找注解的那種 方式~~
    主站蜘蛛池模板: 女人张腿给男人桶视频免费版| 区三区激情福利综合中文字幕在线一区亚洲视频1| 日韩av无码久久精品免费| 成年免费大片黄在线观看岛国| 免费国产在线观看不卡| 老司机亚洲精品影院| 91久久青青草原线免费| 亚洲欧洲久久久精品| 人妻免费久久久久久久了| 亚洲第一成人影院| 国产人成网在线播放VA免费| 久久久久免费看黄A片APP| 亚洲成av人片天堂网| 亚洲a一级免费视频| 亚洲天堂电影在线观看| 成全动漫视频在线观看免费高清版下载| 免费一本色道久久一区| 精品久久亚洲一级α| 亚洲精品无码日韩国产不卡?V| 精品在线免费观看| 国产AⅤ无码专区亚洲AV| 亚洲成AV人片在WWW| 亚洲JIZZJIZZ中国少妇中文| 久久最新免费视频| 久久精品国产亚洲AV无码偷窥| 少妇高潮太爽了在线观看免费| 国产精品亚洲精品久久精品| 亚洲色精品vr一区二区三区 | 国产精品亚洲五月天高清| aⅴ免费在线观看| 亚洲av无码一区二区三区人妖 | 成人免费视频一区二区三区| 亚洲第一成年免费网站| 亚洲午夜无码AV毛片久久| 91精品国产免费入口| 亚洲第一街区偷拍街拍| 亚洲av无码一区二区三区网站| 最近2019中文字幕mv免费看| 久久最新免费视频| 精品国产日韩久久亚洲| 国内外成人免费视频|