1.什么是框架
框架是一个半成品,框架帮我们实现了一部分的功能。
2.使用框架的最大好处
使用框架的最大好处就是,少写一部分代码但仍能实现我们所需要实现的功能。
3.什么是hiberbnate框架
(1)hibernate框架应用在javaEE三层结构中的dao层框架
(2)hibernate底层的代码就是jdbc,hibernate就是对jdbc的封装,使用hibernate就不需要写jdbc复杂的代码了,而且可以不写sql语句,就能实现对数据库的基本的,增,删,改,查。
(3)hibernate是轻量级的框架。
4.hibernate的思想
(1)hibernate使用orm思想对数据库进行增,删,改,查。
(2)什么是orm思想?
orm:object relational mapping 对象关系映射,让实体类和数据库的表进行对应,也就是实体类中的属性与数据库中表的列进行一一的对应。且实体类的名称与数据库的表名对应。
这样我们就可也不需要对数据库中的表进行操作,而是直接对实体类对象进行操作,再映射到数据库的表中,从而达到对数据库表的操作。
5.搭建hibernate环境
(1)导入所需jar包。
(2)创建实体类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
<strong> package com.bean; public class User { private int uid; private String username; private String password; private String address; public int getUid() { return uid; } public void setUid( int uid) { this .uid = uid; } public String getUsername() { return username; } public void setUsername(String username) { this .username = username; } public String getPassword() { return password; } public void setPassword(String password) { this .password = password; } public String getAddress() { return address; } public void setAddress(String address) { this .address = address; } } </strong> |
这样使用hibernate框架,不需要自己手动创建表,hibernate会帮我们把表建好。
(3)配置实体类和数据库表的一一对应的关系(映射关系)
使用配置文件来实现实体类和数据库表的映射关系。
创建xml文件,文件的名称和位置没有固定的要求,但是建议在实体类的文件夹中建xml文件名称为:实体类名称.hbm.xml
配置文件的创建首先要引入约束:
xml文件的约束分为dtd约束和schema约束,hibernate是引入dtd约束
配置文件(实体类名.hbm.xml)引入约束(dtd格式)
1
2
|
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" > |
<hibernate-mapping> 配置文件的根节点
配置映射关系
<class name="实体类的全路径" table="实体类映射到数据库中的表的名字">在此节点内配置实体类
hibernate要求实体类中有一个属性是唯一的值也就是对应表中的主键
<id name="实体类中对应的属性的名称" column="表中对应的字段的名称(也就是主键)">
设置主键的增长策略
<generator class="native"></generator>
其中的class的值可以等于下图中的一些值
</id>
下面就是对实体类的其他属性和表中除去主键外的字段进行一一对应的配置了
<property name="实体类属性名称" column="表中对应的列名"></property>当然这就要看实体类或者是表中有多少个除去主键的列了,有几列就对应的配置几列了
</class>
</hibernate-mapping>
(4)配置核心的配置文件(hibernate.cfg.xml)
同样是先引入核心配置文件的约束(dtd格式)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
<?xml version= '1.0' encoding= 'UTF-8' ?> <!--引入约束dtd格式--> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd" > <!-- Generated by MyEclipse Hibernate Tools. --> <hibernate-configuration> <session-factory> <!--配置数据库--> <property name= "dialect" > org.hibernate.dialect.SQLServerDialect<!--配置数据库的方言,目前是SQLServer数据库的方言,说白了就是为了让hibernate识别你的数据语句--> </property> <property name= "connection.url" > jdbc:sqlserver: //localhost:1433;databaseName=logPublish<!--配置你数据库的连接--> </property> <property name= "connection.username" >sa</property><!--配置数据库的登录名--> <property name= "connection.password" >sa</property><!--配置数据库的密码--> <property name= "connection.driver_class" > com.microsoft.sqlserver.jdbc.SQLServerDriver<!--配置数据库的加载驱动--> </property> <property name= "myeclipse.connection.profile" >sqlserver</property> <!--配置hibernate--> <property name= "show_sql" > true </property><!--为了让hinbernate输出执行的底层的sql语句--> <property name= "current_session_context_class" >thread</property><!--hinbernate绑定当前session--> <property name= "format_sql" > true </property><!--让输出的底层执行的sql语句有一定的格式--> <!--引入实体类的配置文件--> <mapping resource= "com/bean/LogInfo.hbm.xml" /><!--引入LogInfo实体类的配置文件--> </session-factory> </hibernate-configuration> |
核心的配置文件中引入实体类的配置文件可以是多个,但是resource属性的值必须是实体类配置文件的全路径。
需要知道的是在hibernate的操作中只会加载核心的配置文件,不会加载其他的配置文件(所以在核心配置文件中才会引入我们的实体类的配置文件,这样在hibernate的操作过程中就可以加载到实体类的核心配置文件了)
6.Hibernate的过程
(1)加载hibernate核心配置文件(hibernate.cfg.xml)
(2)创建SessionFactory对象
(3)使用SessionFactory对象创建Session对象
(4)使用Session对象开启事务
(5)对数据库的增,删,改,查操作
(6)提交事务
(7)回滚事务
(8)关闭资源
7.hibernate中的核心API
(1)Configuration(用于加载核心配置文件)
Configuration cfg=new Configuration();
cfg.configure();
执行这个语句的时候hibernate会找到核心的配置文件hibernate.cfg.xml进行加载
(2)SessionFactory(用于打开(创建)一个会话,在这里的会话其实也就是对数据库的一次连接到关闭数据库的连接是一次会话)
sessionFactory = configuration.buildSessionFactory();
Configuration对象创建SessionFactory对象
根据核心配置文件中数据库中的配置进行数据库中表的创建。
需要注意的是一个项目只有一个SessionFactory对象,因为这个对象对资源的消耗很大。
(3)Session(用于开启事物(其实这里的Session对象就相当于Jdbc中的Connection))
Session对象里面的方法对数据库实现增,删,改,查的操作。
Session对象中的方法:
(1)saveOrUpdate()
(2)save()
(3)update()
(4)delete()
(5)get()
(6)load()
(7)CreateQuery()
(8)CreateSQLQuery()
(9)CreateCriteria()
最主要的是Session是单线程对象(不能共用)只能自己用不能被其他线程所用
(4)Transaction(用于提交对数据的操作)
事物的四个特性
(1)原子性 即是不可分割,一组操作要么都失败要么都成功
(2)一致性 操作之前和操作之后数据的总数是不变的,就比说转账,小明转给小红500,那么小明的账户要减去-500,小红的账户要+500,但是总的来说小明的钱的总数加上小红的钱的总数,转账的前后是没有改变的
(3)隔离性 多个事物操作同一个数据不会互相影响
(4)持久性 事物提交,在数据库中是生效的