hibernate的一些基本的认识
把对象持久化: 把对象的信息保存到数据库或者是文件.
总结: hibernate是对jdbc进行轻量级封装的orm框架,充当项目的持久层。
为什么需要Hibernate ?
快速入门案列:
Hibernate可以用在j2ee(web)项目 , 亦可以用于j2se项目中。
我们使用手动配置hibernate方式开发一个hibernate项目,完成crud操作,开发流程:
开发流程:
1. 由Domain object àMappingàdb.(官方推荐)
2. 由DB开始,用工具生成mapping和Domain pbject.(使用较多)
3. 由映射文件开始。
使用第二种方式开发项目
创建employ表,
5. 开发domain对象和对象关系映射文件
对象关系映射文件,作用是用于指定domain对象和表的映射关系,该文件的取名有规范domain文件。 Hbm.xml.一般我们放在和domain对象同一个文件夹下(包下)
创建一个序列,j将来进行必要的增长…..
1 <class name="Employee.java" table="employee">
2 <!-- id元素用于指定主键属性 -->
3 <id name="id" column="id" type="java.lang.String">
4 <!-- 该元素用于指定主键生成策略 hilo native increment sequence -->
5 <!--
6 <generator class="sequence">
7 <param name="sequence">emp_seq</param>
8 </generator>
9 -->
10 </id>
11 <property name="id" type="java.lang.String">
12 <column name="id" not-null="false" />
13 </property>
14 <property name="name" type="java.lang.String">
15 <column name="name" not-null="false" />
16 </property>
17 <property name="email" type="java.lang.String">
18 <column name="email" not-null="false" />
19 </property>
20 <property name="hibernate" type="java.util.Date">
21 <column name="hibernate" not-null="false" />
22 </property>
23 </class>
1 <session-factory>
2 <!-- hibernate 设计者,给我们提供了一些常用的配置 -->
3
4 <!-- 配置使用的driver -->
5 <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
6
7 <!-- 配置使用的url -->
8 <property name="connection.url">jdbc:mysql://localhost:3306/bigweb</property>
9
10 <!-- 配置使用的username -->
11 <property name="connection.username">root</property>
12
13 <!-- 配置使用的password -->
14 <property name="connection.password">123</property>
15
16 <!-- 配置dialect方言,明确告诉连接那种数据库 -->
17 <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
18
19 <!-- 添加一个映射文件 -->
20 <mapping resource="com/gxj/domain/Employee.hbm.xml"/>
21
22 </session-factory>
1. 测试文件TestMain.java
1. 现在我们来体验一下hiberbate切换数据的便利之处。
2. 这次我们使用,让hibernate自动完成 domain->映射文件->表的工作
3. 现在我们来重新配置hibernate.cfg.xml文件
1 <hibernate-configuration>
2 <session-factory>
3 <!-- hibernate 设计者,给我们提供了一些常用的配置 -->
4
5 <!-- 配置使用的driver -->
6 <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
7
8 <!-- 配置使用的url -->
9 <property name="connection.url">jdbc:mysql://localhost:3306/bigweb</property>
10
11 <!-- 配置使用的username -->
12 <property name="connection.username">root</property>
13
14 <!-- 配置使用的password -->
15 <property name="connection.password">123</property>
16
17 <!-- 配置dialect方言,明确告诉连接那种数据库 -->
18 <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
19 <!-- 让mysql自动给我们创建表 ,create,表示如果没有该表则创建,如果有,删除后,再创建-->
20 <!-- 对于update,如果有这个表,而却表的结构没有发生变化,则不创建,否则创建,如果没有表则创建新表 -->
21
22 <property name="hbm2ddl.auto">update</property>
23 <!-- 添加一个映射文件 -->
24 <mapping resource="com/gxj/domain/Employee.hbm.xml"/>
25
26 </session-factory>
27 1. </hibernate-configuration>
1 public class TestMain {
2 /**
3 * @param args
4 */
5 public static void main(String [] args){
6 //我们使用hibernate完成crud操作[这里我们只见对象,不见表]
7 //现在我们不是用Service,直接测试
8 //1,创建configuration,该对象用于读取hibernate.cfg.xml,并完成初始化
9 Configuration configuration = new Configuration().configure();
10 //2.创建SessionFactory[这是一个会话工厂,是一个重量级的对象]
11 SessionFactory seesionFactory = configuration.buildSessionFactory();
12 Session session = seesionFactory.openSession();
13 //4.对hiberate而言,要求程序员,在进行crud的时候,使用事务提交,否者不生效
14 Transaction transaction = session.beginTransaction();
15 //3.创建Session相当于jdbc Connection [servlet HttpSession,也不是jsp Session]
16 //添加一个雇员
17 Employee employee= new Employee();
18 employee.setId("1");
19 employee.setName("龚细军");
20 employee.setEmail("1005267096@qq.com");
21 employee.setHibernate(new Date());
22 //insert.........
23 //保存
24 session.save(employee);
25 //提交
26 transaction.commit();
27 session.close();
28 }
1 2. 对对象映射文件,做了相应的修改
2 <!-- id元素用于指定主键属性 -->
3 <!-- 对主键生成策略,我们做了修改 -->
4 <id name="id" column="id" type="java.lang.Integer">
5 <!-- 该元素用于指定主键生成策略 hilo native increment sequence -->
6 <!--
7 <column name="id" not-null="false" />
8 <generator class="sequence">
9 <param name="sequence">emp_seq</param>
10 </generator>
11 -->
12 <generator class="increment"></generator>
13 </id>
14 1.
1. 对于第一种,表现层—>业务逻辑层—》db 这样一种结构的耦合性比较强、
2. 对于第二种。表现层à业务逻辑层—>数据持久层-àmysql_db 这种结构的数据耦合性比较低。不直接对数据库进行操作、
1. hibernate的基本概念:
hibernate是轻量级的orm框架.orm全称是object/relation mapping [对象/关系 映射]
O : object –业务层(只对对象进行操作)
R: reletion—关系数据库
M:mapping---对象关系映射文件
------什么是POJO类? 它有什么要求?
1. pojo类是和一张表映射的 --》简单的java对象、普通的javaBean
2. 一般我们放在com.xxx.domain下
3. Pojo需要一份主键属性(用于标示一个pojo对象)
4. 除了主键属性外,它应当还有其他属性,(属性一般的访问权限是私有的(private)
5. 提供get/set方法
6. 他应当有一个无参的构造方法(hibernate反射)
7. Pojo类其实就是一个javaBean,有些人将pojo也称之为Data对象.
除了Hibernate 这个orm框架,还有一些: Apache ojb /toplink/ibatis/ejb cmp 这些都是orm框架
Configuration类:
(1).负责管理hibernate的配置信息
(2).读取hibernate.cfg.xml
(3).加载hibernate.cfg.xml配置文件中配置的驱动,url,用户名,密码,连接池。
(4).管理,*.hbm.xml对象关系文件。
Hibernate.cfg.xml文件
1. 该文件主要用于指定各个参数。是hibernate核心文件。
2. 默认放在src目录下,也可以放在别的目录下、
3. 指定连接数据库的驱动,用户名,密码,url,连接池
4. 指定对象关系映射文件的位置
5. 也可使用hibernate.properties文件来替代该文件。(推荐使用hibernate.cfg.xml)
6. Hibernate.properties文件:作用和Hibernate.cfg.xml文件一致
7. 对象关系映射文件(.hbm.xml)
1. 该文件主要作用是建立表和类的映射关系,是不可或缺的重要文件。
2. 一般放在其映射的类同一目录下,但是不是必须的。
3. 命名方式一般是:类名.hmb.xml.,但是不是必须。