Hibernateday01模擬一個註冊

創建工具類,封裝Session
  1.SessionFactory 工廠類
   1).創建Session
   2).進行二級緩存
     SessionFactory是重量級資源特點:功能非常強大,佔用的內存就多
        由於重量級資源佔用內存,不能頻繁的創建,只創建一個,就會引發線程安全問題,
    重量級資源一般來講是線程安全.運行多線程訪問。
  2.Session 代表了用戶的操作
      1.提供了一套CRUD的方法 save(Object); update(Object); delete(Object);   
                              get(calss,pk);
      2.內部封了Connection
       Session:輕量級資源(每一個用戶獨享,消耗內存很少)

模擬一個註冊
  ReigstAction-->UserBiz             -->UserDao
                 register(User u )          save(User u);
   應該在同一個Session當中,在同一個線程中完成註冊
  對於事務的控制在Biz層進行處理
     應爲biz可能會處理多個Dao層的數據,事務的原子特性【要麼成功要麼失敗】,事務的處理必須在Biz層處理
 
 事務的特性:原子性,持久性,一致性,隔離性
 
Object ----> Thread對象
  ThreadLocal 工具類:將一個對象存入到線程的Map當中
         key:  當前ThreadLocal對象
     value:存入的值/對象

1.實體類User.java.在com.jsu.hb.pojo包中

package com.jsu.hb.pojo;

import java.util.Date;

public class User {
	private Integer id;//使用封裝類型
	private String name;
	private Date birthday;
	private int 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 Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}

	
}

 2.數據庫中提供的相對應的表

create table t_user(
	t_id Integer primary key,
	t_name varchar2(20),
	t_birthday date
	t_age Integer
)

 3.創建工具類HibernateUtil.java

package com.jsu.hb.util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {
	private static SessionFactory sf;
	private static ThreadLocal<Session> tl= new ThreadLocal<Session>();
	static{
		try{
				Configuration cfg = new Configuration();
				cfg.configure();
				sf=cfg.buildSessionFactory();
		}catch(Exception e){
			e.printStackTrace();
		}
	}
	public static Session openSession(){
		return sf.openSession();
	}
	public static Session getCurrentSession(){
		Session session = tl.get();//先從儲存的線程中查找
		if(session==null){
			session=openSession();
			tl.set(session);
			return session;
		}
		return session;
	}
}

 4.提供映射關係的配置文件,在com.jsu.hb.pojo包中

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
	<!-- name:所操作對象的全路徑 table:該對象所對應的表名 -->
	<class name="com.jsu.hb.pojo.User" table="t_user">
		<!-- 主鍵配置
		     name:對象當中的主鍵名 User實體類當中
		     column:與表對應的列名
		     type:java當中的數據類型
		 -->
		<id name="id" column="t_id" type="java.lang.Integer">
		    <!-- 定義主鍵生成器 -->
			<generator class="increment"></generator>
		</id>
		<!-- 普通屬性的配置,非主鍵屬性的配置 -->
		<property name="name" column="t_name" type="java.lang.String"></property>
		<property name="birthday" column="t_birthday" type="java.util.Date"></property>
		<property name="age" column="t_age" type="java.lang.Integer"></property>
	</class>
</hibernate-mapping>

 5.在com.jsu.hb.dao包中,創建UserDao

package com.jsu.hb.dao;

import org.hibernate.Session;

import com.jsu.hb.pojo.User;
import com.jsu.hb.util.HibernateUtil;

public interface UserDao {
	public void save(User u);
}

 6.在com.jsu.hb.dao.impl包中,創建dao的實現類UserDaoImpl

package com.jsu.hb.dao.impl;

import org.hibernate.Session;

import com.jsu.hb.dao.UserDao;
import com.jsu.hb.pojo.User;
import com.jsu.hb.util.HibernateUtil;

public class UserDaoImpl implements UserDao{

	public void save(User u) {
		Session session = HibernateUtil.getCurrentSession();
		session.save(u);		
	}

}

 7.在biz層com.jsu.hb.biz包中創建UserBiz

package com.jsu.hb.biz;

import com.jsu.hb.pojo.User;

public interface UserBiz {
	public void register(User u);
}

 8.在com.jsu.hb.biz.impl包中創建biz的實現類UserBizImpl

package com.jsu.hb.biz.impl;

import org.hibernate.Session;
import org.hibernate.Transaction;

import com.jsu.hb.biz.UserBiz;
import com.jsu.hb.dao.UserDao;
import com.jsu.hb.dao.impl.UserDaoImpl;
import com.jsu.hb.pojo.User;
import com.jsu.hb.util.HibernateUtil;

public class UserBizImpl implements UserBiz {
	private UserDao userDao = new UserDaoImpl();
	public void register(User u) {
		//在biz層處理事務
		Session session = HibernateUtil.getCurrentSession();
		Transaction tx = session.getTransaction();
		tx.begin();
		userDao.save(u);
		tx.commit();
	}

}
 

9.在com.jsu.hb.action包中,提供RegisterAction

package com.jsu.hb.action;

import java.util.Date;

import com.jsu.hb.biz.UserBiz;
import com.jsu.hb.biz.impl.UserBizImpl;
import com.jsu.hb.pojo.User;

public class RegisterAction  {
	public static void main(String[] args) {
		//1.獲得數據
		User u = new User();
		u.setName("leon");
		u.setAge(23);
		u.setBirthday(new Date());
		//2.調用業務層處理數據
		UserBiz userBiz = new UserBizImpl();
		userBiz.register(u);
		//3.提示結果
		System.out.println("********註冊成功********");
	}
}
 
發佈了64 篇原創文章 · 獲贊 0 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章