- 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&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表。
版权声明:本文为博主原创文章,如需转载请表明出处。 https://blog.csdn.net/qq_39266910/article/details/78552173