Hibernate——基础及XML配置

1、入门

hibernate是跟数据库打交道的,一般跟数据库打交道的都不简单

原始、底层直接的一些操作、编码量比较大、费时、用框架高效

把原来一点一点实现的东西,现在给个半成品,不用在这上边发时间,把重点放在业务上,而不是底层的

DAO层   Hibernate  MyBatis  都是针对DAO 层的简化框架   增删改查操作数据库,这两个框架各有优缺点,市场都挺大的,你不都了解,也不太合适

MVC调用部分     Struts2.0   SpringMVC

Spring

核心特点:以对象的方式实现对数据库的增删改查操作

灵魂:映射

增删改就是调方法

难点:持久化对象的状态及其转换

2、Hibernate理解

开发过程中有许多重复性的内容,能不能定义一个类我直接把类和属性给他,他帮我封装好再给我,将来需要的时候就调它,比如每次取出来结果后都得遍历,能不能定义一个类,每次需要遍历时,我就调它

半成品   按着这个引导,精力就放在具体细节上   项目维护,代码重用方便

帮忙完成底层功能   银行要求安全 速度快  可能就不受框架约束

分层会延迟速度  各种方法调用都会延迟 ,性能会拖延

一提到持久化就是跟数据库挂钩

3、

持久化:程序数据在瞬时状态和持久状态间转换的过程

    比如听一首歌,下载在磁盘上,但当我听的时候,这首歌的数据是在cpu上的,cpu是瞬时的掉电即失,磁盘是持久的

持久化的两种方式:

a、序列化

啥叫序列化?

把生成的对象信息持久化保存到文件中或流中,把字节流写入数据流   以二进制状态保存,实现了平台无关性

DataInputStream  DataOutStream  读写二进制文件

FileInputStream  FileOutStream      读写文本文件

BufferedReader      FileReader        字符流也可以读文本文件的

啥叫Soket(套接字)?

两台计算机通过网络通信连接,实现数据的交换

持久化图示:

内存  存用户信息                                 瞬时状态

jdbc 操作数据库  增删改查                       |  |

数据库  存一张跟内存相对应的表             持久状态

JDBC回顾:

JDBC操作数据库到底有什么缺点,才催生了这么多框架来解决这个问题?

重复性工作多

代码冗余

在dao层之前一直都是把数据封装成对象来操作的,比如add数据,只有到dao层了,只能把它给拆开,不然没法执行sql语句了

反过来查询也是一样

优点:效率高

代码移植困难:比如数据库迁移,比如一开始数据量不大放在Mysql中,后来数据量大了,需要把数据移植到oracle中,由于两个数据库语句差异很大,以后一个页面一个页面的修改语句是很麻烦的

用jdbc时,在dao之前一直都是面向对象,以一个对象的形态在传递,到了dao层之后是用sql语句操作数据库,必须得把对象打散,等于这一部分就不是面向对象了,java讲究低耦合,但在这部分是和sql语句耦合在一起了,将来如果更换数据库,这部分就得全部重新写

现在不再直接去操作底层的jdbc的那些东西了,直接使用hibernate提供的那些方法,还是以对象形式传递,不用自己拆解了,是hibernate帮我做了拆分

缺点:分析型的,数据量大的

优点:事务型的增删改查

ORM:对象关系映射

编写程序的时候,以对象的方式处理数据

保存数据的时候,以关系型数据的方式存储的

4、Hibernate配置

a、选择需要的jar包:根目录下的 hibernate3.jar    lib下的required 、jpa(持久化的接口) 文件夹中所有的所有jar包   放到项目的lib文件下  再加个ojdbc6(oracle数据库驱动的jar包)

b、配置文件

名字必须叫hibernate.cfg.xml

在src下new  -->other-->myeclipse-->xml-->xml(basic ...)   点next  create选第一个  select选第二个  hibernate/configration DTD3.0

DTD文件时在写xml文件格式时,用来规范里边能写什么不能些什么,会有代码提示

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd" >
<hibernate-configuration>
<!-- 管跟数据库 -->
<session-factory>
	<property name="connection.driver_class">
		oracle.jdbc.driver.OracleDriver
	</property>
	<property name="connection.url">
		jdbc:oracle:thin:@localhost:1521:ORCL
	</property>
	<property name="connection.username">book</property>
	<property name="connection.password">ok</property>
	<!-- 描述映射文件的保存路径 -->
	<property name="dialect">
		org.hibernate.dialect.Oracle9Dialect
	</property>
	<property name="show_sql">true</property>
	<property name="format_sql">true</property>
	<mapping resource="cn/bdqn/hibernate/entity/Book.hbm.xml" />
</session-factory>
</hibernate-configuration>

几个需要注意的点:

用户会话:HttpSession

hibernate和数据库的交流:session,是hibernate核心API,甭管干什么,先拿到session再说,通过会话工厂来拿到session

运行程序时,会先读配置文件,再由configration创建会话工厂

持久化类也就是实体类   po包=entity包 = bean包

凡是实体类、数据传递、缓存都需要实现序列化,然后会生成一个版本序列,主要是用来判断你存的那个类跟这个类是不是同一个

