HIbernate笔记(1)

近来基本将Hibernate进行了一个理解和应用,虽然现在使用SSH框架的企业很少了,但是三大框架主流思维还是相对较为相似,Hibernate上手难度较低,更容易理解,同时也是通过XML进行配置的典型框架,我认为还是有必要进行一个了解。


  Hibernate是一个持久层框架,其思想为ORM(Object Relational Maps)对象关系映射。能够通过XML文件进行配置,同时其框架为我们提供了多种优化手段,能够极大提高开发效率同时也使维护变的更加方便。

对象关系映射(ORM)

对象关系映射是Hibernate中最为重要的一种思想。简单理解来说,ORM即将我们数据库中的数据表与Java中的实体类进行相对应,将Java实体类中的属性与表中的字段相关联,能够通过操作对象来完成对数据库中数据的更改。其最明显的优势就是能够以面向对象的思维方式来处理数据库问题。
    之前使用JDBC处理数据库时,操作过于底层同时也不够灵活,如果需要更改查询条件,我们必须将SQL语句进行更改,这样的操作似乎也不太符合面向对象设计的理念,而在Hibernate框架中,我们可以通过更改对象的方式,框架将自动为我们完成数据库信息的更新和变动。
  

HIbernate笔记(1)_第1张图片

    简单来说,Hibernate将给我们带来如下几个优势

  • JDBC操作繁琐,ORM简洁明了

  • SQL语句编写复杂,且不是面向对象的思维,ORM改善了这种方法并提供了自己的优化,并只需要对对象操作即可

  • 可将对象与表之间建立联系,简化了编程思维

  • ORM解决了跨数据库平台优势,当更换数据库时,不需要重构代码(可移植性好)

  • ORM为轻量级框架,使用更加灵活

Hibernate关系映射

    Hibernate中我们可以实现几种关系映射,如下

  • 实体类与数据表关系映射(属性映射,类映射)

  • 一对一映射

  • 一对多映射

  • 多对多映射

Hibernate  XML关系配置

    在使用Hibernate前,我们需要对Hibernate进行一些关系配置,其中主要分为实体类与表的映射配置Hibernate框架配置两个XML的使用。

    关于Hibernate框架配置

    文件名命名为hibernate.cfg.xml,可以进行更改,但是需要更改配置,一般都使用默认名称。

首先我们需要引入hibernate.cfg.xml的约束

然后我们引入使用Hibernate的几个必要的标签


	
		
		 
                   com.mysql.jdbc.Driver                                                   
		//数据库名称
            jdbc:mysql:///hibernate_day01
		//数据库用户名
            root
		//数据库密码
            root
		
            org.hibernate.dialect.MySQLDialect	
	

前几项类似于我们配置JDBC的驱动配置,而方言配置是Hibernate将用户的操作转化为SQL语句时,使用哪种数据库语言,通过这一方法,我们能够实现更换数据库时保证源码不进行重构。

这几项完成后,需要引入类与表的关联的XML文件,代码如下

这样能够让Hibernate加载到我们类表关联的配置文件,文件路径为全路径名称。其中还有一些可选配置例如

是否打印SQL语句到控制台上

true

SQL语句是否进行格式化

true

该类语句可以到Hibernate官方提供的API中进行查询

关于类与表映射配置

这是Hibernate的核心内容,通过XML配置完成后,框架完成解析,将我们对于对象的每一步操作自动转化为SQL语句,XML文件配置正确与否将直接影响到我们程序能否进行使用。

基本过程如下

  • 引入约束文件
  • 建立表与实体类的映射
  • 建立表与主键的对应
  • 建立表中字段与类中普通属性的对应

约束文件如下

之后进行其他映射建立



	//name为类的全路径名,table为表的名称,必须对应一致
	
		
		
                        //其中native为一种主键自增长方式,之后进行详细描述
			
		
		
		
		
		
		
		
		
	
	

此时,我们就建立了一个实体类与表映射的XML文件。

此时我们来看下如Hibernate如何让我们不使用SQL语句即可完成对数据库的操作。

public class HibernateDemo1 {
	
	
	@Test
	public void function() {
		//加载核心配置文件
		Configuration configuration = new Configuration();
		configuration.configure();
		
		//创建session-factory对象,类似于JDBC连接池,维护缓存等内容
		SessionFactory SessionFactory = configuration.buildSessionFactory();
		//通过session-factory获取到session对象,类似于jdbc中connection对象
		Session session = SessionFactory.openSession();
		//手动开启事务,在Hibernate5中不需要手动开启,为了保证兼容
		Transaction transcation =  session.beginTransaction();
		//编写代码
		Customer customer = new Customer();
		customer.setCust_name("张三");
		//将对象保存
		session.save(customer);
		//事务提交
		transcation.commit();
		//释放资源
		session.close();
		SessionFactory.close();
		
	}
	
	
}

我们能够看到,代码中没有出现SQL语句,而是通过SAVE方法将对象进行保存即完成了对数据库的一个操作,这实际上也体现了框架的一种面向对象的思维方式,摈弃以往JDBC传统的思维方法,将实现细节进行封装,只需要我们关注业务本身即对象层面操作即可。

关于其中内容一些注释

  • 操作需要我们使用session进行处理,例如增删改查
  • session代表数据库连接对象,是线程不安全的,不能够定义为全局变量
  • 在使用完成后需要我们及时关闭session资源

 

 

你可能感兴趣的:(三大框架)