框架 Hibernate 2
持久化类百度百科
http://baike.baidu.com/link?url=gNus-8jhK0Mi401aIR-16YUAnWKzOJfeMagUV8_t5iG8235JyjMrmZPd7rIT35KyqbFHnnvlntYXhmt9tm-d4NnplTjPXTEAHO-QbbahHXXjwuAcxBGq1ZwoAzPVHY-X
首先持久化作用是将程序数据在持久状态和瞬时状态间转换的机制。即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的对象存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等等。 一般来说,持久化类(persistent class):可以被hibernate保存到数据库,并且从数据库读取的类。
持久化类:是指其实例需要被Hibernate持久化到数据库中的类。持久化类符合JavaBean的规范,包含一些属性,以及与之对应的getXXX()和setXXX()方法。而持久化对象就是把对象保存至数据库或者文件中。
区别就是:持久化类是能够实现持久化的类-也就是该类符合JavaBean的规范和持久化标准的一些操作。而持久化对象就是:持久化类的实例对象,并且将至保存到数据库或者文件中。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!--数据库连接 -->
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="hibernate.connection.password"></property>
<property name="hibernate.connection.url">jdbc:oracle:thin:@localhost::orcl</property>
<property name="hibernate.connection.username">test0816</property>
<!--数据库方案 -->
<property name="hibernate.default_schema">TEST0816</property>
<!--数据库方言 -->
<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
<!--调试-->
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<!--自动建表方式 -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!--映射文件 -->
<mapping resource="com/hanqi/entity/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
package com.hanqi.test; import static org.junit.Assert.*; import java.util.Date; import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.junit.After;
import org.junit.Before;
import org.junit.Test; import com.hanqi.entity.User; public class Test01 { private Session se=null;
private SessionFactory sf=null;
private Transaction ts=null;
//定义特殊方法
//在测试用例方法被执行之前自动执行的方法
//一般用来初始化公用的对象
//前置方法
@Before
public void init()
{
//1获取配置文件
Configuration cfg=new Configuration().configure();
//2注册配置
ServiceRegistry sr=new StandardServiceRegistryBuilder()
.applySettings(cfg.getProperties()).build();
//3获取SessionFactory (相当于jdbc的连接connection)
sf=cfg.buildSessionFactory(sr);
System.out.println(sf); //4产生Session 保存 跟jsp session没关系 叫会话而已 真正干活的
se=sf.openSession(); //5启动事务
ts=se.beginTransaction();
} //后置方法
//一般用来释放资源
@After
public void destory()
{
//7提交事务
ts.commit();//提交事务,不然没有真正的放到数据库 在这里执行了insert语句才写进数据库 //8释放资源
se.close();
sf.close();
} //测试Hibernate连接 @Test
public void test() { //6操作数据库
//添加数据 //实例化新对象,处于临时状态
User u1=new User();
u1.setBirthday(new Date());//创建当地时间
u1.setMoney();
u1.setPassword("");
u1.setUserName("测试1");
//u1.setUserID(2);//自然主键 //保存数据
//通过save方法把对象从临时状态转成持久化状态
se.save(u1);//不用操心insert语句,但不在这执行语句,也会有主键,hibernate自动生成
System.out.println(u1); } //测试查询
@Test
public void test1()
{
//查询数据 查一个
//提供2个参数
//需要返回哪一个持久化类的实例
//实例的标识(数据的主键值)
//通过session的get方法获得的对象处于持久化状态
User u2=(User)se.get(User.class,);//User类 主键是3
System.out.println(u2); //修改数据
User u3=(User)se.get(User.class,);//User类 主键是3
u3.setUserName("修改");
System.out.println(u3); //删除
//se.delete(u2);//使持久化对象进入删除状态 } @Test
public void test2()
{
User u1=(User)se.get(User.class,);//立即加载数据
System.out.println("get后");
System.out.println("u1="+u1);
User u2=(User)se.get(User.class,);
System.out.println("u2="+u2);
} public void test3()
{
User u1=(User)se.load(User.class, );//延时加载数据
System.out.println("load后");
System.out.println("U1="+u1);//当要使用时才能加载
} //测试游离状态
@Test
public void test4()
{
//得到持久化状态的对象
User u1=(User)se.get(User.class, );
System.out.println("u1="+u1);
se.close();//关闭游离状态 //使u1进入游离状态
u1.setUserName("测试游离456");
//把OID置成null
u1.setUserID(null);//把实体类的类型改为Integer
System.out.println("重新创建Session和事务..."); //重新创建Session,再使session回来
se=sf.openSession();
//重新开启事务 事务se.close()之前已经关了
ts=se.beginTransaction(); se.saveOrUpdate(u1);//自动判断是save还是update 为空是添加,有的话修改
} }
package com.hanqi.entity; import java.util.Date; //持久化类 实体化类
//不需要使用final终态
public class User { private Integer userID;//Integer包装类 可以为null int不可以
private String userName;
private Date birthday;
private double money;
private String password; public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getUserID() {
return userID;
}
public void setUserID(Integer userID) {
this.userID = userID;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
} public User(Integer userID, String userName, Date birthday, double money, String password) {
super();
this.userID = userID;
this.userName = userName;
this.birthday = birthday;
this.money = money;
this.password = password;
} @Override
public String toString() {
return "User [userID=" + userID + ", userName=" + userName + ", birthday=" + birthday + ", money=" + money
+ ", password=" + password + "]";
}
//必须包含无参的构造方法
//因为需要用到反射 反射要求是构造无参实例
public User() {
super();
} }
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated -- :: by Hibernate Tools 3.4..CR1 -->
<hibernate-mapping>
<class name="com.hanqi.entity.User" table="T_USER">
<id name="userID" type="int">
<column name="USERID" />
<generator class="native" />
</id>
<property name="userName" type="java.lang.String">
<column name="USERNAME" length="" not-null="true"/>
</property>
<property name="birthday" type="java.util.Date">
<column name="BIRTHDAY" sql-type="DATE" />
</property>
<property name="money" type="java.lang.Double">
<column name="MONEY" length="" scale="" default=""/>
</property>
<property name="password" type="java.lang.String">
<column name="PASSWORD" length=""/>
</property>
</class>
</hibernate-mapping>


框架 Hibernate 2的更多相关文章
- 框架Hibernate笔记系列 基础Session
标题:框架Hibernate笔记 资料地址: 1. www.icoolxue.com 孔浩 1.背景简介 Hibenate是JBoss公司的产品.它是数据持久化的框架.Usually,我们使用JDBC ...
- 持久化框架Hibernate 开发实例(一)
1 Hibernate简介 Hibernate框架是一个非常流行的持久化框架,其中在web开发中占据了非常重要的地位, Hibernate作为Web应用的底层,实现了对数据库操作的封装.HIberna ...
- 学习ORM框架—hibernate(三):跟踪持久化对象状态,掌握对象持久化
准备工作 在上篇博客中学习ORM框架—hibernate(一):初识hibernate,通过简单的实例说明O和R的映射过程.本篇博客将要介绍hibernate中持久化对象的状态,并使用hibernat ...
- java 三大框架 hibernate部分知识实现增删该查操作
1.三层架构 表现层 web层(MVC是一个表现层的设计模型) 业务层 service层 持久层 dao层2.三大框架和三层架构的关系(建议学习三大框架的顺序:先学习hibernat ...
- 三大框架-Hibernate
概念 持久化框架 把对象保存到数据库中,对数据的CURD操作 ORM框架 ORM对象关系映射 类<->表 属性<->字段 对象<->表中的记录 实现方法 创建持久化 ...
- 持久化框架Hibernate 开发实例(二)
1 简述 通过使用Hibernate框架,开发者可以使用面向对象的方式来进行数据库访问,从而取代 以前使用JDBC进行数据库访问的方式.通过使用Hibernate框架,web应用可以通过面向 对象的方 ...
- ORM框架Hibernate (一) 对DAO封装和抽象
说明 前面已经给大家介绍了Struts这个框架,Struts是对Web项目的表示层进行了封装,而Hibernate是对Web项目中DAO层进行封装,也即是.NET中我们常用到的D层封装,即对访问数据库 ...
- Java ssh 框架 hibernate 详细理解
Hibernate框架技术相信对大多数的 java 程序员并不陌生,数据表之间的关系如何通过Hibernate来建立,需要我们认真的分析数据表中数据项之间的交互: 数据库表的之间的关系有: (1)一对 ...
- [ SSH框架 ] Hibernate框架学习之二
一.Hibernate持久化类的编写规范 1.什么是持久化类 Hibernate是持久层的ORM影射框架,专注于数据的持久化工作.所谓持久化,就是将内存中的数据永久存储到关系型数据库中.那么知道了什么 ...
- [ SSH框架 ] Hibernate框架学习之三
一.表关系的分析 Hibernate框架实现了ORM的思想,将关系数据库中表的数据映射成对象,使开发人员把对数据库的操作转化为对对象的操作,Hibernate的关联关系映射主要包括多表的映射配置.数据 ...
随机推荐
- 教程:让你的表单升级到CSS3和HTML5客户端验证
今天我们一起来看看如何创建一个实用并且功能强大的表单,表单使用如今最热门的技术HTML5和css3来创建,并且可以通过HTML5进行客户端验证. 查看预览下载附件 第一步:策划表单功能 首先,我们得为 ...
- String对象内存分析
Java中内存分析: 栈(Stack) :存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中). 堆(heap): ...
- 在notepad++中快速插入当前时间方法
插件是notepad++的一大优势,而要实现此功能,也必须借助TextFX插件. 1.点击"插件"-->"Plugin Manager"-->&qu ...
- Linux /etc/fstab文件
一,作用 /etc/fstab是用来存放文件系统的静态信息的文件,当系统启动时,系统会自动地从这个文件读取信息,并且会自动将此文件中指定的文件系统挂在到执行的目录 二,挂载的限制 1,根目录是必须挂载 ...
- Azure 订阅和服务限制、配额和约束
最后更新时间:2016年10月24日 概述 本文档指定一些最常见的 Azure 限制.请注意,本文档目前未涵盖所有 Azure 服务.一段时间后,将展开并更新这些限制以包含多个平台. NOTE: 如果 ...
- python 3 输入和输出
一.普遍的输入和输出 1.输入 在python3中,函数的输入格式为:input(),能够接受一个标准输入数据,返回string类型. input() 函数是从键盘作为字符串读取数据,不论是否使用引号 ...
- Oracle之表空间
Oracle数据库被划分为称作表空间的逻辑区域,形成Oracle数据库的逻辑结构.一个Oracle数据库对应一个或多个表空间,而一个表空间对应一个或多个物理的数据库文件.表空间是Oracle数据库回复 ...
- 一、python小功能记录——监听键盘事件
1.监听键盘按键 from pynput.keyboard import Listener def press(key): print(key.char) with Listener(on_press ...
- 关于Unity3d的Quaternion.Slerp的学习
首先在场景中创建三个cube的GameObject,from表示要转换之前的样子,to表示转换之后的样子,change表示转的效果.如下图所示: 其中from和change cube开始运行之前的tr ...
- C#中Array、ArrayList和List三者的区别
1.Array 在C#中最早出现的.在内存中是连续存储的,所以它的索引速度非常快,而且赋值与修改元素也很简单. 它的空间大小是固定的,空间不够时也不能再次申请,所以需要事前确定合适的空间大小. 2. ...