首先我們新建一個項目,Java項目或者是Javaweb項目都可以,然後把hibernate需要的jar導入,我用的jar包如下: 然後新建一個實體類Teacher.java並添加get和set方法: 在Hibernate中一個實體類對應一個.hbm.xml文件,因此我們新建一個Teacher.hbm ...
首先我們新建一個項目,Java項目或者是Javaweb項目都可以,然後把hibernate需要的jar導入,我用的jar包如下:
然後新建一個實體類Teacher.java並添加get和set方法:
1 public class Teacher { 2 private String username; 3 private String password; 4 private int age; 5 public String getUsername() { 6 return username; 7 } 8 public void setUsername(String username) { 9 this.username = username; 10 } 11 public String getPassword() { 12 return password; 13 } 14 public void setPassword(String password) { 15 this.password = password; 16 } 17 public int getAge() { 18 return age; 19 } 20 public void setAge(int age) { 21 this.age = age; 22 } 23 }
在Hibernate中一個實體類對應一個.hbm.xml文件,因此我們新建一個Teacher.hbm.xml文件,內容如下:
1 <?xml version="1.0"?> 2 <!DOCTYPE hibernate-mapping PUBLIC 3 "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 5 6 <hibernate-mapping package="com.hibernate.domain"> 7 8 <class name="Teacher" table="Teacher"> 9 <id name="username" type="java.lang.String" column="username"> 10 <generator class="assigned"/> 11 </id> 12 <property name="password" type="java.lang.String" column="password" length="50"/> 13 <property name="age" type="int" column="age" length="10"/> 14 </class> 15 16 </hibernate-mapping>
其中第9-11行代表的是主鍵的配置,name是指實體類中的欄位,而column則是指資料庫中相對應的欄位。<genetator>中的class="assigned"代表主鍵非自動增長。下麵的<property>則是配置的非主鍵。此文件和實體類在同一個包中。
之後我們需要在src目錄下新建一個hibernate.cfg.xml文件,並將實體類對應的Teacher.hbm.xml文件導入,代碼如下:
1 <!DOCTYPE hibernate-configuration PUBLIC 2 "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 3 "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 4 5 <hibernate-configuration> 6 <session-factory> 7 <!-- 配置資料庫信息 --> 8 <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 9 <property name="connection.url">jdbc:mysql://localhost:3306/test</property> 10 <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 11 <property name="connection.username">root</property> 12 <property name="hibernate.connection.password"></property> 13 14 15 <!-- 導入映射文件--> 16 <mapping resource="com/hibernate/domain/Teacher.hbm.xml"/> 17 </session-factory> 18 </hibernate-configuration>
第7-12行為配置資料庫的基本信息,當然大家用的時候需要改一下11、12行,改成自己資料庫對應的用戶名和密碼。
接下來我們寫一個查詢的方法和插入的方法TeacherDao.java:
1 public class TeacherDao { 2 //讀取配置文件 3 Configuration congif = new Configuration().configure(); 4 //創建sessionFactory 5 SessionFactory sf = congif.buildSessionFactory(); 6 //創建session 7 Session session = null; 8 //創建事務(Hibernate必須用事務) 9 Transaction tx = null; 10 //插入一條數據 11 public void insert(Teacher teacher) { 12 try { 13 //打開session 14 session = sf.openSession(); 15 //開啟事務 16 tx = session.beginTransaction(); 17 //進行持久化操作(添加,刪除,更新) 18 session.save(teacher); 19 //提交事務 20 tx.commit(); 21 } catch (Exception e) { 22 //事務回滾 23 tx.rollback(); 24 } finally { 25 if (session != null) 26 session.close(); 27 } 28 29 } 30 //查詢數據 31 public List<Teacher> find(String hql) { 32 List<Teacher> teacher=new ArrayList<Teacher>(); 33 try { 34 session = sf.openSession(); 35 tx = session.beginTransaction(); 36 //使用hql語句進行查詢 37 Query query=session.createQuery(hql); 38 //返回list 39 teacher=query.list(); 40 tx.commit(); 41 } catch (Exception e) { 42 tx.rollback(); 43 } finally { 44 if (session != null) 45 session.close(); 46 } 47 return teacher; 48 } 49 }
當然如果我們的src目錄下的hibernate.cfg.xml名稱不為這個,則在第3行讀取配置文件的時候需要加上配置文件的路徑。我們來看一下文件的目錄結構:
我們在Test.java類中進行測試,代碼如下:
1 public class Test { 2 3 public static void main(String[] args) { 4 /** 5 * 利用Hibernate的save方法進行持久化操作 6 */ 7 Teacher t=new Teacher(); 8 t.setUsername("username4"); 9 t.setPassword("root4"); 10 t.setAge(20); 11 TeacherDao dao=new TeacherDao(); 12 dao.insert(t); 13 /** 14 * 使用hql語句進行查詢 15 * @return:將返回結果的username在控制台輸出 16 */ 17 String hql="from Teacher"; 18 List<Teacher> teacher=dao.find(hql); 19 for (int i = 0; i < teacher.size(); i++) { 20 System.out.println(teacher.get(i).getUsername()); 21 } 22 } 23 24 }
當然不要忘記資料庫中的表,我們可以根據Teacher.java中的欄位建立,完成之後我們就可以在Test.java中運行一下看看結果了。