国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Hibernate(十三)命名查詢-批量處理和調(diào)用存儲(chǔ)過程

2019-11-14 23:18:43
字體:
供稿:網(wǎng)友
Hibernate(十三)命名查詢-批量處理和調(diào)用存儲(chǔ)過程一、命名查詢

HQL語句混雜在代碼之間將破壞代碼的可讀性

Hibernate允許在映射配置文件中定義字符串形式的查詢語句,這種查詢方式稱為命名查詢

二、建立數(shù)據(jù)表和持久化類

建立數(shù)據(jù)表

復(fù)制代碼
create table login(       username   varchar2(32) PRimary key,       passWord   varchar2(32) not null ,       age         number(3));insert into loginselect '張三','123456',21 from dual unionselect 'Tom','123123',34 from dual unionselect 'Jack','12345678',34 from dual unionselect '李四','qwerty',23 from dual;            commit;
復(fù)制代碼

建立持久化類和配置文件

Hibernate.cfg.xml配置文件

復(fù)制代碼
<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configuration PUBLIC          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration>    <session-factory>        <property name="dialect">            org.hibernate.dialect.Oracle9Dialect        </property>        <property name="connection.url">            jdbc:oracle:thin:@localhost:1521:orcl        </property>        <property name="connection.username">root</property>        <property name="connection.password">root</property>        <property name="connection.driver_class">            oracle.jdbc.OracleDriver        </property>        <property name="show_sql">true</property>        <property name="format_sql">true</property>                <mapping resource="entity/Login.hbm.xml" />    </session-factory></hibernate-configuration>
復(fù)制代碼

持久化類和配置文件

