Hibernate基础知识

原创 2017年09月12日 23:35:23
Hibernate是对java领域的一款开源的ORM框架技术
Hibernate对JDBC进行了非常轻量级的对象封装

创建Hibernate的配置XML文件(固定格式)
<session-factory>
   <property  name="connection.uername">root</property>
   <property  name="connection.password">root</property>
   <property  name="connection.driver_class">com.mysql.jdbc.Driver</property>
   <property  name="connection.url">jdbc:mysql:///hibernate?useUnicode=true&amp;characterEncoding=UTF-8</property>
   <property  name="dialect">org.hibernate.dialect.MySQLDialect</property>


     <property  name="show_sql">true</property>
     <property  name="format_sql">true</property>
     <property  name="hbm2ddl.auto">create|</property>

      <mapping  resource="Student.hbm.xml"/>
</session-factory>


同过Hibernate API编写访问数据库的代码
 init(){
Configuration  config=new Configuration().configure();//创建配置对象
SweviceRegistry serviceRegistry=new ServiceRegistryBuilder().applaySettings(config.getProperties()).buildServiceRegistry();//创建服务注册对象
SessionFactory sessionFactory=config.buildSessionFactory(serviceRegistry);//创建回话工厂对象
Session session=sessionFactory.openSession();//会话对象
transaction=session.beginTrasaction();//打开事务
}


  destroy(){
transaction.commit();//提交事务
session.close();//关闭会话
sessionFactory.close();//关闭会话工厂

}





save()  delete(S)  update(S)  get(Students.class,1)   createQuery()






Session详解
如何获得session对象? 
1)openSession(session.close()手动关闭)
2)getCurrectSession(自动关闭)
注意: 如果使用getCurrectionSession需要在hibernate.cfg.xml文件中进行配置
  如果是本地事务(jdbc事务)
  <propertyname="hibernate.currect_session_context_class">thread</property>
  如果是全局事务(jta事务)
  <propertyname="hibernate.currect_session_context_class">jta</property>



映射xml文件
<id>//充当主键功能
  name="PropertyName"
  type=""
  column=""
  length=""
   <genterator class=""/>//主键生成策略   //assigned由java程序手工赋值
</id>





实体类中的某个属性属于用户自定义的类的对象
<property  name="sname"  type="java.util.String">
   <column  name="SNAME">
</property>
<component name="address"  class="Address">
  <property name="postcode"  column="POSTCODE"></property>
  <property name="phone"  column="PHONES"></property>
  <property name="address"  column="ADDRESS"></property>
</component>
</component>







get与load的区别
在不考虑缓存的情况下,get方法会在调用以后返回一个持久化对象
load返回一个代理对象,在使用对象属性的时候才会发出sql语句
当查询的数据库中不存在时候,get返回null,load抛出异常


<!--配置单向的一对多关联关系-->
<set name="属性名称"  table="对应数据库中表的名字">
   <!--指定关联的外键列-->
   <key  coiumn="gid"></key>
   <one-to-many   class="com.imooc.entity.Student">
</set>


<!--配置多对一的关联关系-->
<many-to-one  name="grade"  class="com.imooc.entity.Grade"   column="gid"> </many>





必须在XML中指定映射文件
<mapping  resource="com/imooc/entity/Grade.hbm.xml"/>













HibernateUtil工具类
package until;

import javax.imageio.spi.ServiceRegistry;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;


public class HibernateUtil {
private static SessionFactory sessionFactory;
private static Session session;
static{
Configuration  config=new Configuration().configure();//创建配置对象
StandardServiceRegistryBuilder ssrb=newStandardServiceRegistryBuilder().applySettings(config.getProperties());
StandardServiceRegistry ssr=ssrb.build();
sessionFactory=config.buildSessionFactory(ssr);
}
//获得回话工厂对象
public static SessionFactory getSessionFacory(){
return sessionFactory;
}
//获得Session对象
public static Session getSession(){
return (Session) sessionFactory.openSession();
}
//关闭Session
public static void closeSession(Session session){
if(session!=null){
session.close();
}
}
}



