- 浏览: 156407 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
jiangyeqt:
好好的温习了一遍,讲的非常的到位
Session的原理 -
JAVA静静:
这是什么啊?有没有源码?看不懂诶!
开源框架Pushlet入门 -
colinzhy:
讲的很深刻,学习了
Session的原理 -
昔雪似花:
...
Map-iterator -
不相信眼泪:
恩,很好,多谢
.scc文件是做什么用的?
类拟框架:Apache OJB,JDO,Toplink,EJB(CMP)JPA,IBatis
适合查询及单个对象的编辑,适合于对象之间有清晰的关系,不适用于批量修改,关系复杂的对象及特定的sql功能
第一个项目
1 新建java项目
2 创建User Library,加入如下jar
* hibernate_home/hibernate3.jar
* hibernate_home/lib/*.jar
* MySql jdbc验动
3 创建hibernate配置文件hibernate.cfg.xml,为了便于调试最好加入log4j配置文件
9 为了方便跟踪SQL执行,在hibernate.cfg.xml中加入
<property name="hibernate.show_sql">true</property>
创建HibernateUtils类,对重量级容量进行优化:
Session接口的CRUD操作
瞬时/持久化/离线对象示例:
适合查询及单个对象的编辑,适合于对象之间有清晰的关系,不适用于批量修改,关系复杂的对象及特定的sql功能
第一个项目
1 新建java项目
2 创建User Library,加入如下jar
* hibernate_home/hibernate3.jar
* hibernate_home/lib/*.jar
* MySql jdbc验动
3 创建hibernate配置文件hibernate.cfg.xml,为了便于调试最好加入log4j配置文件
<hibernate-configuration>
<session-factory >
<!-- 连接串 -->
<property name="hibernate.connection.url">jdbc:mysql://localhost/hibernate1</property>
<!-- 驱动类 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 用户名 -->
<property name="hibernate.connection.username">root</property>
<!-- 密码 -->
<property name="hibernate.connection.password">root</property>
<!-- 适配器(反译) -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property>
<!-- 显示sql语句 -->
<property name="hibernate.show_sql">true</property>
<!-- 可以防表被重新建立 -->
<property name="hibernate.hbm2ddl.auto">update</property>
<mapping resource="com/myobj/hibername/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
<session-factory >
<!-- 连接串 -->
<property name="hibernate.connection.url">jdbc:mysql://localhost/hibernate1</property>
<!-- 驱动类 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 用户名 -->
<property name="hibernate.connection.username">root</property>
<!-- 密码 -->
<property name="hibernate.connection.password">root</property>
<!-- 适配器(反译) -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property>
<!-- 显示sql语句 -->
<property name="hibernate.show_sql">true</property>
<!-- 可以防表被重新建立 -->
<property name="hibernate.hbm2ddl.auto">update</property>
<mapping resource="com/myobj/hibername/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
4 定义实体类,继承java.io.ser
5 定义User类的映射文件User.hbm.xml
<hibernate-mapping>
<class name="com.myobj.hibername.User" table="">
<id name="id">
<generator class="uuid"/>
<generator class="native"/>
<generator class="assigned"/>
</id>
<property name="name"/>
<property name="password"/>
<property name="createTime"/>
<property name="expireTime"/>
</class>
</hibernate-mapping>
6 将User.hbm.xml文件加入到hibernate.cfg.xml文件中
<class name="com.myobj.hibername.User" table="">
<id name="id">
<generator class="uuid"/>
<generator class="native"/>
<generator class="assigned"/>
</id>
<property name="name"/>
<property name="password"/>
<property name="createTime"/>
<property name="expireTime"/>
</class>
</hibernate-mapping>
<session-factory >
<property name="hibernate.connection.url">jdbc:mysql://localhost/hibernate1</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<mapping resource="com/myobj/hibername/User.hbm.xml"/>
</session-factory>
7 编写hbm2ddl工具类,将实体类生成数据库表,手工建数据库
<property name="hibernate.connection.url">jdbc:mysql://localhost/hibernate1</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<mapping resource="com/myobj/hibername/User.hbm.xml"/>
</session-factory>
public class ExportDB {
public static void main(String[] args) {
//读取hibernate.cfg.xml文件,默认为.properties文件,
//读取xml文件用new Configuration().configure()
Configuration cfg=new Configuration().configure();
//生成工具类
SchemaExport export=new SchemaExport(cfg);
//生成数据库表
export.create(true, true);
}
}
8 开发客户端Client类添加数据
public static void main(String[] args) {
//读取hibernate.cfg.xml文件,默认为.properties文件,
//读取xml文件用new Configuration().configure()
Configuration cfg=new Configuration().configure();
//生成工具类
SchemaExport export=new SchemaExport(cfg);
//生成数据库表
export.create(true, true);
}
}
public class Client {
public static void main(String[] args) {
//读取hibernate.cfg.xml文件
Configuration cfg=new Configuration().configure();
//创建SessionFactory,与数据库绑定,一个数据库对应一个SessionFactory,与二级缓存相关,为重量级对象,是线程安全的
SessionFactory factory=cfg.buildSessionFactory();
//
Session session=null;//不同于connction,是对其的封装,用时到连接池拿来conn
try {
session = factory.openSession();
//开启事务
session.beginTransaction();
User user = new User();
user.setName("张三");
user.setPassword("123");
user.setCreateTime(new Date());
user.setExpireTime(new Date());
//保存数据
session.save(user);
//提交事务
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
//回滚事务
session.getTransaction().rollback();
}finally{
if(session!=null){
if(session.isOpen()){
//关闭session,是非线程安程的
session.close();
}
}
}
}
}
******session.update()相关类都改,session.merge()只改当前类,session.delete(),都要开启事务******public static void main(String[] args) {
//读取hibernate.cfg.xml文件
Configuration cfg=new Configuration().configure();
//创建SessionFactory,与数据库绑定,一个数据库对应一个SessionFactory,与二级缓存相关,为重量级对象,是线程安全的
SessionFactory factory=cfg.buildSessionFactory();
//
Session session=null;//不同于connction,是对其的封装,用时到连接池拿来conn
try {
session = factory.openSession();
//开启事务
session.beginTransaction();
User user = new User();
user.setName("张三");
user.setPassword("123");
user.setCreateTime(new Date());
user.setExpireTime(new Date());
//保存数据
session.save(user);
//提交事务
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
//回滚事务
session.getTransaction().rollback();
}finally{
if(session!=null){
if(session.isOpen()){
//关闭session,是非线程安程的
session.close();
}
}
}
}
}
9 为了方便跟踪SQL执行,在hibernate.cfg.xml中加入
<property name="hibernate.show_sql">true</property>
持久化对象的状态
1 瞬时对象:使用new操作符初始化的对象不是立刻就持久的。
2 持久化对象:持久实例是任何具有数据库标识的实便函。
3 离线对象:Session关闭后持久化对象就变为离线对名象。
持久化对象的生命周期:
Transient对象new但在数据库中没有记录且没有被Session管理,
Persistent对象数据库中有记录,并Session在管理。在清理缓存(或脏数据检查)时与数据库同步。Session与一级缓存绑定.
Detached对象数据库中有记录,Session没有管理它。
创建HibernateUtils类,对重量级容量进行优化:
public class HibernateUtils {
private static SessionFactory factory;
//static块只执行一次
static{
try {
Configuration cfg = new Configuration().configure();
} catch (Exception e) {
e.printStackTrace();
}
}
public static SessionFactory getSessionFactory(){
return factory;
}
public static Session getSession(){
return factory.openSession();
}
public static void closeSession(Session session){
if(session!=null){
if(session.isOpen()){
session.close();
}
}
}
}
private static SessionFactory factory;
//static块只执行一次
static{
try {
Configuration cfg = new Configuration().configure();
} catch (Exception e) {
e.printStackTrace();
}
}
public static SessionFactory getSessionFactory(){
return factory;
}
public static Session getSession(){
return factory.openSession();
}
public static void closeSession(Session session){
if(session!=null){
if(session.isOpen()){
session.close();
}
}
}
}
Session接口的CRUD操作
瞬时/持久化/离线对象示例:
public class SessionTest extends TestCase {
public void testSave1(){
Session session=null;
Transaction tx=null;
User user=null;
try{
session=HibernateUtils.getSession();
tx=session.beginTransaction();
//Transient状态,未被Session管理
user=new User();
user.setName("ssssss");
user.setPassword("123");
user.setCreateTime(new Date());
user.setExpireTime(new Date());
//persistent状态,被Session管理,当属性发生改变的时候,hibernate会自动和数据库同步。
session.save(user);
user.setName("王五");
tx.commit();
}catch(Exception e){
e.printStackTrace();
tx.rollback();
}finally{
HibernateUtils.closeSession(session);
}
//detached状态,被Session踢出缓存,未被管理
user.setName("张三");
try {
session = HibernateUtils.getSession();
session.beginTransaction();
session.update(user);
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally{
HibernateUtils.closeSession(session);
}
}
}
public void testSave1(){
Session session=null;
Transaction tx=null;
User user=null;
try{
session=HibernateUtils.getSession();
tx=session.beginTransaction();
//Transient状态,未被Session管理
user=new User();
user.setName("ssssss");
user.setPassword("123");
user.setCreateTime(new Date());
user.setExpireTime(new Date());
//persistent状态,被Session管理,当属性发生改变的时候,hibernate会自动和数据库同步。
session.save(user);
user.setName("王五");
tx.commit();
}catch(Exception e){
e.printStackTrace();
tx.rollback();
}finally{
HibernateUtils.closeSession(session);
}
//detached状态,被Session踢出缓存,未被管理
user.setName("张三");
try {
session = HibernateUtils.getSession();
session.beginTransaction();
session.update(user);
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally{
HibernateUtils.closeSession(session);
}
}
}
Session接口
加载数据get与load的区别:
lazy代理:get没有, load支持lazy;
查不存在数据:get返回null,load抛出异常ObjectNotFoundException
//get查询数据
public void testReadByGetMethod1(){
Session session=null;
try {
session=HibernateUtils.getSession();
session.beginTransaction();
//采用get方式,马上发出查询sql,加载波User对象
User user=(User)session.get(User.class, "5c68c3ed206a327d01206a3281fa0001");
http://www.blogjava.net/Images/OutliningIn
public void testReadByGetMethod1(){
Session session=null;
try {
session=HibernateUtils.getSession();
session.beginTransaction();
//采用get方式,马上发出查询sql,加载波User对象
User user=(User)session.get(User.class, "5c68c3ed206a327d01206a3281fa0001");
http://www.blogjava.net/Images/OutliningIn
发表评论
-
Java通用数据访问层Fastser-DAL推荐
2014-12-29 10:20 5575本着不重复造轮子的原则,基于mybatis、spring ... -
hibernate基础-基本映谢标签和属性
2009-11-03 15:35 745hibernate基本映射 实体类------>表 实体 ... -
hibernate基础-映射关系(多对一I一对一)
2009-11-03 15:53 681多对一关联映射 many-to-one关联映射本质: * ... -
hibernate基础-映射关系(一对多I多对多).
2009-11-03 16:04 597一对多关联映射(one-to-many) 一对多关联映射利用了 ... -
hiberante基础-继承映射
2009-11-03 16:15 592继承映射的三种策略: * 单表继承,每棵类继承树使用一个表 ... -
hibernate基础-其他映射
2009-11-03 16:17 624set、list、array、map Collection: ... -
hibernate基础-自关联映射
2009-11-03 16:19 6131 class Node: private int id;pr ... -
hibernate基础-Component+[联合]映象
2009-11-03 16:22 573Component映射(值对象映射) 在hibernate中, ... -
hibernate基础-lazy策略
2009-11-03 16:33 557lazy策略可以使用在: * <class> ... -
hibernate基础-fetch抓取
2009-11-03 16:34 669抓取策略(单端代理的批量抓取) 1 保持默认,也就是fetch ... -
hibernate基础-Session_Flush
2009-11-03 16:37 807session flush测试: session ... -
hibernate基础-悲观[乐观]锁
2009-11-03 16:40 653悲观锁 悲观锁的实现,通常依赖于数据库机制,在整个过程中将数据 ... -
hiberante基出-缓存
2009-11-03 16:49 711一级缓存 * 一级缓存是缓存实体对象的 * 如果管理一 ... -
hibernate基础-HQL
2009-11-03 17:14 746在hql中关键字不区分大小写,但是属性和类名区分大不写简单属性 ... -
hibernate基础-HibernateTemplate
2009-11-03 17:20 7141 ,void delete ( Object entity ... -
[导入]Hibernate 深入研究之 Criteria
2009-11-03 17:35 655文章来源:http://www.cnblogs.com/ ... -
DetachedCriteria
2009-11-03 17:41 909org.hibernate.criterion.Detache ... -
Restrictions
2009-11-03 17:46 807HQL运算符 ... -
hibernate.cfg.xml
2009-11-03 17:56 626<?xml version="1.0&quo ... -
由映射文件生成表
2009-11-03 17:57 681import org.hibernate.cfg.Confi ...
相关推荐
这样安排的好处是使读者在具备了初步知识的基础上对组件进行更深入的理解,并通过一系列贴近实际的实例来提高读者对组件的把握能力以及迅速丰富开发经验。 本书的配套光盘中包含了本书所有实例的完整源代码以及开发...
这样安排的好处是使读者在具备了初步知识的基础上对组件进行更深入的理解,并通过一系列贴近实际的实例来提高读者对组件的把握能力以及迅速丰富开发经验。 本书的配套光盘中包含了本书所有实例的完整源代码以及...
这样安排的好处是使读者在具备了初步知识的基础上对组件进行更深入的理解,并通过一系列贴近实际的实例来提高读者对组件的把握能力以及迅速丰富开发经验。 本书的配套光盘中包含了本书所有实例的完整源代码以及...
本书适合于有较好的 Java编程基础,或有初步JSP、Servlet基础的读者阅读。尤其适合于对Struts 2、Spring、Hibernate了解不够深入,或对Struts 2+ Spring+Hibernate整合开发不太熟悉的开发人员阅读。
这样安排的好处是使读者在具备了初步知识的基础上对组件进行更深入的理解,并通过一系列贴近实际的实例来提高读者对组件的把握能力以及迅速丰富开发经验。 本书的配套光盘中包含了本书所有实例的完整源代码以及...
这样安排的好处是使读者在具备了初步知识的基础上对组件进行更深入的理解,并通过一系列贴近实际的实例来提高读者对组件的把握能力以及迅速丰富开发经验。 本书的配套光盘中包含了本书所有实例的完整源代码以及...
这样安排的好处是使读者在具备了初步知识的基础上对组件进行更深入的理解,并通过一系列贴近实际的实例来提高读者对组件的把握能力以及迅速丰富开发经验。 本书的配套光盘中包含了本书所有实例的完整源代码以及...
这样安排的好处是使读者在具备了初步知识的基础上对组件进行更深入的理解,并通过一系列贴近实际的实例来提高读者对组件的把握能力以及迅速丰富开发经验。 本书的配套光盘中包含了本书所有实例的完整源代码以及...
这样安排的好处是使读者在具备了初步知识的基础上对组件进行更深入的理解,并通过一系列贴近实际的实例来提高读者对组件的把握能力以及迅速丰富开发经验。 本书的配套光盘中包含了本书所有实例的完整源代码以及...
这样安排的好处是使读者在具备了初步知识的基础上对组件进行更深入的理解,并通过一系列贴近实际的实例来提高读者对组件的把握能力以及迅速丰富开发经验。 本书的配套光盘中包含了本书所有实例的完整源代码以及...
本书所介绍的内容是作者多年J2EE 开发经验的总结,内容涉及Struts 、...本书适用于有较好的Java 编程基础,有初步的J2EE 编程基础的读者。本书既可以作为J2EE 初学者 的入门书籍,也可作为J2EE 应用开发者的提高指导。
本书所介绍的内容是作者多年J2EE开发经验的总结,内容涉及三个... 本书适用于有较好的Java编程基础,有初步的J2EE编程基础的读者。本书既可以作为J2EE初学者的入门书籍,也可作为J2EE应用开发者的提高指导。
本书所介绍的内容是作者多年J2EE开发经验的总结,内容涉及三个... 本书适用于有较好的Java编程基础,有初步的J2EE编程基础的读者。本书既可以作为J2EE初学者的入门书籍,也可作为J2EE应用开发者的提高指导。
本书所介绍的内容是作者多年J2EE开发经验的总结,内容涉及三个... 本书适用于有较好的Java编程基础,有初步的J2EE编程基础的读者。本书既可以作为J2EE初学者的入门书籍,也可作为J2EE应用开发者的提高指导。
本书所介绍的内容是作者多年J2EE开发经验的总结,... 本书适用于有较好的Java编程基础,有初步的J2EE编程基础的读者。本书既可以作为J2EE初学者的入门书籍,也可作为J2EE应用开发者的提高指导。 非常不错的学习资料!
本书适用于有较好的Java编程基础,有初步的J2EE编程基础的读者。本书既可以作为J2EE初学者的入门书籍,也可作为J2EE应用开发者的提高指导。 分为两部分,part1地址 http://download.csdn.net/source/1070521
本书适用于有较好的Java编程基础,有初步的J2EE编程基础的读者。本书既可以作为J2EE初学者的入门书籍,也可作为J2EE应用开发者的提高指导。 分两部分:part2地址http://download.csdn.net/source/1070540
輕量級 J2EE 企業應用實戰:Struts+Spring+Hibernate整合... 本书适用于有较好的Java 编程基础,有初步的J2EE 编程基础的读者。本书既可以作为J2EE 初学者 的入门书籍,也可作为J2EE 应用开发者的提高指导。
輕量級 J2EE 企業應用實戰:Struts+Spring+Hibernate整合開發... 本书适用于有较好的Java 编程基础,有初步的J2EE 编程基础的读者。本书既可以作为J2EE 初学者 的入门书籍,也可作为J2EE 应用开发者的提高指导。