javaee之hibernate的基础练习

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、代表一次原子操作,它具有数据库事务的概念。所有持久层都应该在事务管理下进行,即使是只读操作


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层即数据访问层的技术框架
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值