一、持久层框架(Hibernate)一

一、Hibernate

  使用JDBC做数据库相关功能开发会做很多重复性的工作,创建连接,关闭连接,把字段逐一映射到属性中等。Hibernate把这些进行封装起来,使得数据库访问变得轻松简单。

1、创建数据库,数据表

--创建数据库
create database test;
--使用数据库
use test;
--创建数据表
CREATE TABLE product_table (
  id int(11) NOT NULL AUTO_INCREMENT,
  name varchar(30) ,
  price float ,
  PRIMARY KEY (id)
) DEFAULT CHARSET=UTF8;

2、创建一个java project,然后倒入hibernate所以来的jar包

导入jar包:右键project-->property-->java build path-->libaries-->add external jars

由于hibernate不同版本之间的jar包存在兼容性问题,应该使用对应的版本jar包。

3、创建实体类Bean

  实体类用于映射数据库中的表product_table

package com.demo.pojo;

public class Product{
    private int id;
    private String name;
    private float price;

    //实现属性对应的getter/setter方法
    public int getId(){
        return id;
    }
    public void setId(int id){
        this.id=id;
    }
    public String getName(){
        return name;
    }
    public void setName(String name){
        this.name=name;
    }
    public float getPrice(){
        return price;
    }
    public void setPrice(float price){
        this.price=price;
    }
}

4、配置Product.hbm.xml

  这个xml用来映射Product类对应数据库中的product_table表

文件名Product.hbm.xml,P一定要大写,和类名保持一致

<!--表示类Product对应表product_table-->
<class name="Product" table="product_table">
<!--表示属性id,映射表字段id-->
<id name="id" column="id">
    <generator class="native"></generator><!--id的自增方式采用数据库本地方式-->
</id>

具体的配置的映射xml文件如下:

<?xml version="1.0"?>
<!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.how2java.pojo">
    <class name="Product" table="product_">
        <id name="id" column="id">
            <generator class="native">
            </generator>
        </id>
        <property name="name" />
        <property name="price" />
    </class>

</hibernate-mapping>

5、配置hibernate.cfg.xml

  在src目录下创建hibernate.cfg.xml,用来配置访问数据库要用到的驱动,url,账号密码,数据库方言等 

<property name="dialect">org.hibernate.dialect.MySQLDialect</property>

数据库方言含义:因为在代码层面,开发的时候并不会关心底层到底使用Oracle还是用MySQL,写得代码都是一样的。可是Oracle和MySQL所用的sql语句的语法是有写区别,那么这件事就交给hibernate来做了,这时候告诉hibernate底层用到的是什么数据库,它才知道用什么样的方言去对话。

<property name="current_session_context_class">thread</property>

hibernate事务管理方式,也就是说每个线程就是一个事务。

<property name="show_sql">true</property>

表示是否在控制台显示执行的sql语句

<property name="hbm2ddl.auto">update</property>

表示是否会自动更新数据库的表结构,其实不需要创建表,因为hibernate会自动创建表结构,就是因为有这个配置属性。

<mapping resource="com/demo/pojo/Product.hbm.xml" />

表示hibernate会去识别Product这个实体类

6、创建一个测试类TestHibernate

创建一个Product对象,然后通过hibernate把这个对象,插入到数据库中。

hibernate执行的基本步骤是这样的:

6.1、首先获取SessionFactory

6.2、通过SessionFactory获取一个Session

6.3、在Session基础上开启一个事务

6.4、通过调用Session的save方法把对象保存到数据库

6.5、提交事务

6.6、关闭Session

6.7、关闭SessionFactory

package com.demo.test;

import org.hibernagte.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

import com.demo.pojo.Product;

public class TestHibernate{
    public static void main(String[] args){
        SessionFactory sf=new Configuration.configure().buildSessionFactory();//建立SessionFactory
        Session s=sf.openSession();//通过SessionFactory获取一个Session并打开
        s.beginTransaction();//在Session的基础上打开事务
        Product p=new Product();//创建Product对象
        p.setName("demo");
        p.setPrice(100);
        s.save(p);//调用Session的save()方法保存对象的数据

        s.getTransaction().commit();//提交事务
        s.close();//关闭Session
        sf.close();//关闭SessionFactory
    }
}

基本原理:应用程序通过Hibernate把一个Product对象插入到数据库的product_table中,首先通过配置文件hibernate.cfg.xml提供链接数据库的基本信息,账号,密码,数据库ip,端口等信息,建立数据库连接,然后通过Product.hbm.xml提供的对象与表的映射关系,映射到数据库表中去。

原文地址:https://www.cnblogs.com/drq1/p/8510191.html

时间: 2024-08-05 21:38:26

一、持久层框架(Hibernate)一的相关文章

