1)JDBC
优点
成熟、流行、使用DAO模式、效率高
缺点
代码烦杂、可读性差、维护困难、移植性差
2)Hibernate
优点
成熟、流行、功能强大,并逐渐发展成Java持久层事实上的标准
缺点
不够透明、效率比JDBC低
3)ORM映射:对象—关系映射
实现了Java应用中的对象到关系数据库中的表的自动的(和透明的)持久化
使用元数据(meda data)描述对象与数据库间的映射
4)Hibernate相关知识
a、特点
一种开放源代码的对象/关系映射框架
完全着眼于关系数据库的OR映射
事务处理,生命周期管理,不依赖于J2EE容器
b、优点
解决阻抗不匹配的问题
实体域对象由属性和行为组成
关系型数据库由表和字段组成
只需要操作对象就可以完成数据库的增、删、改、查操作。更面向对象
将对象数据保存在数据库中
将数据库数据读入到对象中
轻量级/无侵入性(不依赖于任何容器)、移植性好(容器更换,hibernate代码仍可用)
可以进行事务管理
c、缺点
不能批量对对象进行操作
不适用于使用数据库特定映射
表间联合查询时,会造成性能问题
不适用于表间关系复杂时
5)Hibernate相关jar包
Hibernate3.jar:核心库
jta.jar:事务管理
cglib.jar:运行期扩展Java类与实现Java接口,Hibernate用它来实现PO字节码的动态生成
commons-logging.jar:日志功能,由它调用具体日志实现。如:Log4j等
commons-collections.jar:集合类
dom4j-1.6.1.jar:处理XML文件解析
c3p0.proxool.jar:配置连接池,非必需
versioncheck.jar:版本控制
ant.jar:打包和部署,非必需
6)Hibernate部署(手工配置)
a、创建Java项目,导入hibernate的相关jar包
/hibernate3.jar
/lib/*.jar
JDBC jar包
b、将/etc/hibernate.cfg.xml(基本配置文件)和log4j.properties(日志文件)放入工程的src目录下
c、修改hibernate.cfg.xml,完成数据库连接中信息的书写

<hibernate-configuration>
<!-- 描述数据库连接信息 -->
<session-factory>
<!-- 设置JDBC驱动 -->
<property name="hibernate.connection.driver_class">net.sourceforge.jtds.jdbc.Driver</property>
<!-- 设置URL -->
<property name="hibernate.connection.url">jdbc:jtds:sqlserver://localhost:1433/pet</property>
<!-- 设置用户名 -->
<property name="hibernate.connection.username">sa</property>
<!-- 设置密码 -->
<property name="hibernate.connection.password">sa</property>
<!-- 设置数据库方言(不同的数据库使用不同的SQL) -->
<property name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property>
<!-- 是否显示SQL语句 -->
<property name="show_sql">true</property>
<!-- 注册ORM映射文件 -->
<mapping resource="orm/PetBean.hbm.xml"/>
</session-factory>
</hibernate-configuration>


d、建立实体类,实体类实现系列化
public class PetBean implements java.io.Serializable
e、完成实体类ORM映射文件的编写

<hibernate-mapping>
<!-- 映射实体和表。name:表示类的全路径。table:表示表 -->
<class name="com.lovo.bean.PetBean" table="PetInfo">
<!-- 主键映射。name:表示属性名。column:表示表的列名,如果对象属性名和表的列名一致,那么column属性可不写 -->
<id name="pet_id">
<!-- 主键生成策略。native:表示该列自动增长 -->
<generator class="native"/>
</id>
<!-- 普通列映射 -->
<property name="pet_name"></property>
<property name="pet_sex" length="2"></property>
</class>

</hibernate-mapping>


f、完成ORM映射文件的注册
<!-- 注册ORM映射文件 -->
<mapping resource="orm/PetBean.hbm.xml"/>
7)根据配置文件创建表

package com.lovo.test;

import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

public class CreateTable {

public static void main(String[] args) {
//读取hibernate.properties文件
//Configuration config = new Configuration();


//读取hibernate.cfg.xml文件
Configuration config = new Configuration().configure();
//根据配置文件建表
SchemaExport sc = new SchemaExport(config);
//创建表。第一个true表示是否在控制台显示DDL语句;第二个true表示是否将脚本导入数据库
sc.create(true, true);
}

}


8)使用Hibernate对数据进行增、删、改的基本步骤
a、读取hibernate.cfg.xml文件创建Configuration实例
Configuration config = new Configuration().configure();
b、读取了<session-factory>后生成SessionFactory对象
SessionFactory factory = config.buildSessionFactory();
一个SessionFactory对应一个数据库
c、打开连接
Session session = factory.openSession();
一个Session对应一个连接,是连接的一个封装
d、开启事务
session.beginTransaction();
e、在try块中书写具体的操作,并提交
session.getTransaction().commit();
f、出现异常时,在catch块中回滚
session.getTransaction().rollback();
g、在finally块中关闭session对象
session.close();
9)Session接口中对数据库操作的主要方法
sava():将对象保存到数据库中
savaOrUpdate(): 如果存在就修改,不存在就保存到数据库中
update():修改数据库对应的对象
load():从数据库中加载对象
get():根据id查询数据库
delete():把对象从数据库中删除
find():从数据库中查询对象