Hibernate初学之第一讲
首先比较一下JDBC的优缺点:
JDBC的优点
直接底层操作,提供了很简单、便捷的访问数据库的方法,跨平台性比较强。灵活性比较强,可以写很复杂的SQL语句。
JDBC的缺点
1.因为JAVA是面向对象的,JDBC没有做到使数据能够面向对象的编程,使程序员的思考仍停留在SQL语句上。
2.操作比较繁琐,很多代码需要重复写很多次。
3.如果遇到批量操作,频繁与数据库进行交互,容易造成效率的下降。
Jdbc是一个比较底层的东西 灵活写SQL语句
1、注册驱动
2、获得连接
3、产生一个Statement
4、进行操作
返回数据ResultSet
1、new List对象
2、把ResultSet数据放入List过程中
A a = new A();
a.setXXX(rs.getString("xxx"));
代码比较繁琐
纯的JDBC是没有缓存的
模型不匹配(阻抗不匹配)
Java面向对象语言,对象模型,其主要概念有:继承、关联、多态等;数据库是关系模型,其主要概念有:表、主键、外键等。
对象模型中对象与对象之间的关联关系与关系模型中数据库表之间的关系无法一一对应。
对象模型中对象的继承关系在关系模型中无法直接表示。
对象模型中对象的等值性(equals)在关系模型中无法直接实现。
对象模型中有关联的对象之间的导航访问在关系模型中无法直接实现。
解决办法
1使用JDBC手工转换。
2使用ORM(Object Relation Mapping对象关系映射)框架来解决。
Hibernate是一个开源ORM框架。
ORM全称Object Relation Mapping,即对象关系映射。它是一种用来完成对象模型到关系模型的映射技术。
就是把应用程序中的对象数据持久化到关系数据库的表的一种技术。
使用ORM( Object Relation Mapping )框架来解决。主流的ORM框架有JBoss公司的Hibernate、Oracle公司的TopLink、Apache组织的OJB、Sun公司的JDO。
简单的说:ORM能利用面向对象的思想开放基于关系型数据库的应用程序,它的主要工作是将对象数据保存到关系数据库的表中,以及将关系数据库表中数据读入到对象中。
下载地址http://www.hibernate.org,使用3.3版本。
解压获取必需类库文件
将下载目录/hibernate3.jar和/lib下的hibernate运行时必须的包加入classpath中:
安装配置
配置文件hibernate.cfg.xml和hibernate.properties,XML和properties两种,这两个文件的作用一样,提供一个即可,推荐XML格式,下载目录/etc下是示例配置文件。
可以在配置文件指定:
数据库的URL、用户名、密码、JDBC驱动类、方言等。
启动时Hibernate会在CLASSPATH里找这个配置文件。
映射文件(hbm.xml,对象模型和关系模型的映射)。在/eg目录下有完整的hibernate示例。
步骤:
1.新建java项目,并加入相应的jar包,及jdbc驱动。
2.创建持久化类
3. 准备数据库表
4.创建配置文件 hibernate.cfg.xml
5.创建映射文件 xxx.hbm.xml
6.创建测试文件
Hibernate.connection.url 表示要链接的数据库地址
Hibernate.connection.driver_class 表示要链接的数据库的驱动类
Hibernate.connection.username 要连接的数据库的用户名
Hibernate.connection.password 要连接的数据库的密码
Hibernate.dialect 表示要使用的数据库的类型
org.hibernate.dialect.MySQL5Dialect mysql数据库
org.hibernate.dialect.Oracle9Dialect oracle数据库
org.hibernate.dialect.SQLServerDialect SQLServer数据库
hibernate.hbm2ddl.auto
validate:加载hibernate时验证创建表结构
update:加载hibernate时自动更新数据库结构,如果表存在不用创建,如果不存在就创建。
create:每一次加载hibernate时都创建表结构
create-drop:加载hibernate时创建,退出时删除
<hibernate-mapping package="com.hbsi.domain">
<class name="User" table="user">
<id name="id">
<generator class = "native" />
</id>
<property name="name" />
<property name="birthday" type="datetime" />
</class>
</hibernate-mapping>
<hibernate-configuration>
<session-factory name="foo">
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql:///test</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="connection.password">root</property>
<property name="show_sql">true</property>
<property name="hbm2ddl.auto">update</property>
<mapping resource="com/hbsi/domain/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
这些都是配置文件;还需要创建一个domain类;