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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章