復(fù)制代碼
package entity;public class Login implements java.io.Serializable {    // Fields    /**     *      */    private static final long serialVersionUID = 1L;    private String username;    private String password;    private int age;    // Constructors    /** default constructor */    public Login() {    }    /** minimal constructor */    public Login(String username, String password) {        this.username = username;        this.password = password;    }    /** full constructor */    public Login(String username, String password, int age) {        this.username = username;        this.password = password;        this.age = age;    }    // Property accessors    public String getUsername() {        return this.username;    }    public void setUsername(String username) {        this.username = username;    }    public String getPassword() {        return this.password;    }    public void setPassword(String password) {        this.password = password;    }    public int getAge() {        return this.age;    }    public void setAge(int age) {        this.age = age;    }}
復(fù)制代碼

配置文件Login.hbm.xml

<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping>    <class name="entity.Login" table="LOGIN" schema="ROOT">        <id name="username" type="java.lang.String">            <column name="USERNAME" length="32" />            <generator class="assigned" />        </id>        <property name="password" type="java.lang.String">            <column name="PASSWORD" length="32" not-null="true" />        </property>        <property name="age" type="java.lang.Integer">            <column name="AGE" precision="3" scale="0" />        </property>    </class>    <query name="loginUser">    <!--HQL查詢語句  -->    <![CDATA[            from Login login where login.username=:username and login.password=:password    ]]>    </query></hibernate-mapping>

測試類:

package demo;import java.util.Iterator;import java.util.List;import org.hibernate.HibernateException;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;import entity.Login;public class Demo5 {    /**     * Criteria無查詢條件查詢所有     */    public static void main(String[] args) {        //聲明一個(gè)集合用來接收結(jié)果        List<Login> result=null;        //聲明SessionFactory        SessionFactory factory=null;        //聲明Session        Session session=null;        //        //初始化以上對(duì)象        //創(chuàng)建一個(gè)用戶對(duì)象        Login lo=new Login();        lo.setUsername("Tom");        lo.setPassword("123123");        try{        factory=new Configuration().configure().buildSessionFactory();        session=factory.openSession();        //創(chuàng)建Query 參數(shù)為配置文件中的name        Query query=session.getNamedQuery("loginUser");        //將對(duì)象作為參數(shù)傳為        query.setProperties(lo);                //查詢使用list方法        result=query.list();        }catch(HibernateException e){            e.printStackTrace();        }finally{            session.close();            factory.close();        }        //判斷結(jié)果是否為空        Iterator<Login> iterator=result.iterator();        //如果有內(nèi)容,--不為空        if(iterator.hasNext()){        //輸出結(jié)果            Login login=iterator.next();            System.out.println("用戶名:"+login.getUsername()+"   密碼:"+login.getPassword()+"   年齡:"+login.getAge());        }else{            System.out.println("沒有這個(gè)用戶");        }                    }    }
二、NativeSQL本地化SQL2.1、執(zhí)行本地SQL
package demo;import java.util.Iterator;import java.util.List;import org.hibernate.HibernateException;import org.hibernate.SQLQuery;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;import entity.Login;public class Demo6 {    /**     * Criteria無查詢條件查詢所有     */    public static void main(String[] args) {        //聲明一個(gè)集合用來接收結(jié)果        List<Login> result=null;        //聲明SessionFactory        SessionFactory factory=null;        //聲明Session        Session session=null;        String uname="Tom";        //初始化以上對(duì)象        try{        factory=new Configuration().configure().buildSessionFactory();        session=factory.openSession();        //聲明Criteria對(duì)象傳入一個(gè)持久化類對(duì)象類型        String sql="select {l.*} from login l where l.username=? ";        //創(chuàng)建SQLQuery對(duì)象,傳入2個(gè)參數(shù),第一個(gè)參數(shù)為數(shù)據(jù)庫表的別名,第二個(gè)為實(shí)體類的類        SQLQuery sqlQuery=session.createSQLQuery(sql).addEntity("l", Login.class);        sqlQuery.setParameter(0, uname);                //查詢使用list方法        result=sqlQuery.list();        }catch(HibernateException e){            e.printStackTrace();        }finally{            session.close();            factory.close();        }        System.out.println("==========");        Iterator<Login> iterator=result.iterator();        //輸出結(jié)果        while(iterator.hasNext()){            Login login=iterator.next();            System.out.println("用戶名:"+login.getUsername()+"   密碼:"+login.getPassword()+"   年齡:"+login.getAge());        }                    }    }
2.2、執(zhí)行本地SQL命名查詢

首先配置類的配置文件

<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping>    <class name="entity.Login" table="LOGIN" schema="ROOT">        <id name="username" type="java.lang.String">            <column name="USERNAME" length="32" />            <generator class="assigned" />        </id>        <property name="password" type="java.lang.String">            <column name="PASSWORD" length="32" not-null="true" />        </property>        <property name="age" type="java.lang.Integer">            <column name="AGE" precision="3" scale="0" />        </property>    </class>    <query name="loginUser">    <!--HQL查詢語句  -->    <![CDATA[            from Login login where login.username=:username and login.password=:password    ]]>    </query>    <!-- 本地SQL命名查詢-->    <sql-query name="findUser">    <![CDATA[             select {l.*} from login l where l.username=?    ]]>    <!--指定與實(shí)體類的關(guān)聯(lián)  -->    <return alias="l" class="entity.Login" />    </sql-query></hibernate-mapping>

測試類

package demo;import java.util.Iterator;import java.util.List;import org.hibernate.HibernateException;import org.hibernate.Query;import org.hibernate.SQLQuery;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;import entity.Login;public class Demo7 {    /**     * Criteria無查詢條件查詢所有     */    public static void main(String[] args) {        //聲明一個(gè)集合用來接收結(jié)果        List<Login> result=null;        //聲明SessionFactory        SessionFactory factory=null;        //聲明Session        Session session=null;        String uname="Tom";        //初始化以上對(duì)象        try{        factory=new Configuration().configure().buildSessionFactory();        session=factory.openSession();        Query query=session.getNamedQuery("findUser");        query.setParameter(0, uname);                //查詢使用list方法        result=query.list();        }catch(HibernateException e){            e.printStackTrace();        }finally{            session.close();            factory.close();        }        System.out.println("==========");        Iterator<Login> iterator=result.iterator();        //輸出結(jié)果        while(iterator.hasNext()){            Login login=iterator.next();            System.out.println("用戶名:"+login.getUsername()+"   密碼:"+login.getPassword()+"   年齡:"+login.getAge());        }                    }    }

三、定制SQL

可以執(zhí)行自己寫的SQL語句來替代Hibernate的SQL,主要有3個(gè)保存,插入,刪除,時(shí)就會(huì)執(zhí)行我們自己寫的SQL

  • Insert和update語句,中的字段必須與映射文件中聲明的相對(duì)應(yīng),一個(gè)都不能少
  • Insert和update語句,中的屬性出現(xiàn)的順序必須與映射文件中聲明的的順序一致
  • Insert語句,中的主鍵的順序永遠(yuǎn)是在最后出現(xiàn)的

如果插入或者是更新時(shí),不想插入或者更新一些字段只需要在映射文件中相應(yīng)的字段后面加下insert="false",update="false";

四、指量處理數(shù)據(jù)

配置:

<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configuration PUBLIC          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory>    <property name="dialect">        org.hibernate.dialect.Oracle9Dialect    </property>    <property name="connection.url">        jdbc:oracle:thin:@localhost:1521:orcl    </property>    <property name="connection.username">root</property>    <property name="connection.password">root</property>    <property name="connection.driver_class">        oracle.jdbc.OracleDriver    </property>    <property name="show_sql">true</property>    <property name="format_sql">true</property>    <property name="myecl

測試類

package demo;import java.util.List;import org.hibernate.HibernateException;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import entity.Login;public class Demo8 {    /**     * 批量插入數(shù)據(jù)     */    public static void main(String[] args) {        //聲明一個(gè)集合用來接收結(jié)果        List<Login> result=null;        //聲明SessionFactory        SessionFactory factory=null;        //聲明Session        Session session=null;        //聲明事務(wù)        Transaction tran=null;        //初始化以上對(duì)象        try{        factory=new Configuration().configure().buildSessionFactory();        session=factory.openSession();         tran=session.beginTransaction();        for(int i=0;i<100;i++){            Login login=new Login();            login.setUsername(Integer.toString(i+100000));            login.setPassword(Integer.toString(i+100000));            login.setAge(i);            session.save(login);        //保存            if(i%20==0){                //單次處理的數(shù)據(jù)為20,與配置文件中設(shè)置的JDBC數(shù)量一樣                session.flush();        //清理緩存                session.clear();        //清空緩存中的Login對(duì)象            }        }        tran.commit();                }catch(HibernateException e){            e.printStackTrace();                    }finally{            session.close();            factory.close();        }                            }    }

五、調(diào)用存儲(chǔ)過程

調(diào)用插入

更新

刪除

建立帶輸出參數(shù)的存儲(chǔ)過程

命名SQL調(diào)用

配置文件中添加配置

調(diào)用

調(diào)用帶輸出結(jié)果集的存儲(chǔ)過程


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 潼关县| 岗巴县| 集贤县| 铜梁县| 项城市| 陇西县| 化隆| 穆棱市| 新密市| 东港市| 固阳县| 平果县| 晋宁县| 克什克腾旗| 和平县| 明溪县| 长武县| 鹤壁市| 通化县| 广河县| 阜新市| 宁陵县| 平定县| 大余县| 信阳市| 佛山市| 兴和县| 彭州市| 山东省| 洪泽县| 竹北市| 宁津县| 盖州市| 正安县| 商丘市| 玉林市| 城固县| 金平| 垣曲县| 金沙县| 东阳市|