1. 第一个hibernate例子:
1), 创建一个Java项目。
2), 导入相关的jar包
* hibernate的相关jar包
hibernate-distribution-3.5.6-Final\lib\required\*.jar
hibernate-distribution-3.5.6-Final\hibernate3.jar
hibernate-annotations-3.4.0.GA\lib\test\slf4j-log4j12.jar
hibernate-annotations-3.4.0.GA\lib\test\log4j.jar
* junit测试的jar包
junit-4.8.2.jar
* mysql的驱动jar包
mysql-connector-java-5.1.10-bin.jar
3), 创建表
use test;
createtable customers(
id int PRIMARY key,
name varchar(12),
age int,
des text
)
4), 创建表对应的javabean
public class Customer {
private Integer id;
private String name;
private Integer age;
private String des;
... // get,set方法
}
<?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标签建立javabean和表之间的映射 -->
<class name="cn.itcast.primer.Customer" table="customers">
<!-- id映射表中的主键 -->
<id name="id" type="integer">
<column name="id"></column>
<!-- 配置主键的生成策略 -->
<generator class="increment"></generator>
</id>
<!--
property建立javabean中的属性和表中列的对应关系
type="string": string表示的是hibernate的类型,该类型是java类型和sql类型之间的桥梁
java中的类型: String name; sql中的类型: varchar(255);
映射一个sql的varchar类型到java的String类型
-->
<property name="name" type="string">
<!-- column定义表中的列 -->
<column name="name"></column>
</property>
<property name="age" type="integer">
<column name="age"></column>
</property>
<property name="des" type="string">
<column name="des"></column>
</property>
</class>
</hibernate-mapping>
6), 创建hibernate的配置文件hibernate.cfg.xml,放置在src下
<?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>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>
<!-- 配置数据库的方言,让hibernate知道连接的是那个数据库 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<!-- 配置利用javabean和映射文件生成数据库中的表
hibernate.hb2ddl.auto值
* create: 执行时,先查找该表是否存在,如存在先删除表,再创建表
* none: 不能创建表,只能往表中插入数据,如表不存在,抛出异常, 这个是默认值
* update: 执行时: 情况1: 先查找该表是否存在,如表存在,直接插入,如果表不存在,先创建表,再插入数据
情况2: 先查找该表是否存在,如表存在,但表的结构不一样,要修改表的结构
-->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 显示hibernate生成的sql语句 -->
<property name="hibernate.show_sql">true</property>
<mapping resource=”cn/itcast/primer/Customer.hbm.xml”></mapping>
</session-factory>
</hibernate-configuration>
7), 测试程序:
public class App {
private static SessionFactory sf = null;
static{
// 1. 加载hibernate的配置文件hibernate.cfg.xml
Configuration config = new Configuration(); // 默认加载类路径下的hibernate.cfg.xml文件
config.configure();
// 2. 加载映射文件
// 方法1 config.addResource("cn/itcast/primer/customer.hbm.xml");
// 方法2 要求: 映射文件和Customer.java文件必须在同一个目录下,且和Customer.java文件的文件名称相同
config.addClass(Customer.class);
// 3. 利用上面的配置生成SessionFactory
sf = config.buildSessionFactory();
}
@Test
public void saveCustomer(){
// 4. 从SessionFactory里获取Session
Session session = sf.openSession();
// 5. 开启事务
Transaction ts = session.beginTransaction();
// 6. 创建Customer对戏那个
Customer customer = new Customer();
customer.setName("zhangsan");
customer.setAge(18);
customer.setDes("xxxxxx");
// 7. 保存对象
session.save(customer);
// 8. 提交事务
ts.commit();
// 9. 关闭session
session.close();
}
}
2. 用myeclipse创建hibernate应用
第一步:使用 Myeclipse DataBase Explorer 建立与MySql数据库的连接。
第二步:建立一个Java项目,建一个包存放SessionFactory类
第三步:通过MyEclipse的Add Hibernate Capabilities功能,加入它对Hibernate的支持。
第四步:修改生成的类文件。
第五步:进行简单的查询。
3. Hibernate的运行过程
1) 应用程序先调用Configuration类,读取hibernate.cfg.xml文件, hibernate.cfg.xml文件读取Xxx.hbm.xml文件,
获取配置信息及映射文件中的信息
2) 通过这些信息生成一个SessionFactory对象, SessionFactory生成一个Session对象
3) 使用Session对象生成Transaction对象
①, 通过Session对象的get, load, save, update, delete和saveOrUpdate等方法对数据库进行加载,保存,更新,删除等操作
②, 在查询的情况下,可以通过Session对象生成一个Query对象,然后利用Query对象执行查询操作,如没有发生异常,Transaction对象将提交这些操作到数据库