在定义持久化类时,跟数据库一一对应,数据类型尽量写包装类,不要写值类型,因为数据库允许为空,而值类型不允许为空的,除非数据库也写not null 才可以

c、映射文件

名字必须叫 Book.hbm.xml

在项目下建个包  创建book类

选中包,再如上建个新建的xml     select选第二个  hibernate/Maping/ DTD 3.0

<hibernate-mapping package="cn.bdqn.hibernate.entity">
	<!--上边写package的路径了,下边class就不用写全名了,直接写类名即可
    name=类名  table=表名 -->
	<class name="Book" table="Book">
		<!-- name属性名 colum列名-->
		<id name="id" column="id">
		<!-- 配置主键生成方式,手动分配 -->
			<generator class="assigned"></generator>
		</id>
		<!-- 映射普通的属性和列的对应关系 name属性名 colum列名  type 属性 java类型   -->
		<property name="title" column="title" type="java.lang.String"/>
		<!-- 使用hibernate内置的类型 别名设置type属性-->
		<property name="author" column="author" type="string"/>
		<!-- 默认地,hibernate认为属性名与列名相同,可省略colum,数据类型也可以自动判断 -->
		<property name="publisher"/>
		<property name="price"/>
		<property name="pic"/>

	</class>
</hibernate-mapping>

最后再回到hibernate.cfg.xml 下  Configuration 视图下Maping --> add  选择 Book.hbm.xml

dialect   设置方言  选择对应的数据库  oracle9/10g     因为hibernate可以根据方言自动生成增删改查语句

在properties那  add  选择show sql   value改成true   作用是把hibernate执行的sql语句向控制台输出自动 ;  再选择foramt sql  让sql语句格式化,易读

时间: 2024-10-10 08:12:08

Hibernate——基础及XML配置的相关文章

Java框架:spring框架整合hibernate框架的xml配置(使用注解的方式)

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/sch

web基础 Web.xml配置详解

1 定义头和根元素 部署描述符文件就像所有XML文件一样,必须以一个XML头开始.这个头声明可以使用的XML版本并给出文件的字符编码. DOCYTPE声明必须立即出现在此头之后.这个声明告诉服务器适用的servlet规范的版本(如2.2或2.3)并指定管理此文件其余部分内容的语法的DTD(Document Type Definition,文档类型定义). 所有部署描述符文件的顶层(根)元素为web-app.请注意,XML元素不像HTML,他们是大小写敏感的.因此,web-App和WEB-APP都

Hibernate实现有两种配置,xml配置与注释配置

hibernate实现有两种配置,xml配置与注释配置. (1):xml配置:hibernate.cfg.xml (放到src目录下)和实体配置类:xxx.hbm.xml(与实体为同一目录中) <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "ht

Hibernate中的Annotation注解与XML配置的使用

通过XML配置来实现持久化: 首先我们来建立一个实体类: package com.hibernate.model; public class Student {     private int id;     private String name;     private int age;          public int getId() {         return id;     }     public void setId(int id) {         this.id 

hibernate.hbm.xml 配置总结

大部分内容取自: [Hibernate总结系列]....hbm.xml配置 基本配置结构 1 <?xml version="1.0" encoding='UTF-8'?> 2 <!DOCTYPE hibernate-mapping PUBLIC 3 "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4 "http://hibernate.sourceforge.net/hibernate-mappi

Hibernate注解配置与XML配置区别

注解配置的方式与xml很很多类似: 首先是需要加入4个jar包:hibernate-commons-annotations.jar . hibernate-annotations.jar.ejb3-persistence.jar . hibernate-jpa-2.0-api-1.0.1.Final.jar 使用注解和xml配置,获取Session的方法在hibernate4.0版本以后是一样的,方法如下: 1 Configuration configuration=new Configurat

AOP基础知识及AOP切面编程之注释方法、xml配置方法

<span style="font-family: 微软雅黑; font-size: 10.5pt; letter-spacing: 0pt; ">AOP概念</span> Aspect(切面):它跟类相似,只是两者的关注点不一样,类是对物体特征的抽象,而切面是对横切性关注点的抽象 joinpoint(连接点):所谓连接点就是被拦截到的点,在spring中,这些点是方法,因为spring只支持方法类型的连接点,实际上joinpoint还可以是field或类构造器

hibernate实现有两种配置,xml配置与注释配置。

(1):xml配置:hibernate.cfg.xml (放到src目录下)和实体配置类:xxx.hbm.xml(与实体为同一目录中) <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hi

hibernate 联合主键生成机制(组合主键XML配置方式)

hibernate 联合主键生成机制(组合主键XML配置方式) 如果数据库中用多个字段而不仅仅是一个字段作为主键,也就是联合主键,这个时候就可以使用hibernate提供的联合主键生成策略. 具体如下: 可以使用一个组件作为一个实体类的标识符.你的组件类必须满足以下要求: 它必须实现 java.io.Serializable 接口 它必须重新实现 equals() 和 hashCode() 方法,始终和组合关键字在数据库中的概念保持一致 注意:在 Hibernate3 中,第二个要求并非是 Hi