hibernate学习整理1

来源:互联网 发布:源码下载站网站源码 编辑:程序博客网 时间:2024/06/05 08:21
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将 POJO(java对象)与数据库表建立映射关系,是一个全自动的ORM框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库

ORM:对象关系映射(Object Relational Mapping,简称ORM)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的术。

对象关系映射(Object Relational Mapping,简称ORM)是通过使用描述对象和数据库之间映射的元数据,将java程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式。 这也同时暗示着额外的执行开销;然而,如果ORM作为一种中间件实现,则会有很多机会做优化,而这些在手写的持久层并不存在。 更重要的是用于控制转换的元数据需要提供和管理;但是同样,这些花费要比维护手写的方案要少;而且就算是遵守ODMG(ODMG是支持以对象形式对数据建模的数据库管理系统(DBMS))规范的对象数据库依然需要类级别的元数据。

对象-关系映射(Object/Relation Mapping,简称ORM),是随着面向对象的软件开发方法发展而产生的。面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,对象-关系映射(ORM)系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。

数据持久化将内存中的对象转换到数据库中(硬盘中)
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
配置参考:http://www.blogjava.net/yxhxj2006/archive/2012/06/30/381861.html 
1.配置使用hibernate  添加hibernate的jar包
   <dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>4.3.5.Final</version>
  </dependency>
 <!-- 同时添加数据库驱动 -->
     <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.18</version>
    </dependency>

2.下面配置xml文件
可以参考:http://www.cnblogs.com/pepcod/archive/2013/02/19/2917376.html 
<!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="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/数据库名</property>
        <property name="hibernate.connection.username">root</property> 
              <property name="hibernate.connection.password">root</property>
        <property name="Connection.useUnicode">true</property> 
    <property name="connection.characterEncoding">utf8</property>                   
             <!-- 方言 --> 
             <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
             <!-- 控制台能够输出SQL语句 --> 
             <property name="hibernate.show_sql">true</property>
              <!-- 帮你生成对应的表,或者是表的更新 --> 
             <property name="hibernate.hbm2ddl.auto">update</property> 
    </session-factory>    
    </hibernate-configuration> 

3. 建立对应实体对象并且对实体进行XML文件配置建立学生类Student  创建 Student.hbm.xml  一个类对应的一个xml文件
可以参考:http://pmroad.blog.51cto.com/9744929/1591245
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- 对哪个包下面的实体进行映射 -->
<hibernate-mapping package="com.model">
    <class name="Student" table="tt_student">
       <id name="id" column="sid">
          <!-- 主键策略的配置 -->
        <generator class="native"></generator>
       </id>
       <property name="sname"></property>
    </class>
</hibernate-mapping>

4.将映射文件加入到sessionfactory配置中
<mapping resource="com/model/Student.hbm.xml" />

5.使用hibernate 一些接口 将数据持久化  (1.读取配置文件 2.创建SessionFactory 3.创建session  4. 在session当中做CRUD的操作)
//读取配置文件,创建sessionFactory工厂  
public class Test {
public static void main(String[] args) {
//读取配置文件,创建sessionFactory工厂
Configuration  config  = (Configuration) new Configuration().configure();
//config.buildSessionFactory()  可以使用,但不建议 
// 注册服务
ServiceRegistry  sr =  new StandardServiceRegistryBuilder().applySettings(config.getProperties()).build();
//创建工厂
SessionFactory  sf = config.buildSessionFactory(sr);
//创建session 
Session  session  = sf.openSession();
//在session 中做crud的操作  数据进行持久画
//通过session 开启事务
session.beginTransaction();
//-----------------CRUD操作
Student s= new Student();
s.setSname("wwj");
session.save(s);
//-----------------CRUD操作
//事务的提交
session.getTransaction().commit();
//关闭session
session.close();
//关闭工厂
sf.close();
 
}
}
6. 测试
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
简单做一下注解的方式
可以参考:http://blog.sina.com.cn/s/blog_9bbe4e610101mgtd.html
1.
@Entity
@Table(name="t_teacher")
public class Teacher {
  private  int tid;
  private  String tname;
//一定是在get方法上面,可以在属性上,但不推荐
@Id
//表示主键
@GeneratedValue(generator="ss_native")//自增长
@GenericGenerator(name="ss_native",strategy="native")//
public int getTid() {
return tid;
}
public void setTid(int tid) {
this.tid = tid;
}
//列明
@Column(name="t_name")
public String getTname() {
return tname;
}
public void setTname(String tname) {
this.tname = tname;
}
  
}
注意:对于属性的注解 一定是在get方法上面
2.配置注解的类到config配置文件中
<mapping class="com.model.Teacher"/>
原创粉丝点击