Hibernate 起步

11 篇文章 0 订阅
5 篇文章 0 订阅

Hibernate 起步

标签: Java Hibernate


环境

//MySql:
mysql> select version();
+------------+
| version()  |
+------------+
| 5.7.17-log |
+------------+
1 row in set
//Eclipse:
Eclipse Java EE IDE for Web Developers.

Version: Oxygen Release (4.7.0)
Build id: 20170620-1800

Helleoworld准备

  • Eclipse Marketplacehibernatetools
  • 导入Hibernate必须的jar包
antlr-2.7.7.jar
classmate-1.3.0.jar
dom4j-1.6.1.jar
hibernate-commons-annotations-5.0.1.Final.jar
hibernate-core-5.2.10.Final.jar
hibernate-jpa-2.1-api-1.0.0.Final.jar
jandex-2.0.3.Final.jar
javassist-3.20.0-GA.jar
jboss-logging-3.3.0.Final.jar
jboss-transaction-api_1.2_spec-1.0.1.Final.jar
  • 加入数据库驱动的jar包
mysql-connector-java-5.0.8-bin.jar

书写代码

创建Hibernate配置文件

这里写图片描述

<!-- 配置连接数据库的信息 -->
        <property name="connection.username">root</property>
        <property name="connection.password">102559</property>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3396/goods?useUnicode=true&amp;characterEncoding=utf8</property>

        <!-- 配置 hibernate 的基本信息 -->
        <!-- hibernate 所使用的数据库方言 (支持事务) -->
        <property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
        <!-- 执行操作时是否在控制台打印 SQL 语句-->
        <property name="show_sql">true</property>
        <!-- 是否格式化输出 SQL 语句 -->
        <property name="format_sql">true</property>

        <!-- 指定生成数据表的策略 -->
        <property name="hbm2ddl.auto">update</property>

        <!-- 指定关联的 .hbm.xml 文件 -->
        <mapping resource="com/ncu/hibernate/helloworld/News.hbm.xml"/>

创建持久化类

  • 提供一个无参的构造器:使Hibernate可以使用Constructor.newInstance() 来实例化持久化类
  • 提供一个标识属性(identifier property): 通常映射为数据库表的主键字段. 如果没有该属性,一些功能将不起作用,如:Session.saveOrUpdate()
  • 为类的持久化类字段声明访问方法(get/set): Hibernate对JavaBeans 风格的属性实行持久化。
  • 使用非 final 类: 在运行时生成代理是 Hibernate 的一个重要的功能. 如果持久化类没有实现任何接口, Hibnernate 使用 CGLIB 生成代理. 如果使用的是 final 类, 则无法生成 CGLIB 代理.
  • 重写 eqauls 和 hashCode 方法: 如果需要把持久化类的实例放到 Set 中(当需要进行关联映射时), 则应该重写这两个方法
public class News {
    public News() {}


    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getAuthor() {
        return author;
    }
    public void setAuthor(String author) {
        this.author = author;
    }
    public Date getDate() {
        return date;
    }
    public void setDate(Date date) {
        this.date = date;
    }
    private int id;
    private String title;
    private String author;
    private Date date;
}

Hibernate 不要求持久化类继承任何父类或实现接口,这可以保证代码不被污染。这就是Hibernate被称为低侵入式设计的原因

创建对象-关系映射文件

Hibernate 采用 XML 格式的文件来指定对象和关系数据之间的映射. 在运行时 Hibernate 将根据这个映射文件来生成各种 SQL 语句
映射文件的扩展名为 .hbm.xml

右键SRC,选择NEW一个Hibernate XML Mapping file(hbm.xml)文件
这里写图片描述

通过Hibernate API编写访问数据库的代码

public class HibernateTest {

    private SessionFactory sessionFactory;
    private Session session;
    private Transaction transaction;

    @Before
    public void init() {
        //// 创建服务注册对象
        ServiceRegistry registry = 
                new StandardServiceRegistryBuilder().configure().build();
        // 创建会话工厂
        sessionFactory =
                new MetadataSources(registry).buildMetadata().buildSessionFactory();

        //创建一个Session对象
        session = sessionFactory.openSession();
        //开启事务
        transaction = session.beginTransaction();
    }
    @Test
    public void test() {
        News news = session.get(News.class, 1);
        System.out.println(news);
    }
    @After
    public void destroy() {
        //提交事务 
        transaction.commit();
        //关闭Session和SessionFactory
        session.close();
        sessionFactory.close();
    }
}

持久化

  • 狭义的理解,“持久化”仅仅指把对象永久保存到数据库中
  • 广义的理解,“持久化”包括和数据库相关的各种操作:
    • 保存:把对象永久保存到数据库中。
    • 更新:更新数据库中对象(记录)的状态。
    • 删除:从数据库中删除一个对象。
    • 查询:根据特定的查询条件,把符合查询条件的一个或多个对象从数据库加载到内存中。
    • 加载:根据特定的OID,把一个对象从数据库加载到内存中。

为了在系统中能够找到所需对象,需要为每一个对象分配一个唯一的标识号。在关系数据库中称之为主键,而在对象术语中,则叫做对象标识(Object identifier-OID).

ORM

ORM(Object/Relation Mapping): 对象/关系映射
- ORM 主要解决对象-关系的映射

面向对象概念面向关系概念
对象表的行
属性表的列

- ORM的思想:将关系数据库中表中的记录映射成为对象,以对象的形式展现,程序员可以把对数据库的操作转化为对对象的操作。
- ORM 采用元数据来描述对象-关系映射细节, 元数据通常采用 XML 格式, 并且存放在专门的对象-关系映射文件中.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值