hibernate初学
2017-11-20 21:11
316 查看
一.什么是hibernate?
定义:通俗的讲就是用来操作数据库的。它把数据库中的表,转换成java类,通过xml文件来实现类和表之间的映射。这样的好处在于,可以面向对象的思想来操作数据库。
二.与jdbc的区别
可能有些人会觉得这个框架没什么用,认为已经有了jdbc连接数据库了,为什么还要用这个框架去连接数据库。当然有这个框架自然有用处的。jdbc也是有缺点的,比如效率就低,每一次请求,打开连接、发送sql语句,在数据库中解析sql语句等需要消耗大量的资源,重复性代码特别多, 每一次都需要关闭connection,statement,rs,没有做到面向对象编程,没有做到数据缓存(就是把页面上的数据缓存到本地磁盘上,当应用程序再次访问的时候,直接从磁盘上读取数据就可以了)等缺点。jdbc有的这些缺点,当然hibernate框架就完善了它。三.hibernate有些什么?
1. hibernate.cfg.xml配置文件:主要写是链接数据库的四个信息,指定加载哪个数据库,mysql还是oracle等,驱动器,数据库用户名和密码等一些其他配置信息。2. xxx.hbm.xml配置文件:hbm指的是hibernate的映射文件,在 hibernate.cfg.xml中管理,在项目启动的时候加载到内存,提供关于将对象持久化到关系数据库中的信息。简单来说就是你要在数据库怎么样建表参照这个配置文件。
3. hibernate的增删该查,对数据库数据的增加,删除,修改,查找,在java里操作。
4. hibernate的三种状态:transient(瞬时状态),persistent(持久化状态)以及detached(离线状态)。瞬时状态就是刚new出来一个对象,还没有被保存到数据库中,持久化状态就是已经被保存到数据库中,离线状态就是数据库中有,但是session(缓存)中不存在该对象。当然他们之间也可以互相转换。
5. 一对多和多对多的关系:就是数据库中的表之间有一对多和多对多的关系。举个简单例子:宿舍和学生是一对多的关系,一个宿舍住多个学生,查询宿舍列表的时候,假如一个宿舍里面住着三个学生,当我查询宿舍列表的时候,就也会有住这宿舍的学生信息。还有一些其他关系也不多说了。
6. hibernate还有很多种查询方式,我也不细讲了。
7. annotation:在hibernate中,通常配置对象关系映射关系有两种,一种是基于xml的方式,另一种是基于annotation的注解方式,就是annotation里的一些标签可以代替xml配置文件,你也就不需要去配置xxx.hbm.xml,感觉annotation可以少写一些配置文件代码要好点,看个人喜好吧。
当然还有一些细的知识点我也不一 一列出来了。
四.hibernate怎么运行的?
1 通过传过来的对象,得到类名称,然后根据这个名称,得到该目录下的对应的xxx.hbm.xml文件。2 解析xxx.hbm.xml文件,生成相应的表。
3 应用反射,得到类中的相关字段的值。
4 进行保存
举个例子如定义一个user对象,有个属性name,然后有一个user.setName(Name)方法,然后session.save(user);(保存到数据库)trans.commit();(提交),session.close();就可以了。
五.hibernate例子
第一步,先配置hibernate.cfg.xml:<hibernate-configuration> <session-factory name="mySessionFactory"> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>//MySQL驱动类 <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate</property>//MySQL连接端口号(3306)与数据库(hibernate) <property name="hibernate.connection.username">root</property>//MySQL用户名 <property name="connection.password">123456</property>//MySQL用户密码 <property name="hibernate.show_sql">true</property>//显示hibernate对数据库操作语句 <property name="hibernate.format_sql">true</property>//格式化Hibernate的SQL输出语句 <property name="hibernate.hbm2ddl.auto">update</property>//自动创建|更新|验证数据库表结构。如果不是此方面的需求建议set value="none" 常用属性有create、update <mapping resource="com/hibernate/Student.hbm.xml"/> </session-factory> </hibernate-configuration>
第二步,配置Student.hbm.xml文件:
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.hibernate.Student"> <id name="id" /> <property name="name" /> <property name="age" /> </class> </hibernate-mapping>
第三步,创建Student.java:
package com.hibernate; public class Student { private int id; 4000 private String name; private int age; 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 int getAge() { return age; } public void setAge(int age) { this.age = age; } }
第四步,创建Test.java
package com.hibernate; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.AnnotationConfiguration; public class Test { public static void main(String[] args) { Student s = new Student(); s.setId(1); s.setName("zhangsan"); s.setAge(8); SessionFactory sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory(); Session session = sessionFactory.getCurrentSession(); session.beginTransaction(); session.save(s); session.getTransaction().commit(); } }
运行效果:
六.hibernate心得
刚开始也是对这个框架有疑惑的,为什么有了JDBC访问数据库,还要有这个框架出现,当然每个东西自然有自己的用处,前面我也讲了一些它们的区别,配置也是差不多的套路,不要去记,要写的时候去拷贝修改就行了,hibernate每个东西可以不用去记,知道有这个东西就行,最重要还是会用,我感觉用多了,也差不多记住常用的了。相关文章推荐
- hibernate初学感触
- 初学Hibernate中出现的一些错误
- Hibernate学习笔记--第一篇 初学入门第一个例子
- 初学Hibernate写一个简单的代码认识它
- hibernate初学4 补充
- 初学hibernate遇到的几个问题的解决
- 初学Hibernate持久化
- Hibernate框架初学笔记
- hibernate映射 【映射组成关系】,初学例子五
- hibernate映射 【映射继承关系】,初学例子六
- 初学Hibernate持久化
- 初学hibernate之缓存
- 初学hibernate中遇见问题
- hibernate框架初学
- 初学hibernate框架
- Hibernate框架 初学
- 初学hibernate有感
- 初学hibernate框架
- hibernate初学常见错误
- hibernate初学简单实例