Hiberbate是面向对象,需要把对象和数据库进行映射。与数据库无关,操作的是对象,会根据数据源
和数据库的方言生成对应的sql语句进行查询,是一个优秀的java持久层解决方案,是当今主流的对象-关系映射工具,减少了代码的冗余。

1、hiberbate配置文件详细介绍:

<?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="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://127.0.0.1:3306/javaee?useUnicode=true&amp;characterEncoding=UTF-8</property>
<property name="connection.username">用户名</property>
<property name="connection.password">密码</property>
<!-- 数据库连接池的大小 -->
<property name="connection.pool_size">50</property>
<!-- 每次从数据库中取出并放到JDBC的Statement中的记录条数。Fetch Size设的越大,读数据库的次数越少,速度越快,Fetch Size越小,读数据库的次数越多,速度越慢-->
<property name="jdbc.fetch_size">500 </property>
<!--批量插入,删除和更新时每次操作的记录数。Batch Size越大,批量操作的向数据库发送Sql的次数越少,速度就越快,同样耗用内存就越大-->
<property name="jdbc.batch_size">23 </property>
<!-- SQL 方言 -->
<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>
<!-- 在控制台输出sql语句 -->
<property name="show_sql">true</property>
<!-- 在启动时根据配置更新数据库 -->
<property name="hbm2ddl.auto">update</property>
<!--注册我们的实体映射类-->
<mapping class="com.lwz.hibernate.bean.UserEntity"/>
</session-factory>
</hibernate-configuration>/

2、SessionFactory工厂类的创建(可以通过官网查询:hibernate.org官网)

package com.lwz.hibernate.bean;

import org.hibernate.SessionFactory;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder; public class MyHibernate {
public static SessionFactory sessionFactory;
static {
final StandardServiceRegistry registry = new StandardServiceRegistryBuilder()
.configure("com/lwz/hibernate/resource/hibernate.cfg.xml").build();
try {
sessionFactory = new MetadataSources(registry).buildMetadata()
.buildSessionFactory();
} catch (Exception e) {
StandardServiceRegistryBuilder.destroy(registry);
}
} }
3、实体类定义
package com.lwz.hibernate.bean; import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table; @Entity
@Table(name="t_user1")
public class UserEntity {
@Id
@Column(name="id",length=32)
private String userId;
@Column(name="name",length=20)
private String userName;
@Column(name="pass",length=20)
private String password;
@Column(name="age",length=22)
private int age;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
} } 4、测试hibernate基本的增删改查

package com.lwz.hibernate.test;


import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.junit.Before;
import org.junit.Test;


import com.lwz.hibernate.bean.MyHibernate;
import com.lwz.hibernate.bean.UserEntity;


public class T {
SessionFactory session = null;
@Before
public void config(){
session = MyHibernate.sessionFactory;
}

public Session getSession(){
return session.openSession();
}

@Test
public void saveEntity(){
//獲取session
Session s = this.getSession();
//獲取事務
Transaction tr = s.getTransaction();
tr.begin();//開啟事務
UserEntity user = new UserEntity();
user.setAge(25);
user.setPassword("666666");
user.setUserId("xx002");
user.setUserName("关二哥在此,谁敢不服");
//s.save(user);
//s.update(user);
UserEntity u = s.get(UserEntity.class, "xx001");
UserEntity u2 = s.load(UserEntity.class, "xx002");
//s.delete(u);
System.out.println(u.getUserName());
tr.commit();//事务提交
s.close();//关闭连接
System.out.println(u.getAge());
//懒加载异常
//System.out.println(u2.getUserName());
}

// public static void main(String[] args) {
//
// //System.out.println(MyHibernate.sessionFactory.openSession());
// }
}

 

hibernate有三种形态:瞬态(new()出来还没有session连接),持久态(session连接,保持与数据库的同步),游离态(session关闭,不能与数据库同步)。

缓存级别???一级缓存就是Session的缓存,二级缓存是SessionFactory的(Hibernate的二级缓存配置,就是配置这个)。

这两个的概念比较明确,但是我看有书上说还有三级缓存,就是所谓的查询缓存。
SessionFactory的session连接随着版本不一样,代码也不一样
hiberbnate配置和增删改查操作;添加,删除,修改需要开启事务,查询不需要开启事务
get属于即加载,load是懒加载,在使用时加载(session关闭后再去调用延迟加载汇报懒加载初始化异常)

