`

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("********注册成功********");
	}
}
 
分享到:
评论

相关推荐

    node-v12.18.3-linux-s390x.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    用于高级分析的阿联酋汽车市场销售数据

    通过我们最新收集的数据集,释放阿联酋充满活力的汽车市场的潜力,该数据集于2024年4月12日更新。该主要数据集来源于dubizzle.com,提供了阿拉伯联合酋长国当前汽车销售的全面快照,为汽车市场趋势和消费者偏好提供了宝贵的见解。

    基于Python+opencv+keras+numpy+sklearn的人脸识别门禁系统.zip

    基于OpenCV的系统

    美国大学生数学建模竞赛简介

    美国大学生数学建模竞赛(MCM/ICM),简称“美赛”,是一项由美国数学及其应用联合会(COMAP)主办的国际性数学建模竞赛。该竞赛自1985年创办以来,已经成为全球范围内极具影响力的数学建模竞赛之一,旨在鼓励大学生团队应用数学知识解决实际问题,提升学生的数学建模能力、科研能力以及团队合作精神。 美赛作为一项国际性的学术竞赛,对参赛学生的数学、英语、论文写作和科研能力有很高的要求。竞赛通常要求三人一组,在四天内完成从建立数学模型、求解、验证到撰写论文的全过程。竞赛题目覆盖经济、管理、环境、资源、生态、医学、安全等多个领域。

    Blackmagic SmartView SmartScope Duo 4K SmartView 4K 五月 安装和操作手册

    Blackmagic SmartView SmartScope SmartView Duo SmartScope Duo 4K SmartView 4K 五月 2021 安装和操作手册

    unity开发入门教程.zip

    Unity是一个流行的跨平台游戏开发引擎,它允许开发者使用C#等语言创建2D和3D游戏。以下是一个Unity开发的基本入门教程: 1. 安装Unity 首先,你需要从Unity的官方网站下载并安装Unity Hub和Unity编辑器。Unity Hub是一个用于管理Unity版本和项目的工具。 2. 创建新项目 打开Unity Hub,点击“New”来创建一个新项目。选择你需要的Unity版本、模板(例如2D或3D)和其他设置。 3. 熟悉Unity界面 Unity的界面主要由以下几个部分组成: Hierarchy:显示场景中的所有游戏对象。 Project:显示项目的所有资源,如场景、模型、材质、脚本等。 Inspector:显示当前选中游戏对象的详细信息和属性。 Scene:显示当前场景的3D视图,你可以在这里编辑游戏对象。 Game:显示游戏运行时的视图。

    根据各种因素预测一个地区发生洪水的概率设计代码

    根据各种因素预测一个地区发生洪水的概率。

    python 3.9.19源码编译包

    python 3.9.19源码编译包python 3.9.19源码编译包python 3.9.19源码编译包python 3.9.19源码编译包python 3.9.19源码编译包python 3.9.19源码编译包python 3.9.19源码编译包python 3.9.19源码编译包python 3.9.19源码编译包python 3.9.19源码编译包python 3.9.19源码编译包python 3.9.19源码编译包python 3.9.19源码编译包

    信息技术填空选择100题

    总结出了信息技术课程常考的100道填空题,答案在花括号内。制卷时只需要将花括号及其中的内容替换成圆括号即可。

    数据结构实验代码中国象棋马(上机实验).rar

    数据结构实验代码

    一篇基础的Scratch语言教程

    一篇基础的Scratch语言教程 Scratch 是一种面向青少年的图形化编程语言,由麻省理工学院(MIT)的终身幼儿园团队开发。它通过拖放代码块的方式,使得编程教育变得更加直观和有趣。以下是一篇基础的Scratch语言教程,适合初学者入门。

    第五次作业函数第一题代码

    第五次作业函数第一题--

    node-v12.22.10-darwin-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    基于扩散概率模型在无监督OCT去噪中的应用.zip

    本项目聚焦于基于扩散概率模型在无监督光学相干断层扫描(OCT)去噪中的应用。OCT是一种高分辨率的医学影像技术,常用于视网膜、心血管等疾病的诊断。 传统的OCT去噪方法往往需要依赖于带有清晰图像的监督学习,而本项目则探索在无监督环境下,利用扩散概率模型对OCT图像进行去噪。该方法无需清晰的图像作为监督,能够有效减少对大量标注数据的依赖。 在数据集方面,我们使用了公开的OCT影像数据集,如OCT2017等,并进行了预处理,包括图像裁剪、大小调整和归一化等。在环境搭建方面,我们使用Python编程语言,基于TensorFlow和PyTorch深度学习框架进行开发。为了提高计算效率,我们还使用了GPU加速计算。此外,我们还采用了Docker容器技术,确保实验结果的可重复性。 项目完成后,将实现对OCT图像的无监督去噪,提高医学影像的清晰度和可用性,为相关疾病的诊断和治疗提供有力支持。同时,项目成果也可应用于其他无监督去噪任务。

    福禄克 1550B 兆欧表 用户手册 FLUKE 1550B MegOhmMeter

    福禄克 1550B 兆欧表 用户手册

    星间飞行二次元角色研修课程-课程网盘链接提取码下载 .txt

    本课程旨在深入探讨二次元角色设计理念,引导学员掌握角色塑造技巧与创作方法。通过案例分析与实践训练,学员将学习角色设定、情感表达等关键要素,提升角色创作能力,激发创意潜能,打造独具魅力的二次元角色形象。 课程大小:6.4G

    node-v12.16.1-linux-arm64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    BRD母婴需求文档(产品需求文档及原型图都市孕妈项目).docx

    BRD母婴需求文档(产品需求文档及原型图都市孕妈项目).docx

    知乎答题王小程序2.1.6开源素材教程.zip

    知乎答题王小程序2.1.6开源素材教程.zip

    node-v12.19.0-linux-s390x.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

Global site tag (gtag.js) - Google Analytics