hibernate入门

一.什么是hibernate?

定义:

这里写图片描述

通俗的讲就是用来操作数据库的。它把数据库中的表,转换成java类,通过xml文件来实现类和表之间的映射。这样的好处在于,可以面向对象的思想来操作数据库。

二.与jdbc的区别

可能有些人会觉得这个框架没什么用,认为已经有了jdbc连接数据库了,为什么还要用这个框架去连接数据库。当然有这个框架自然有用处的。jdbc也是有缺点的,比如效率就低,每一次请求,打开连接、发送sql语句,在数据库中解析sql语句等需要消耗大量的资源,重复性代码特别多, 每一次都需要关闭connection,statement,rs,没有做到面向对象编程,没有做到数据缓存(就是把页面上的数据缓存到本地磁盘上,当应用程序再次访问的时候,直接从磁盘上读取数据就可以了)等缺点。jdbc有的这些缺点,当然hibernate框架就完善了它。

三.hibernate有些什么?

1. hibernate.cfg.xml配置文件:主要写是链接数据库的四个信息,指定加载哪个数据库,mysql还是oracle等,驱动器,数据库用户名和密码等一些其他配置信息。

2. xxx.hbm.xml配置文件:hbm指的是hibernate的映射文件,在 hibernate.cfg.xml中管理,在项目启动的时候加载到内存,提供关于将对象持久化到关系数据库中的信息。简单来说就是你要在数据库怎么样建表参照这个配置文件。

3. hibernate的增删该查,对数据库数据的增加,删除,修改,查找,在java里操作。

4. hibernate的三种状态:transient(瞬时状态),persistent(持久化状态)以及detached(离线状态)。瞬时状态就是刚new出来一个对象,还没有被保存到数据库中,持久化状态就是已经被保存到数据库中,离线状态就是数据库中有,但是session(缓存)中不存在该对象。当然他们之间也可以互相转换。

5. 一对多和多对多的关系:就是数据库中的表之间有一对多和多对多的关系。举个简单例子:宿舍和学生是一对多的关系,一个宿舍住多个学生,查询宿舍列表的时候,假如一个宿舍里面住着三个学生,当我查询宿舍列表的时候,就也会有住这宿舍的学生信息。还有一些其他关系也不多说了。

6. hibernate还有很多种查询方式,我也不细讲了。

7. annotation:在hibernate中,通常配置对象关系映射关系有两种,一种是基于xml的方式,另一种是基于annotation的注解方式,就是annotation里的一些标签可以代替xml配置文件,你也就不需要去配置xxx.hbm.xml,感觉annotation可以少写一些配置文件代码要好点,看个人喜好吧。

当然还有一些细的知识点我也不一 一列出来了。

四.hibernate怎么运行的?

1 通过传过来的对象,得到类名称,然后根据这个名称,得到该目录下的对应的xxx.hbm.xml文件。
2 解析xxx.hbm.xml文件,生成相应的表。
3 应用反射,得到类中的相关字段的值。
4 进行保存
举个例子如定义一个user对象,有个属性name,然后有一个user.setName(Name)方法,然后session.save(user);(保存到数据库)trans.commit();(提交),session.close();就可以了。

五.hibernate例子

第一步,先配置hibernate.cfg.xml:

<hibernate-configuration>
    <session-factory name="mySessionFactory">
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>//MySQL驱动类
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate</property>//MySQL连接端口号(3306)与数据库(hibernate)
        <property name="hibernate.connection.username">root</property>//MySQL用户名   
        <property name="connection.password">123456</property>//MySQL用户密码

        <property name="hibernate.show_sql">true</property>//显示hibernate对数据库操作语句
        <property name="hibernate.format_sql">true</property>//格式化Hibernate的SQL输出语句
        <property name="hibernate.hbm2ddl.auto">update</property>//自动创建|更新|验证数据库表结构。如果不是此方面的需求建议set value="none"
常用属性有create、update

<mapping resource="com/hibernate/Student.hbm.xml"/>

</session-factory> </hibernate-configuration>

第二步,配置Student.hbm.xml文件:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
    <class name="com.hibernate.Student">
        <id name="id" />
        <property name="name" />
        <property name="age" />
    </class>

</hibernate-mapping>

第三步,创建Student.java:

package com.hibernate;

public class Student {
    private Integer id; //原先为int类型,但经过同学的提醒改成了Integer类型
    private String name;
    private Integer age;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }


}

第四步,创建Test.java

package com.hibernate;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

public class Test {
    public static void main(String[] args) {
        Student s = new Student();
        s.setId(1);
        s.setName("zhangsan");
        s.setAge(8);

        SessionFactory sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
        Session session = sessionFactory.getCurrentSession();
        session.beginTransaction();
        session.save(s);
        session.getTransaction().commit();

    }
}

运行效果:

这里写图片描述

六.hibernate心得

刚开始也是对这个框架有疑惑的,为什么有了JDBC访问数据库,还要有这个框架出现,当然每个东西自然有自己的用处,前面我也讲了一些它们的区别,配置也是差不多的套路,不要去记,要写的时候去拷贝修改就行了,hibernate每个东西可以不用去记,知道有这个东西就行,最重要还是会用,我感觉用多了,也差不多记住常用的了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值