Hibernate学习笔记

一、什么是Hibernate?

Hibernate是一个ORM(Object Relationship Mapping:对象关系映射)框架,即hibernate提供了Java Beans与数据库表-字段映射的功能。Java beans类对应表,类的成员变量对应表的字段名,成员变量的值对应字段的值。

注意:

(1)JavaBeans一般不使用继承(当然,hibernate提供了继承对应的功能)。

(2)JavaBeans通过使用集合的方式,来实现表与表之间的关联关系(一对一,一对多,多对多之类),hibernate也提供相应的方法实现表的关联关系,这在接下来会讲到。

二、用hibernate实现helloworld

步骤一:配置hibernate.cfg.xml(主要配置如下)

<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.url">数据库连接地址</property>
        <property name="hibernate.connection.driver_class">数据库连接驱动</property>
        <property name="hibernate.connection.username">数据库连接用户名</property>
        <property name="hibernate.connection.password">数据库连接密码</property>
        <!-- mapping配置了数据需要的映射信息,这个文件放在对应包下,反映了JavaBean的映射 -->
        <mapping resource="com/test/withXml/entity/User.hbm.xml"></mapping>
    </session-factory>
</hibernate-configuration>

步骤二:创建XXX类(这是一个JavaBean)与相应的XXX.hbm.xml文件

我这里定义为User类(User有id,name,location,data这四个属性),那么相应的,创建User.hbm.xml文件(主要配置如下)。

<hibernate-mapping package="这里写包的名称">
    <class name="类的名称,如果上一行没有package的话,这里需要是全类名" table="数据库中的表名">
        <--! id是整个表的主键,hibernate建议使用不参与业务逻辑的属性作为主键 -->
        <id name="主键属性名" type="属性的类型">
            <column name="在表中对应的字段名">
            <--! 这里设置了id增长的模式,native表示使用数据库自身的增长模式 -->
            <generator class="native">
        </id>
        <property name="普通属性名" type="属性的类型" column="字段名"></property>
    </class>
</hibernate-mapping>

步骤三:在测试类中,写出相应代码,完成数据库的操作,主要代码如下。

@Test
public void test(){
    //1.获取配置文件信息
    Configuration configuration = new Configuration.configure();
    //2.创建sessionFactory
    //2.1在hibernate4.3之后,需要在ServiceRegistry中进行注册
    ServiceRegistry serviceRegistry = new StrandardServiceRegistryBuilder.applySettings(configuration.getProperties).build();
    //2.2使用configuration创建工厂
    SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);
    //3.获取session
    Session session = sesssionFactory.openSession();
    //4.开启事务
    Transaction transaction = session.beginTransaction();
    //5.执行操作
    session.save(Object object);
    //6.提交事务
    transaction.commit();
    //7.关闭事务
    transaction.close();
    //8.关闭session
    session.close();
}

三、hibernate框架中,对象的3种状态

临时状态:程序员通过new或者其他方法,在程序中创建出来的对象,此时处于临时状态。

持久状态:将程序中的对象保存至数据库中,便形成了持久状态。(session一级缓存中的对象,也属于持久状态)

游离状态:当我们从数据库中取出来的对象,称为游离状态,即使session关闭了,也属于游离状态。

四、hibernate中session的常用方法

save(object)保存对象到数据库中

get(object.class,id)从数据库中取出对象

update(object)根据主键信息更新对象

delete(object)根据主键删除对象,即如果除主键外其他成员变量不同也没有影响

saveOrUpdate(object)根据主键信息,如果主键存在,就更新,主键不存在,就save

flush()将一级缓存中的数据冲进数据库中,默认在事务提交的时候使用

reflush()将数据库中对应的数据冲进一级缓存中

clear()清除一级缓存中的数据

close()关闭session

evict(Object)清除一级缓存中指定的对象

save与persist区别:save会立即执行,并返回对象的主键;persist不会把主键填入数据库中,只有当flush的时候才会填入。

update与merge区别:当修改的数据id找不到的时候,update会报错,而merge却会把数据新建id存入数据库。

五、多表映射

https://blog.csdn.net/qq_38977097/article/details/81355840

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值