需要在一中创建一个多的Map对象  Map<Student> students=new HashMap<Student>();
<!-- 配置一对多关联关系 -->
<set name="一对多中一中Map属性的名称" table="一对多中多类对应的表的名称">
<key column="一对多中一中的主键的column"></key>
<one-to-many class="com.imooc.entity.Student一对多中多类的全名"/>
</set>


<!-- 配置一对多关联关系 -->
<set name="students" table="student">
<key column="gid"></key>
<one-to-many class="com.imooc.entity.Student"/>
</set>




多对一中需要在多中创建一个多的对象   private Grade  grade;  (javabean原则) 


<!-- 配置多对一关联关系 -->
<many-to-one name="grade" class="com.imooc.entity.Grade" column="gid" cascade="all"></many-to-one>

<!-- 配置多对一关联关系 -->
<many-to-one name="多对一中一对象的属性的名称" class="一对象的类的全名" column="外键的列名" cascade="all"></many-to-one>

 

Hibernate 基础知识

整体流程  1:通过configuration来读cfg.xml文件  2:得到SessionFactory 工厂  3:通过SessionFactory 工厂来创建Session实例  4:通过Se...
  • lmxmimihuhu
  • lmxmimihuhu
  • 2015年08月12日 13:49
  • 182

Hibernate基础知识

 Hibernate基础知识,谈到这里,首先最重要的是应该理解ORM,ORM是什么呢?3个单词的缩写,Object-Relation Mapping,既对象-关系映射的意思.这是一种模式,这种模式在单...
  • zengbo0710
  • zengbo0710
  • 2007年05月29日 15:12
  • 438

hibernate基础知识

配置hibernat的sessionfactory需要的参数:
  • ZTDLAN
  • ZTDLAN
  • 2014年11月04日 20:32
  • 156

Hibernate基础知识

 1.       Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行的轻量级的封装。它就是一个轻量ORM。为什么要用?因为在为了降低组件之间的耦合性,需要将业务逻辑和数据逻辑分离...
  • Tryitxi
  • Tryitxi
  • 2006年12月25日 21:10
  • 363

Hibernate基础知识

Hibernate基础知识       Hibernate基础知识,谈到这里,首先最重要的是应该理解ORM,ORM是什么呢?3个单词的缩写,Object-RelationMapping,既对象-...
  • avaunx
  • avaunx
  • 2008年12月15日 15:25
  • 185

Hibernate学习笔记之基础知识

一、简介 1.1 概念 PO(Persistent):持久化对象POJO(Plain Ordinary Java Object):普通的Java对象OOA:面向对象分析OOD:面向对象设计...
  • fanxiaobin577328725
  • fanxiaobin577328725
  • 2017年03月23日 17:07
  • 720

Web前端之基础知识

学习web前端开发基础技术需要掌握:HTML、CSS、Javascript 1.HTML是网页内容的载体 内容就是网页制作者放在页面上想要让用户浏览的信息,可以包含文字、图片、视频等。 2.C...
  • bear_huangzhen
  • bear_huangzhen
  • 2015年06月06日 23:00
  • 3712

PHP基础知识总结(w3c)

刚开始学习PHP,以后大家多多指教: 学习后台是一个漫长的过程,刚学PHP,总结了一小部分,有人会问为什么把W3C的东西拷贝出来分享呢? 我的回答是:W3C都是一些入门基础,很有实在意义,...
  • u013808667
  • u013808667
  • 2016年06月14日 11:30
  • 495

VC入门必备--基础知识(一)

VC入门必备--基础知识(一)首先我们要了解以下概念:应用程序(Application),他就是由指令(Instruction)组成的可以运行的文件。进程(Process),有时和应用程序的意思一样,...
  • huahuamoon
  • huahuamoon
  • 2007年12月20日 14:39
  • 1137

[总结]音视频基础知识·一

从2016/12/19开始学习音视频知识,原本笔记并不放到博客上,受@雷霄骅的影响,也想通这博客来加强学习。查看人群:音视频领域知识零基础,但想从事或研究音视频的开发人员 已学:1. 数学:高等数学...
  • bangdingshouji
  • bangdingshouji
  • 2017年01月06日 09:42
  • 818
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hibernate基础知识
举报原因:
原因补充:

(最多只允许输入30个字)