前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hibernate基础知识

Hibernate基础知识

作者头像
CBeann
发布2023-12-25 16:07:01
1050
发布2023-12-25 16:07:01
举报
文章被收录于专栏:CBeann的博客CBeann的博客

Hibernate是对java领域的一款开源的ORM框架技术

Hibernate对JDBC进行了非常轻量级的对象封装

创建Hibernate的配置XML文件(固定格式)

代码语言:text
复制
   <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编写访问数据库的代码

代码语言:text
复制
   ?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>   
本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-03-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com