Hibernate入门系列(一)

01- 配置文件 

hibernate.cfg.xml的配置就不说了,我们先看看xml文件的读取:

XML配置文件的位置必須在CLASSPATH的設定中,例如單機執行時主程式的位置,或是Web程式的WEB-INF/classes中,我們使用下面的方式來讀入XML文件以配置Hibernate:
SessionFactory sf = new Configuration().configure().buildSessionFactory();預設的XML文件名稱是hibernate.cfg.xml,您也可以指定文件的名稱,例如:

SessionFactory sf = new Configuration().configure("db.cfg.xml").buildSessionFactory();

02 提供JDBC連接

 方法1: Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/HibernateTest?user=root&password=";
java.sql.Connection conn = DriverManager.getConnection(url);
SessionFactory sessionFactory = cfg.buildSessionFactory();
Session session = sessionFactory.openSession(conn);
 
方法2:
是透過XML文件hibernate.cfg.xml則是如下進行配置
<hibernate-configuration>
    <session-factory>
        <!-- 顯示實際操作資料庫時的SQL -->
        <property name="show_sql">true</property>
        <!-- SQL方言,這邊設定的是MySQL -->
        <property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>
        <!-- JDBC驅動程式 -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <!-- JDBC URL -->
        <property name="connection.url">jdbc:mysql://localhost/HibernateTest</property>
        <!-- 資料庫使用者 -->
        <property name="connection.username">caterpillar</property>
        <!-- 資料庫密碼 -->
        <property name="connection.password">123456</property>
        <!-- 物件與資料庫表格映射文件 -->
        <mapping resource="User.hbm.xml"/>
    </session-factory>
</hibernate-configuration>
 
 
03 - 基本资料查询
查詢資料時,我們所使用的是Session的find()方法,並在當中指定HQL設定查詢條件,查詢的結果會裝載在List物件中傳回,您所需要的是將它們一一取出,一個最簡單的例子如下:
import onlyfun.caterpillar.*;
import net.sf.hibernate.*;
import net.sf.hibernate.cfg.*;
import java.util.*;
public class HibernateTest {
public static void main(String[] args) throws HibernateException {
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
List users = session.find("from User");
session.close();
sessionFactory.close();
for (ListIterator iterator = users.listIterator(); iterator.hasNext(); ) {
User user = (User) iterator.next();
System.out.println(user.getName() +
"/n/tAge: " + user.getAge() +
"/n/tSex: " + user.getSex());
}
}
 
简单的条件查询:}
List names = session.find("select user.name from User as user where age = 25");
for (ListIterator iterator = names.listIterator(); iterator.hasNext(); ) {
    String name = (String) iterator.next();
    System.out.println("name: " + name);
}
 
如果要傳回兩個以上的字段,也不是什麼問題,直接來看個例子:
List results = session.find("select user.name, user.age from User as user where sex = 'F'");
for (ListIterator iterator = results.listIterator(); iterator.hasNext(); ) {
    Object[] rows = (Object[]) iterator.next();
    String name = (String) rows[0];
    Integer age = (Integer) rows[1];
    System.out.println("name: " + name + "/n/t" + age);
}

 
 
04- 更新,删除操作
更新操作:
List users = session.find("from User");
User user = (User) session.load(User.class, id);
user.setName("caterpillar");
// 開啟一個新的Session
session = sessionFactory.openSession();  
// 更新資料
session.update(updated);
users = session.find("from User");     
session.close();
sessionFactory.close();
 
 
 

删除操作:

User user = (User) session.load(User.class, id);

session.delete(user);
users = session.find("from User");
session.close();
 sessionFactory.close();

 

05 - Query介面

01-    除了直接使用find()方法並配合HQL來進行查詢之外,我們還可以透過 net.sf.hibernate.Query介面的實例來進行查詢,透過Query介面,您可以先設定查詢參數,之後透過setXXX()等方法,將指定的參數值填入,而不用每次都撰寫完整的HQL,直接來看個例子:

Query query = session.createQuery("select user.name from User as user where user.age = ? and user.sex = ?");
query.setInteger(0, 25);
query.setCharacter(1, 'M');
     
List names = query.list();
for (ListIterator iterator = names.listIterator(); iterator.hasNext(); ) {
    String name = (String) iterator.next();
    System.out.println("name: " + name);
}

在設定參數值時,必須依照 ? 所設定的順序,並使用對應型態的setXXX()方法

02-    您可以使用命名參數(Named Parameter)來取代這個方法,這可以不用依照特定的順序來設定參數值,並擁有較好的可讀性,直接來看個例子:

Query query = session.createQuery("select user.name from User as user where user.age = :age and user.sex = :sex");
query.setInteger("age", 25);
query.setCharacter("sex", 'M');

List names = query.list();
for (ListIterator iterator = names.listIterator(); iterator.hasNext(); ) {
    String name = (String) iterator.next();
    System.out.println("name: " + name);
}
06- Criteria 查詢

Hibernate支援一種符合Java撰寫習慣的查詢API,使用Session建立一個net.sf.hibernate.Criteria,您可以在不使用SQL甚至HQL的情況下進行對資料庫的查詢。

Criteria crit = session.createCriteria(User.class);
        List users = crit.list();
        for (ListIterator iterator = users.listIterator(); iterator.hasNext(); ) {
            User user = (User) iterator.next();
            System.out.println("name: " + user.getName());
            System.out.println("age: " + user.getAge());          
        }如果我們要為查詢限定條件,則可以透過net.sf.hibernate.expression.Expression設定查詢條件,Expression擁有許多條件查詢方法,舉個實際的例子說明:Criteria crit = session.createCriteria(User.class);
        crit.add(Expression.ge("age", new Integer(25)));   //Expression的ge()方法即great-equal,也就是大於等於(>=),
        List users = crit.list();

 您也可以設定多個查詢條件,例如:

crit.add(Expression.gt("age", new Integer(20)));
crit.add(Expression.between("weight", new Integer(60),new Integer(80)));   //上例中我們查詢age大於20,而weight介於60到80之間的User
List users = crit.list();

 

setMaxResults()方法可以限定查詢回來的筆數,如果配合setFirstResult()設定傳回查詢結果第一筆資料的位置,就可以實現簡單的分頁,例如:

Criteria crit = session.createCriteria(User.class);
crit.setFirstResult(51);
crit.setMaxResult(50);
List users = crit.list();

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值