hibernate = 映射文件 + 配置文件 + 持久化类
1.映射文件:*.hbm.xml(将数据库表与java类建立连接)
数据库表与java类的映射
数据库类型与java类属性类型的映射
数据库字段与java类属性名的映射
一对多、多对多如何转化为面向对象的关系
2.配置文件:hibernate.cfg.xml
描述数据库的链接信息
3.持久化类:一个java类
4.一个简单的小例子
(1).Person的javabean,定义属性,设置set,get方法。
注:Person类implements Serializable
(2).Person.hbm.xml
<hibernate-mapping>
<class name="domain.Person" table="person">
<id name="pid" column="pid" length="5" type="java.lang.Long">
<generator class="increment"></generator>
</id>
</class>
</hibernate-mapping>
(3).hibernate.cfg.xml
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="hbm2ddl.auto">update</property>
<mapping resource="domain/Person.hbm.xml">
</session-factory>
</hibernate-configuration>
注:hbm2ddl.auto属性值有4种:
validate:只检查结构
update:检查结构,创建或更新表
create:每次启动hibernate时都创建表
create-drop:启动hibernate时创建表,关闭时删除表
(4).PersonDao.java
public void savePerson(){
Configuration configuration = new Configuration();
configuration.configure();
SessionFactory sessionFactory = configuration.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Person person = new Person();
person.setPName("aa");
session.save(person);
transaction.commit();
session.close();
}
5.该例子的执行流程
(1).Configuration configuration = new Configuration(); ---创建配置文件对象
(2).configuration.configure(); ---加载配置文件(注:这种写法,配置文件名一定是hibernate.cfg.xml,且在src下)
configuration.configure(url); ---url代表hibernate配置文件的路径
(3).配置文件hibernate.cfg.xml中,包含:
数据库连接信息+方言+hbm2ddl.auto+映射文件
(4).configuration.buildSessionFactory():
^1.产生sessionFactory
^2.将配置文件中信息都放入sessionFactory
^3.sessionFactory是一个重量级的类
^4.sessionFactory是线程安全的
^5.sessionFactory是单例
(5).Session session = sessionFactory.openSession();
^1.创建一个连接,打开数据库通道
^2.事务都是由session产生的
(6).打开事务
(7).增删改查
(8).关闭事务
(9).关闭session