Hibernate:
hibernate是一个数据访问层的技术框架,主要基于ORM思想,即为对象关系映射
运用ORM的利与弊:
能够更好的面向对象,在程序中不用直接的操作数据库,能够关联关系映射,同时对程序员来说开发效率高
所不好的就是程序的执行效率低,所以对于性能要求比较高的项目不适合使用ORM
使用hibernate的过程:
首先还是要先导入hibernate的包
hibernate中的核心api:
(1)、Configuration类
负责管理Hibernate的配置信息
1)hibernate运行的底层信息:数据库的URL、用户名、密码、JDBC驱动类,数据库Dialect(方言),数据库连接池等
(对应hibernate.cfg.xml)
2)持久化类与数据表的映射关系(*.hbm.xml文件)
(2)、ServiceRegistry对象(hibernate4的新特性)
ServiceRegistry是Service的注册表,它为Service提供了一个统一的加载/初始化/存放/获取机制
(3)、SessionFactory对象
1、Configuration对象根据当前的配置信息生成SessionFactory对象。SessionFactory对象一旦构造完毕,即被赋予特定的配置信息(SessionFactory对象
中保存了当前的数据库配置信息和所有映射关系以及预定义的SQL语句。同时,SessionFactory还负责维护hibernate的二级缓存)
2、SessionFactory是线程安全的
3、SessionFactory是生成Session的工厂
4、构造SessionFactory很消耗资源,一般情况下一个应用中只初始化一个SessionFactory对象
(4)、Session对象
1、Session是应用程序与数据库之间交互操作的一个单线程对象,是Hibernate运作的中心,所有持久化对象必须在Session的管理下才可以进行持久化操作。
此对象的生命周期很短,session对象有一个一级缓存,显式执行flush之间,所有的持久层操作的数据都缓存在Session对象中
2、持久化类与Session关联起来后就具有了持久化的能力
3、session是线程不安全的
4、Session的方法:
取得持久化对象的方法:get()\load()
持久化对象都得保存、更新和删除:save()\delete()\saveOrUpdate()\udate()
开启事务:beginTransaction()
管理Session的方法:isOpen(),flush(),close()
(5)、Transaction对象
1、代表一次原子操作,它具有数据库事务的概念。所有持久层都应该在事务管理下进行,即使是只读操作
Employee.hbm.xml
TextSession
今天学习了javaee的第二个框架,关于Dao层即数据访问层的技术框架
hibernate是一个数据访问层的技术框架,主要基于ORM思想,即为对象关系映射
运用ORM的利与弊:
能够更好的面向对象,在程序中不用直接的操作数据库,能够关联关系映射,同时对程序员来说开发效率高
所不好的就是程序的执行效率低,所以对于性能要求比较高的项目不适合使用ORM
使用hibernate的过程:
首先还是要先导入hibernate的包
实现日记文件没有出错,在数据库便出现数据
hibernate中的核心api:
(1)、Configuration类
负责管理Hibernate的配置信息
1)hibernate运行的底层信息:数据库的URL、用户名、密码、JDBC驱动类,数据库Dialect(方言),数据库连接池等
(对应hibernate.cfg.xml)
2)持久化类与数据表的映射关系(*.hbm.xml文件)
(2)、ServiceRegistry对象(hibernate4的新特性)
ServiceRegistry是Service的注册表,它为Service提供了一个统一的加载/初始化/存放/获取机制
(3)、SessionFactory对象
1、Configuration对象根据当前的配置信息生成SessionFactory对象。SessionFactory对象一旦构造完毕,即被赋予特定的配置信息(SessionFactory对象
中保存了当前的数据库配置信息和所有映射关系以及预定义的SQL语句。同时,SessionFactory还负责维护hibernate的二级缓存)
2、SessionFactory是线程安全的
3、SessionFactory是生成Session的工厂
4、构造SessionFactory很消耗资源,一般情况下一个应用中只初始化一个SessionFactory对象
(4)、Session对象
1、Session是应用程序与数据库之间交互操作的一个单线程对象,是Hibernate运作的中心,所有持久化对象必须在Session的管理下才可以进行持久化操作。
此对象的生命周期很短,session对象有一个一级缓存,显式执行flush之间,所有的持久层操作的数据都缓存在Session对象中
2、持久化类与Session关联起来后就具有了持久化的能力
3、session是线程不安全的
4、Session的方法:
取得持久化对象的方法:get()\load()
持久化对象都得保存、更新和删除:save()\delete()\saveOrUpdate()\udate()
开启事务:beginTransaction()
管理Session的方法:isOpen(),flush(),close()
(5)、Transaction对象
1、代表一次原子操作,它具有数据库事务的概念。所有持久层都应该在事务管理下进行,即使是只读操作
hibernate.cfg.xml
<!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>
<!-- hibernate对数据库的连接参数,注册的驱动,url,用户名和密码 -->
<property name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="hibernate.connection.url">
jdbc:mysql://localhost:3306/day31
</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">123</property>
<!-- hibernate对不同的数据库用不同的数据库的方言,hibernate能够为各个数据库进行一个orm映射
主要是因为拥有了不同的数据库方言支持
-->
<property name="hibernate.dialect">
org.hibernate.dialect.MySQL5InnoDBDialect
</property>
<!-- hibernate的其他配置 -->
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- hibernate中对实体映射文件的加载,需要在hibernate中使用映射就要把映射文件加上 -->
<mapping resource="demo1/Student.hbm.xml" />
<mapping resource="demo2/Employee.hbm.xml" />
</session-factory>
</hibernate-configuration>
Employee.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- 实体映射并对应的数据库的表 -->
<class name="demo2.Employee" table="employee">
<!-- 各字段属性对应着的是实体类里面的属性 ,一个属性对应着一个字段
id:是一个独立的字段,主要是因为拥有一个主键生成策略
generator: native,assinged,identity..应对不同的数据库来设置id的主键生成策略
-->
<id name="id">
<generator class="native"></generator>
</id>
<property name="name"></property>
<property name="gender"></property>
</class>
</hibernate-mapping>
TextSession
package demo2;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
public class DAOText {
/**
* hibernate对数据访问的逻辑
* @param args
*/
public static void main(String[] args) {
//通过Configuration对象加载hibernate.cfg.xml,并且建立SessionFactory
Configuration config = new Configuration().configure();
//在hibernate4.x版本中引进了ServiceRegistry参数,主要是用于服务器注册保证了一定的安全性
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(config.getProperties()).build();
SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistry);
// SessionFactory sessionFactory = config.buildSessionFactory(); 在hibernate3.x的版本中不用使用参数
//在hibernate中每一个操作都需要开启事务管理
Session session = sessionFactory.openSession();
Employee employee = new Employee();
employee.setName("配置");
employee.setGender("男");
session.beginTransaction();
//session的保存方法
session.save(employee);
session.getTransaction().commit();
session.close();
sessionFactory.close();
}
}
今天学习了javaee的第二个框架,关于Dao层即数据访问层的技术框架