Bean的博客

明天的你会感激今天努力的自己。。。

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>

 
阅读更多
个人分类: Hibernate
想对作者说点什么? 我来说一句

hibernatez知识

2012年11月04日 447KB 下载

SSH基础知识Hibernate

2012年06月03日 1.38MB 下载

Hibernate基础知识演示代码

2017年01月25日 8.66MB 下载

Hibernate参考手册

2009年08月25日 15.43MB 下载

Hibernate 文档 适合初级编程

2009年05月20日 5KB 下载

hibernate 培训讲义

2008年12月05日 358KB 下载

hibernate基础

2014年04月17日 3.25MB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