一顆簡單的hibernate栗子

來源:互聯網
上載者:User

標籤:catch   控制台   out   system   source   zab   dial   odi   doctype   

  Hibernate是一個開源的ORM架構,顧名思義,它的核心思想即ORM(Object Relational Mapping,對象關係映射),可以通過對象來操作資料庫中的資訊,據說開發人員一開始是不太熟悉資料庫SQL語句的,這也造就了hibernate的強大之處,它不強求開發人員熟悉SQL語句也可以操作資料庫,hibernate可以自動產生SQL語句,自動執行。

  利用hibernate可以讓開發人員完全使用面想對象思維來操作資料庫,所以接下來的示範不會有一句SQL語句,如果有的話,請當我這句話沒說!

  本文使用hibernate實現了簡單的對一個person資料表的基本增刪改查操作。

 

 

準備工作

環境:win7+eclipse

工具包:hibernate包,可前往http://hibernate.org/orm/downloads/下載,本例中使用的是4版本;

資料庫連接驅動包,本例中使用的是mysql的

  

 

程式結構圖示

 

pojo層實體類

package demo.pojo;

public class Person {

private Integer id;
private String name;
private String gender;
private Integer age;

public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", gender=" + gender + ", age=" + age + "]";
}
}

核心設定檔hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 以下四行分別為:資料庫驅動類、Drivermanager擷取串連的參數URL、使用者名稱、密碼 -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://127.0.0.1/web?characterEcoding=utf-8</property>
<property name="connection.username">root</property>
<property name="connection.password">123456</property>
<!-- 設定方言,hibernate會根據資料庫的類型相應產生SQL語句 -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 控制台顯示產生的sql語句,預設為false -->
<property name="show_sql">true</property>
<!-- 映射配置源檔案的位置 -->
<mapping resource="demo/pojo/Person.hbm.xml"/>
</session-factory>
</hibernate-configuration>

對應檔Person.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- name是實體類全名,table為資料表名 -->
<class name="demo.pojo.Person" table="Person">
<id name="id" column="id">
<!-- 主鍵產生方式,native是讓hibernate自動識別 -->
<generator class="native"></generator>
</id>
<!--
注意點:
0.name值為實體類中屬性名稱,column為資料表中欄位名;
1.當實體類中屬性名稱與對應資料表欄位名相同時,後面的column可以省略,hibernate會自動匹配,例如下面age ;
2.反之當實體類中屬性名稱與對應資料表欄位名不相同時,兩項都要寫上,例如下面gender和sex
-->
<property name="name" column="name"></property>
<property name="gender" column="sex"></property>
<property name="age"></property>
</class>
</hibernate-mapping>

Session工廠類

package demo.util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

public class HibernateSessionFactory {
private static SessionFactory factory;
private static ThreadLocal<Session> thread = new ThreadLocal<Session>();
private static String path = "hibernate.cfg.xml";
private static Configuration config = new Configuration();
static {
config.configure(path);
ServiceRegistry service = new ServiceRegistryBuilder()//定義一個服務註冊機
.applySettings(config.getProperties()).buildServiceRegistry();
factory = config.buildSessionFactory(service);//建立Session工廠類
}

/**
* 從hibernate的session工廠類裡建立一個session
* @return
* */
public static Session getSession() {
Session session = thread.get();
if(session == null || !session.isOpen()) {
session = factory.openSession();
thread.set(session);
}
return session;
}

public static void closeSession() {
Session session = thread.get();
if(session != null && session.isOpen()) {
session.close();
thread.set(null);
}
}
}

DAO層封裝資料各項操作的方法

package demo.dao;

import java.io.Serializable;
import org.hibernate.Session;
import org.hibernate.Transaction;
import demo.pojo.Person;
import demo.util.HibernateSessionFactory;

public class PersonDaoImpl {
//增刪改查,此處以增為例
public boolean add(Person p) {
Session session = HibernateSessionFactory.getSession();//建立Session
Transaction trans = session.beginTransaction();//開啟事務
try {
Serializable id = session.save(p);//添加記錄並擷取主索引值
System.out.println(id+"為擷取的主索引值");//控制台查看主索引值
trans.commit();//提交事務
return true;
} catch (Exception e) {
trans.rollback();//擷取異常,則交易回復
} finally {
HibernateSessionFactory.closeSession();//關閉Session
}
return false;
}
}

測試類別TestPerson

package demo.test;

import org.junit.Test;
import demo.dao.PersonDaoImpl;
import demo.pojo.Person;

public class TestPerson {
@Test
public void testAdd() {
//建立一個人類對象
Person p = new Person();
p.setName("張三");
p.setGender("男");
p.setAge(18);
//建立dao層類對象並調用添加方法
PersonDaoImpl dao = new PersonDaoImpl();
dao.add(p);
}
}

 

一顆簡單的hibernate栗子

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.