浅谈HIbernate的更多相关文章

  1. 浅谈Hibernate入门

    前言 最近打算做一个自己的个人网站,经过仔细思考,打算使用hibernate作为开发的ORM框架,因此各种找资料,由于本人是刚刚接触这技术的,所以就找了比较基础的知识来分享下 基本概述 Hiberna ...

  2. 从一次异常中浅谈Hibernate的flush机制

    摘自http://www.niwozhi.net/demo_c70_i1482.html http://blog.itpub.net/1586/viewspace-829613/ 这是在一次事务提交时 ...

  3. 【Hibernate 7】浅谈Hibernate的缓存机制

    一.Hibernate缓存机制简介 对于Hibernate本身来说,它的缓存主要包括三部分:session缓存(一级缓存).二级缓存.查询缓存. 1.1,session缓存 随着session的关闭而 ...

  4. 【SSH 基础】浅谈Hibernate关系映射(4)

    继上篇博客 多对多关联映射(单向) 多对多对象关系映射,须要增加一张新表完毕基本映射. Hibernate会自己主动生成中间表 Hibernate使用many-to-many标签来表示多对多的关联,多 ...

  5. 浅谈hibernate+入门实例

    Hibernate是对jdbc进一步的封装,随着项目的开展,小编开始接触到这个概念,一开始接触的时候并没有觉得hibernate有多神秘,没有进一步的研究,只是简单的知道她是对jdbc的进一步的封装, ...

  6. 浅谈hibernate的sessionFactory和session

    一.hibernate是什么? Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hiber ...

  7. 浅谈Hibernate框架(一)——.hbm.xml中的配置

    Hibernate一枚“全自动”的ORM框架: 用IDE工具集成Hibernate会自动生成: 以.hbm.xml为后缀结尾的配置文件+ POJO类 + Dao类 主键查询: Session.load ...

  8. 浅谈Hibernate中的三种数据状态

    Hibernate中的三种数据状态:临时.持久.游离 1.临时态(瞬时态) 不存在于session中,也不存在于数据库中的数据,被称为临时态. 数据库中没有数据与之对应,超过作用域会被JVM垃圾回收器 ...

  9. 【SSH 基础】浅谈Hibernate关系映射(3)

    继上篇博客 一对多关联映射(单向) 上面我们介绍了多对一,我们反过来看一对多不就是多对一吗?那还用再进行不同的映射吗?有什么区别吗?一对多和多对一映射原理是一致的,存储是同样的.也就是生成的数据库的表 ...

随机推荐

  1. QT试验(1)

    今天,用Qt Creator写第一个简单的小程序“HelloQt”,运行时报错:error: cannot open C:\Users\敏\AppData\Local\Temp\main.obj.51 ...

  2. 关于“Scrum敏捷项目管理”

    此次关于“Scrum”的名词解析,主要目的是为我们的“OneZero”团队确定项目开发的模式. http://www.cnblogs.com/taven/archive/2010/10/17/1853 ...

  3. google-gson 使用及GsonBuilder设置

    Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率.   从结构上看,所有的数据(data)最终都可以分解成三种类型: 第一种类型是标量(scalar),也就是一个单独的字符串( ...

  4. [代码]--其他信息: ORA-01400: 无法将 NULL 插入

    这个错误其实就是oracle数据库的某列约束为 not null,但在插入值的时候插入了控制,无论是null和"",它都识别为空 有两种方法: 1.修改数据库字段约束为允许为空 2 ...

  5. 平面最近点对(分治nlogn)

    平面最近点对,是指给出平面上的n个点,寻找点对间的最小距离 首先可以对按照x为第一关键字排序,然后每次按照x进行分治,左边求出一个最短距离d1,右边也求出一个最短距离d2,那么取d=min(d1, d ...

  6. 【bzoj1088】扫雷

    见过水的,没见过这么水的 Description 相信大家都玩过扫雷的游戏.那是在一个n*m的矩阵里面有一些雷,要你根据一些信息找出雷来.万圣节到了,“余”人国流行起了一种简单的扫雷游戏,这个游戏规则 ...

  7. 【Luogu P4074】[WC2013]糖果公园(树上带修改莫队)

    题目描述 Candyland 有一座糖果公园,公园里不仅有美丽的风景.好玩的游乐项目,还有许多免费糖果的发放点,这引来了许多贪吃的小朋友来糖果公园游玩. 糖果公园的结构十分奇特,它由 \(n\) 个游 ...

  8. Luogu 2469 [SDOI2010]星际竞速 / HYSBZ 1927 [Sdoi2010]星际竞速 (网络流,最小费用流)

    Luogu 2469 [SDOI2010]星际竞速 / HYSBZ 1927 [Sdoi2010]星际竞速 (网络流,最小费用流) Description 10年一度的银河系赛车大赛又要开始了.作为全 ...

  9. spring@Transactional的一点理解

    spring事务有7种传播行为,分别是: 1.PROPAGATION.REQUIRED:如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务,该设置是最常用的设置. 2.PROPAGAT ...

  10. 个推Node.js 微服务实践:基于容器的一站式命令行工具链

    作者:个推Node.js 开发工程师 之诺 背景与摘要 由于工程数量的快速增长,个推在实践基于 Node.js 的微服务开发的过程中,遇到了如下问题: 1. 每次新建项目都需要安装一次依赖,这些依赖之 ...