hibernate学习(一)helloWorld,配置文件

来源:互联网 发布:如何备考雅思 知乎 编辑:程序博客网 时间:2024/06/06 04:31

对象的持久化;

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

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

Hibernate:
–非常优秀、成熟的 ORM 框架。
–完成对象的持久化操作
–Hibernate 允许开发者采用面向对象的方式来操作关系数据库。
–消除那些针对特定数据库厂商的 SQL 代码
•myBatis:
–相比 Hibernate 灵活高,运行速度快
–开发速度慢,不支持纯粹的面向对象操作,需熟悉sql语
  句,并且熟练使用sql语句优化功能 

Hibernate开发步骤;

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

News.hbm.xml

<hibernate-mapping package="com.atguigu.hibernate.helloworld">    <class name="News" table="NEWS" dynamic-insert="true">            <id name="id" type="java.lang.Integer">            <column name="ID" />            <!-- 指定主键的生成方式, native: 使用数据库本地方式 -->            <generator class="native" />        </id>            <property name="title" not-null="true" unique="true"        index="news_index" length="50"        type="java.lang.String" column="TITLE" >        </property>                <property name="author" type="java.lang.String"        index="news_index">            <column name="AUTHOR" />        </property>                <property name="date" type="date">            <column name="DATE" />        </property>                <property name="desc"         formula="(SELECT concat(title, ',', author) FROM NEWS n WHERE n.id = id)"></property><property name="content"><column name="CONTENT" sql-type="text"></column></property><property name="picture" column="PICTURE" type="blob"></property>    </class>    </hibernate-mapping>

hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory>    <!-- 配置连接数据库的基本信息 --><property name="connection.username">root</property><property name="connection.password">1230</property><property name="connection.driver_class">com.mysql.jdbc.Driver</property><property name="connection.url">jdbc:mysql:///hibernate5</property><!-- 配置 hibernate 的基本信息 --><!-- hibernate 所使用的数据库方言 --><property name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</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/atguigu/hibernate/helloworld/News.hbm.xml"/></session-factory></hibernate-configuration>
测试类:HibernateTest

package com.atguigu.hibernate.helloworld;import java.sql.Date;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import org.hibernate.service.ServiceRegistry;import org.hibernate.service.ServiceRegistryBuilder;import org.junit.Test;public class HibernateTest {@Testpublic void test() {System.out.println("test...");//1. 创建一个 SessionFactory 对象SessionFactory sessionFactory = null;//1). 创建 Configuration 对象: 对应 hibernate 的基本配置信息和 对象关系映射信息Configuration configuration = new Configuration().configure();//4.0 之前这样创建//sessionFactory = configuration.buildSessionFactory();//2). 创建一个 ServiceRegistry 对象: hibernate 4.x 新添加的对象//hibernate 的任何配置和服务都需要在该对象中注册后才能有效.ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties())                            .buildServiceRegistry();//3).sessionFactory = configuration.buildSessionFactory(serviceRegistry);//2. 创建一个 Session 对象Session session = sessionFactory.openSession();//3. 开启事务Transaction transaction = session.beginTransaction();//4. 执行保存操作News news = new News("Java12345", "ATGUIGU", new Date(new java.util.Date().getTime()));session.save(news);//5. 提交事务 transaction.commit();//6. 关闭 Sessionsession.close();//7. 关闭 SessionFactory 对象sessionFactory.close();}}




0 0
原创粉丝点击