Hibernate基础知识

简介: Hibernate基础知识

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>


目录
相关文章
|
6月前
|
SQL Java 数据库连接
Hibernate基本概念 (2)
Hibernate基本概念 (2)
|
6月前
|
SQL Java 数据库连接
Hibernate基本概念 (3)
Hibernate基本概念 (3)
|
6月前
|
存储 Java 数据库连接
Hibernate基本概念
Hibernate基本概念
|
SQL XML Java
一篇文章让你马上入门Hibernate
一篇文章让你马上入门Hibernate
|
5月前
|
SQL Java 数据库连接
深入浅出Hibernate总结
深入浅出Hibernate总结
|
6月前
|
XML SQL 缓存
Hibernate基本概念 (4)
Hibernate基本概念 (4)
|
6月前
|
Java 数据库连接
Hibernate基本概念 (5)
Hibernate基本概念 (5)
|
SQL Java 数据库连接
hibernate入门学习笔记
hibernate入门学习笔记
83 0
|
SQL Java 数据库连接
Hibernate入门这一篇就够了(三)
Hibernate入门这一篇就够了
120 0
Hibernate入门这一篇就够了(三)
|
Oracle Java 关系型数据库
Hibernate入门这一篇就够了(四)
Hibernate入门这一篇就够了
149 0
Hibernate入门这一篇就够了(四)