zoukankan      html  css  js  c++  java
  • Hibernate学习---基本介绍+作用+配置

    从今天开始重新学习(以前学的太匆忙)Hibernate,这篇文章主要就一下几点进行讲解和说明:

    • Hibernate的基本介绍
    • Hibernate的作用
    • Hibernate基本配置

    Hibernate的基本介绍:

    Hibernate最开始的作者是Gavin King,是澳大利亚人,在工作中因为不满EJB的种种不足,而自行花费两年的时间开发出最原始的Hibernate,后来被Jboss收购了Gavin King所在的公司(最主要是看上了Hibernate),后来的Jboss被红帽收购,所以现在Hibernate为红帽旗下的产品。

    讲到了Hibernate怎么能不提一下什么叫做JPA(Java persistence API),是JavaEE5标准的ORM接口标准,是一种规范和接口,并不是ORM的具体实现,用于实现这一套规范的框架有很多,其中Hibernate就是一个这样的框架。

    JPA,ORM,Hibernate之间的关系:
    ORM是一种思想,JPA是这种思想的规范约束,Hibernate是这种思想和规范的具体实现。

    Hibernate的作用:

    说到了作用就自然而然的想到了Hibernate的工作大体工作模式:
    这里写图片描述
    这个是Hibernate的一个简单结构。

    Hibernate是一款持久化框架(ORM)即Object Relationship Mapping,对JDBC进行了轻量级的封装,他能够自动根据我们的需求,能够将我们的实体类映射到数据库表中而进行存储。
    这就是它的作用。

    Hibernate基本配置

    下面我们就来说说Hibernate的具体配置吧:
    首先,我们去官网找到相应的jar包(我使用的是5.0.1)http://hibernate.org/

    然后将下载好的安装包解压:
    这里写图片描述
    打开lib,选中required中所有jar包,optional里面c3p0所有jar包,optional的ehcache下slf4j-api-1.6.1.jar,jpa-metamodel-generator下所有jar包,jpa下所有jar包,当然还需要我们的数据库驱动jar包,根据我们使用的数据库自行选定。
    选完过后的jar包大概是这样的:
    这里写图片描述

    将这些jar包放到我们新建的项目中(我创建的是java project,因为Hibernate是对数据库底层的操作,不需要建立web project)。
    在项目中创建lib文件夹,将jar包放入,并加入到我们路径中。

    接下来就是配置文件了:
    我们需要配置两个配置文件:
    ①/TestHibernate/src/hibernate.cfg.xml
    ②/TestHibernate/src/entity/Student.hbm.xml
    这两个文件所在的位置大家也看到了,hibernate.cfg.xml在src下,Student.hbm.xml和实体类放在同一个包下。

    hibernate.cfg.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC
    	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    	"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
    
    	<session-factory>
    		<!--DB连接四要素  -->
    		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    		<property name="hibernate.connection.url">jdbc:mysql:///oa?useUnicode=true&amp;characterEncoding=UTF8</property>
    		<property name="hibernate.connection.username">root</property>
    		<property name="hibernate.connection.password">123</property>
    		
    		<!-- hibernate会根据你所指定生成sql语句,但是要指定数据库的版本  配置从core jar包里面找 -->
    		<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
    		
    		<!-- 数据源(DBCP):数据库连接池 -->
    		<property name="hibernate.connection.provider_class">org.hibernate.c3p0.internal.C3P0ConnectionProvider</property>
    		
    		<!-- 配置当前session上下文  保证同一个线程中获取的session是同一个-->
    		<property name="hibernate.current_session_context_class">thread</property>
    		
            <!-- 自动建表  里面的值也可以是create,但是每次都会新建一个表,影响效率,update在原有的表上面添加信息 -->
    		<property name="hibernate.hbm2ddl.auto">update</property>
    		
    		<!-- 显示sql -->
    		<!-- <property name="hibernate.show_sql">true</property> -->
    		
    		<!-- 格式化sql -->
    		<!-- <property name="hibernate.format_sql">true</property> -->
    		
    		<!-- 注册映射文件 -->
    		<mapping resource="entity/Student.hbm.xml"/>
    	</session-factory>
    
    
    </hibernate-configuration>
    

    Student.hbm.xml:

    <?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>
    
    	<!-- 作用:
    		实体类到表的映射
    		属性到字段的映射
    	 -->
    	<class name="entity.Student" table="t_student">
    		<id name="id" column="tid">
    			<generator class="native"/>
    		</id>
    		<property name="name" column="t_name"/>
    		<property name="age" column="t_age"/>
    		<property name="score" column="t_score"/>
    	
    	</class>
    
    </hibernate-mapping>
    

    者两个配置文件的dtd约束在我们我Hibernate核心jar包里面有:
    这里写图片描述
    具体的配置和解释配置文件里面我都有具体的介绍。

    接下来需要我们再entity包下建立对应的实体类:

    package entity;
    
    
    /**
     * @author:MindMrWang
     *2017年11月15日
     *:function:学生实体类
     */
    public class Student {
    	Integer id;
    	String name;
    	int age;
    	double score;
    	
    	public Student() {
    	}
    
    	public Student(String name, int age, double score) {
    		super();
    		this.name = name;
    		this.age = age;
    		this.score = score;
    	}
    
    	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 int getAge() {
    		return age;
    	}
    
    	public void setAge(int age) {
    		this.age = age;
    	}
    
    	public double getScore() {
    		return score;
    	}
    
    	public void setScore(double score) {
    		this.score = score;
    	}
    }
    
    

    接下来使我们的测试文件:

    package Test;
    /**
     * @author:MindMrWang
     *2017年11月16日
     *:function:测试hibernate
     */
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.Configuration;
    import entity.Student;
    public class Test1 {
    	public static void main(String[] args) {
    		//加载配置文件
    		Configuration config = new Configuration().configure();
    		//根据配置文件创建会话工厂
    		SessionFactory factory = config.buildSessionFactory();
    		//根据会话工厂创建会话
    		Session session = factory.getCurrentSession();
    		//创建一个事物对象
    		Transaction tx = session.beginTransaction();
    		//new 一个学生对象
    		Student student = new Student("张三",19,99);
    		//将对象持久化到数据表中
    		session.save(student);
    		//提交事务
    		tx.commit();
    		//关闭会话
    		session.close();
    		//关闭工厂
    		factory.close();
    	}
    }
    

    然后打开我们的数据库可视化工具就可以看见我们在hibernate.cfg.xml中指定的t_student表。
    本篇文章就介绍到这里了,未完待续。

    如有错误,欢迎指正。

  • 相关阅读:
    tableviewCell折叠状态1
    iOS中--NSArray调用方法详解 (李洪强)
    NSNumber的使用
    Fedora13下编译busybox-1.15.0出现can not find lcrypt错误
    【独立开发人员er Cocos2d-x实战 013】Cocos2dx 网络编程实战之星座运势
    JAVA序列化的作用
    我买网B轮融资成功,五周年豪掷千万回馈会员
    一步步教你搭建TinyOS2.1.2开发环境
    POJ2947 DAZE [Gauss]
    慢慢理解RESTful架构
  • 原文地址:https://www.cnblogs.com/MindMrWang/p/8143975.html
Copyright © 2011-2022 走看看