什么是hibernate?
hibernate是一个基于ORM(实体关系映射)的、用于简化数据库操作的框架。
为什么要使用hibernate?
传统的jdbc操作具有以 下缺点:
1.在Java代码中写sql语句麻烦, 特别是遇到多表查询时;
2.手动映射非常麻烦(stat.setInteger(...)...),特别是当属性较多时;
3.jdbc的移植性不好,比如分页查询,Oracle和MySQL的就不同。
hibernate内部封装了jdbc,它的hql和session大简化了数据操作, 并且去除了对不同的数据库操作在代码层面上的差异, 有很好的可移植性.
最基本的使用
在hibernate中,几乎所有的数据操作都基于实体关系映射, 即建立数据表格和实体类之间的映射关系, 通俗的讲, 就是根据表格建立实体类或根据实体类建立表格.而在hibernate的映射方式包含基本映射, 一对多映射, 多对多映射, 组件映射 和联合主键映射等. 这些映射关系可以手动配置, 也可以用myeclipse自动生成。作为初学者, 我感觉应在熟悉手动配置后再使用自动生成。
本文配有附件, 以专业、学生、课程和学生选课四个表配合文章说明. jar包有点多, 没上传.
先介绍手动配置基本映射的方式.
基本映射, 一个表格对应一个实体类, 实体类的属性对应于表格各字段, 是建立其它映射关系的基础.建立步骤如下.
1.在src下添加hibernate.cfg.xml文件,配置数据库连接参数.
- <?xml version='1.0' encoding='UTF-8'?>
- <!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="dialect">
- org.hibernate.dialect.MySQLDialect
- </property>
- <!--配置数据库连接用的参数-->
- <property name="connection.url">
- jdbc:mysql://localhost:3306/test
- </property>
- <property name="connection.username">….</property>
- <property name="connection.password"> ….</property>
- <property name="connection.driver_class">com.mysql.jdbc.Driver </property>
- <!--myeclipse database explorer 中数据库连接的名字-->
- <property name="myeclipse.connection.profile">mysql</property>
- <!--配置映射文件-->
- <mapping source=" ">
- </session-factory>
- </hibernate-configuration>
2.参照需要被映射的表格添加实体类(和想用jdbc建立实体类的方法相同),并为其建立映射文件。每个通过表格得到的映射实体类都有自己独立的映射文件:entityName.hbm.xml, 如Major.hbm.xml.
- <?xml version="1.0" encoding="utf-8"?>
- <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
- <hibernate-mapping>
- <class name="含有包名的类名, 如pojo.Major" table="对应的表名">
- <!--主键-->
- <id name="id" type="integer">
- <column name="id" />
- <generator class="identity"></generator>
- </id>
- <!--属性-->
- <property name="属性名" type="包含包名的Java数据类型, 或hibernate数据类型">
- <column name="列名"/>
- </property>
- …
- <property name="属性名" type="包含包名的Java数据类型, 或hibernate数据类型">
- <column name="列名"/>
- </property>
- </class>
- </hibernate-mapping>