Hibernate入門學習

接下來我們就可以來進行我們的實體開發了:

User.java

<span style="font-size:14px;">package toone.com.cn.bo;
import java.util.Date;
public class User {
	private int id;//必須有主鍵,因爲hibernate很多方法都需要用到主鍵id
	private String name;
	private Date birthday;//必須提供默認的構造方法,這裏沒有,但是所有類都帶有默認的構造方法;</span></span>
<pre name="code" class="java"><span style="font-size:14px;"><span style="font-size:14px;">	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
}</span>
<span style="font-size:14px;"><span style="font-family: Arial; line-height: 26px;">User.hbm.xml(映射文件)</span>
</span>
<span style="font-family: Arial; line-height: 26px;"><span style="font-size:14px;"></span></span><pre name="code" class="html"><span style="font-size:14px;"><hibernate-mapping package="toone.com.cn.bo.domain">
	<class name="User" table="user"><!--這裏的table值對應數據庫中的表名;如果沒有table值,默認等於類名小寫 -->
		<id name="id" column="id">
		<span style="white-space:pre">	</span><generator class="native"></generator><!--採用主鍵自增長方式-->
		</id>
		<property name="name" column="name"/><!-- 這裏的column值對應數據庫中的屬性名;如果沒有column值,默認等於屬性名 -->
		<property name="birthday" column="birthday"/>
	</class>
</hibernate-mapping></span>
<span style="font-family: Arial; line-height: 26px; white-space: pre;">Main.java</span>
<span style="font-family: Arial; line-height: 26px; white-space: pre;"></span><pre name="code" class="html"><span style="font-size:14px;">package toone.com.cn;
import java.util.Date;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import toone.com.cn.bo.User;
public class Main {
	public static void main(String[] args){	
//這裏千萬注意,不能寫成Configuration cfg = new Configuration();否則會報Hibernate Dialect must be explicitly set 錯誤信息將我們誤導
//;實際上前面我們已經配置了mysql的方言;
		Configuration cfg = new Configuration().configure();//對於configure()方法,我們可以引入其源代碼進行查看,其會在類路
//徑下自動去加載一個默認的hibernate.cfg.xml文件;如果我們想換其他名字,可以使用其重載方法,具體可以查看其源代碼(下載的壓縮包中有)
		SessionFactory factory = cfg.buildSessionFactory();
		User user = new User();
		user.setName("Kobi");
		user.setBirthday(new Date());
		Session session = null;
		Transaction tx = null;
		try {
			session = factory.openSession();
			tx = session.beginTransaction();//開啓事務
			session.save(user);//進行保存
			tx.commit();//提交事務
		} catch (HibernateException e) {
			if(tx!=null){
				tx.rollback();//回滾事務
			}
			throw e;//必須拋出異常
		}finally{
			if(session!=null){
				session.close();//關閉session
			}
		}
	}
}</span>
<span style="font-family: Arial; line-height: 26px; white-space: pre;">HibernateUtils.java</span>
<span style="font-family: Arial; line-height: 26px; white-space: pre;"></span><pre name="code" class="html"><span style="font-size:14px;">package toone.com.cn.util;
import java.io.Serializable;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class HibernateUtils {
	private static SessionFactory sessionfactory;
	private HibernateUtils(){}
	static{
	Configuration cfg = new Configuration().configure();
	sessionfactory = cfg.buildSessionFactory(); 
	}
	public static Session getSession(){
		return sessionfactory.openSession();
	}
	//添加
	public static void add(Object obj){
		Session session = null;
		Transaction tx = null;
		try {
			session = HibernateUtils.getSession();
			tx = session.beginTransaction();
			session.save(obj);//區別:save()方法如果沒有開啓事務,它會執行一條插入語句,但之後由於沒有提交事務,它又進行
			//session.persist(obj);//回滾了,而persist()方法在沒有開啓事務的時候,它根本不會去執行,即沒有那條插入語句
			tx.commit();
		}finally{
			if(session!=null){
				session.close();
			}
		}
	}
	//修改
	public static void update(Object obj){
		Session session = null;
		Transaction tx = null;
		try {
			session = HibernateUtils.getSession();
			tx = session.beginTransaction();
			session.update(obj);
			tx.commit();
		}finally{
			if(session!=null){
				session.close();
			}
		}
	}
	//刪除
	public static void delete(Object obj){
		Session session = null;
		Transaction tx = null;
		try {
			session = HibernateUtils.getSession();
			tx = session.beginTransaction();
			session.delete(obj);
			tx.commit();
		}finally{
			if(session!=null){
				session.close();
			}
		}
	}
	//查找 不需要開啓事務
	public static Object findById(Class clazz,Serializable id){
		Session session = null;
		try {
			session = HibernateUtils.getSession();
		//這裏需要區分一下get()與load()的區別,load()不會立即//去訪問數據庫只有在第一次使用的時候纔會去加載(懶加載);
		//load方法永遠不可能返回空對象(如果不存在,其會產生一個user的子類)具體可以去查資料區別這兩個方法
			//Object obj = session.load(clazz, id);
			Object obj = session.get(clazz, id);return obj;}finally{if(session!=null){session.close();}}}}
</span>
<p style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px; font-family: Arial; line-height: 26px;"><span style="white-space: pre;">最後,一個實體的增刪改查操作就完成了,下面我們可以重寫Main.java文件來使用HibernateUtils工具類來對實體進行操作了:</span></p><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px; font-family: Arial; line-height: 26px;"><span style="white-space: pre;">Main.java</span></p><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px; font-family: Arial; line-height: 26px;"><span style="white-space: pre;"></span><pre name="code" class="html"><span style="font-size:14px;">package toone.com.cn;
import java.util.Date;
import toone.com.cn.bo.User;
import toone.com.cn.util.HibernateUtils;
public class Main {
	public static void main(String[] args){
		User user = new User();
		user.setName("Kobi");
		user.setBirthday(new Date());
		HibernateUtils.add(user);//添加
		user.setName("Jams");
		HibernateUtils.update(user);//修改
		HibernateUtils.delete(user);//刪除
		User user1 = (User) HibernateUtils.findById(User.class, user.getId());//查找
		System.out.println(user1.getName());
	}
}</span>
總結:瞭解了Hibernate的基本作用,學會了使用其來進行增刪改查操作,算是工作之餘的一點收穫吧,以後還得繼續堅持發帖,不斷學習!







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章