持久层框架hibernate相关概念

hibernate为全自动的持久层框架(framework): 1.作用:把内存中的活跃对象永远的保存在关系型数据库中. 2.O/R/M原理:O-->object 对象,R---> relational关系型数据库,M--->mapping映射 为了解决应用程序中的对象和关系型数据库中的表的不匹配而提出的一个解决方案. 3.新版本hibernate4中怎么得到session工厂从而创建连接对象 Configuration cfg = new Configuration().configu

持久层框架--hibernate(3)

一:关联关系 1.关联关系的方向可分为单向关联和双向关联 单向关联:假设存在两张表province表和City表,如果在应用的业务逻辑中,仅需要每个province实例能够查询得到其对应的City实例,而City实例并不需要查询得到其对应的province实例:或者反之. 双向关联:既需要每个province实例能够查询得到其对应的City实例,City实例也需要查询得到其对应的province实例. 2.关联的数量,根据拥有被关联对象的个数确定 多对一(many to one):如用户和组 学

持久层框架--hibernate(2)

一 .持久化对象的oid 映射为数据库表的主键,唯一不重复 当数据库表中的主键为代理主键时,持久化对象的oid 要交给hibernate来维护(避免重复) 当数据库中表的主键为自然主键时,持久化对象的oid 要由程序本身来维护 主键生成策略(生成持久化oid的方式): 1. increment 带走+1 由hibernate来维护oid的值, 优点:与底层数据库类型无关 缺点:只适用于单线程对数据库的访问 2. identity +1带走 优点:适合多用户访问 缺点:由于+1操作由数据库完成,所

持久层框架--hibernate(4)

一.多对多双向关联 以Student和Course为例,一个学生可以选多门课程,一门课程也可以被多个学生选取 持久化类Student 1 持久化类Student.java 2 3 package com.edu.many2many; 4 5 import java.util.HashSet; 6 import java.util.Set; 7 8 public class Student { 9 10 private Integer id; 11 private String name; 12

Hibernate数据库持久层框架

Hibernate是一种Java语言下的对象关系映射解决方案. 它是使用GNU宽通用公共许可证发行的自由.开源的软件.它为面向对象的领域模型到传统的关系型数据库的映射,提供了一个使用方便的框架.Hibernate也是目前Java开发中最为流行的数据库持久层框架,现已归JBOSS所有. 它的设计目标是将软件开发人员从大量相同的数据持久层相关编程工作中解放出来.无论是从设计草案还是从一个遗留数据库开始,开发人员都可以采用Hibernate. Hibernate不仅负责从Java类到数据库表的映射(还

[笔面] Hibernate等持久层框架应用面试

Hibernate等持久层框架应用 1.Hibernate框架的工作流程a. 读取并解析配置文件b.读取并解析映射信息,创建SessionFactoryc.打开Sesssiond.创建事务Transatione.持久化操作f.提交事务g.关闭Sessionh.关闭SesstionFactory 2.Hibernate框架中的核心接口有哪些,这些接口的具体功能是什么?核心接口有:session,sessionFactory,transaction,query,configuration.a) Se

Hibernate: 数据持久层框架

Hibernate 是一种Java语言下的对象关系映射解决方案. 它是使用GNU宽通用公共许可证发行的自由.开源的软件.它为面向对象的领域模型到传统的关系型数据库的映射,提供了一个使用方便的框架.Hibernate也是目前Java开发中最为流行的数据库持久层框架,现已归JBOSS所有.基于LGPL V2.1协议发布. 它的设计目标是将软件开发人员从大量相同的数据持久层相关编程工作中解放出来.无论是从设计草案还是从一个遗留数据库开始,开发人员都可以采用Hibernate. Hibernate不仅负

MyBatis持久层框架使用总结

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis . 2013年11月迁移到Github,MyBatis的Github地址:https://github.com/mybatis/mybatis-3. iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架.iBATIS提供的持久层框架包括SQL Maps和Dat

JPA规范及其它持久层框架

JPA规范及其它持久层框架 JPA是一种规范,而hibernate是JPA的一种实现 JPA全称为Java Persistence API ,Java持久化API是Sun公司在Java EE 5规范中提出的Java持久化接口.JPA吸取了目前Java持久化技术的优点,旨在规范.简化Java对象的持久化工作.使用JPA持久化对象,并不是依赖于某一个ORM框架. JPA是目前比较流行的一种ORM技术之一,所以他拥有ORM技术的各种特点,当然他还有自己的一些优势: 1 标准化 JPA 是 JCP 组织

MyBatis持久层框架使用总结 转载

MyBatis持久层框架使用总结 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis . 2013年11月迁移到Github,MyBatis的Github地址:https://github.com/mybatis/mybatis-3. iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架.iBATIS提供的持久