搭建hibernate环境

Hibernate概述
什么是框架
1 写程序,使用框架之后,帮我们实现一部分功能,使用框架好处,少写一部分代码实现功能

什么是hibernate框架(重点)
1 hibernate框架应用在javaee三层结构中 dao层框架

2 在dao层里面做对数据库crud操作,使用hibernate实现crud操作,hibernate底层代码就是jdbc,hibernate对jdbc进行封装,使用hibernate好处,不需要写复杂jdbc代码了,
不需要写sql语句实现

3 hibernate开源的轻量级的框架

4 hibernate版本
Hibernate3.x
Hibernate4.x
Hibernate5.x(学习)

lib:hibernate相关jar包

什么是orm思想(重点)

1 hibernate使用orm思想对数据库进行crud操作

 

2 在web阶段学习 javabean,更正确的叫法 实体类

 

3 orm:object relational mapping,对象关系映射

文字描述:

(1)让实体类和数据库表进行一一对应关系

让实体类首先和数据库表对应

让实体类属性 表里面字段对应

(2)不需要直接操作数据库表,而操作表对应实体类对象

 

画图描述:

 

 

 

 

 

Hibernate入门

搭建hibernate环境(重点)

第一步 导入hibernate的jar包

因为使用hibernate时候,有日志信息输出,hibernate本身没有日志输出的jar包,导入其他日志的jar包

不要忘记还有mysql驱动的jar包

第二步 创建实体类

使用hibernate时候,不需要自己手动创建表,hibernate帮把表创建

 

第三步 配置实体类和数据库表一一对应关系(映射关系)

使用配置文件实现映射关系

(1)创建xml格式的配置文件

- 映射配置文件名称和位置没有固定要求

- 建议:在实体类所在包里面创建,实体类名称.hbm.xml

(2)配置是是xml格式,在配置文件中首先引入xml约束

- 学过约束dtd、schema,在hibernate里面引入的约束dtd约束

(3)配置映射关系

 

 1 <hibernate-mapping>
 2     <!-- 1 配置类和表对应 
 3         class标签
 4         name属性:实体类全路径
 5         table属性:数据库表名称
 6     -->
 7     <class name="cn.itcast.entity.User" table="t_user">
 8         <!-- 2 配置实体类id和表id对应 
 9             hibernate要求实体类有一个属性唯一值
10             hibernate要求表有字段作为唯一值
11         -->
12         <!-- id标签
13             name属性:实体类里面id属性名称
14             column属性:生成的表字段名称
15          -->
16         <id name="uid" column="uid">
17             <!-- 设置数据库表id增长策略 
18                 native:生成表id值就是主键自动增长
19             -->
20             <generator class="native"></generator>
21         </id>
22         <!-- 配置其他属性和表字段对应 
23             name属性:实体类属性名称
24             column属性:生成表字段名称 可以任意命名 但是一般让它实体类中的属性名 称一样
25         -->
26         <property name="username" column="username"></property>
27         <property name="password" column="password"></property>
28         <property name="address" column="address"></property>
29     </class>
30 </hibernate-mapping>

 

 

 

第四步 创建hibernate的核心配置文件
(1)核心配置文件格式xml,但是核心配置文件名称和位置固定的
- 位置:必须src下面
- 名称:必须hibernate.cfg.xml

(2)引入dtd约束

(3)hibernate操作过程中,只会加载核心配置文件,其他配置文件不会加载

第一部分: 配置数据库信息 必须的

第二部分: 配置hibernate信息 可选的

第三部分: 把映射文件放到核心配置文件中

 

 实现添加操作

 

第一步 加载hibernate核心配置文件

 

 

 

第二步 创建SessionFactory对象

 

 

 

第三步 使用SessionFactory创建session对象

 

 

 

第四步 开启事务

 

 

 

第五步 写具体逻辑 crud操作

 

 

 

第六步 提交事务

 

 

第七步 关闭资源

 

 1 @Test
 2     public void testAdd() {
 3 //        第一步 加载hibernate核心配置文件
 4         // 到src下面找到名称是hibernate.cfg.xml
 5         //在hibernate里面封装的对象    
 6         Configuration cfg = new Configuration();
 7         cfg.configure();    //这两行表示加载配置文件
 8         //执行的过程:到src下面找到名称是hibernate.cfg.xml   把该文件放入这个//对象中   然后调用方法 执行加载配置文件
 9         
10 //        第二步 创建SessionFactory对象
11         //读取hibernate核心配置文件内容,创建sessionFactory
12         //在这过程中,根据映射关系,在我们配置的数据库里边  把表创建
13         SessionFactory sessionFactory = cfg.buildSessionFactory();
14         
15 //        第三步 使用SessionFactory创建session对象
16         // 类似于连接(可认为是和数据库建立的一个连接)
17         Session session = sessionFactory.openSession();
18         
19 //        第四步 开启事务
20         Transaction tx = session.beginTransaction();
21 
22 //        第五步 写具体逻辑 crud操作
23         //添加功能
24         User user = new User();
25         user.setUsername("小王");
26         user.setPassword("250");
27         user.setAddress("日本");
28         //调用session的方法实现添加
29         session.save(user);
30         
31 //        第六步 提交事务
32         tx.commit();
33 
34 //        第七步 关闭资源
35         session.close();
36         sessionFactory.close();
37     }

看到效果:

(1)是否生成表

(2)看表是否有记录

代码实践:

 

 1 package org.model;
 2 
 3 public class User {
 4     private int uid;
 5     private String username;
 6     private String password;
 7     private String address;
 8     public int getUid() {
 9         return uid;
10     }
11     public void setUid(int uid) {
12         this.uid = uid;
13     }
14     public String getUsername() {
15         return username;
16     }
17     public void setUsername(String username) {
18         this.username = username;
19     }
20     public String getPassword() {
21         return password;
22     }
23     public void setPassword(String password) {
24         this.password = password;
25     }
26     public String getAddress() {
27         return address;
28     }
29     public void setAddress(String address) {
30         this.address = address;
31     }
32     
33 }

 

继续在该包下创建映射配置文件

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC 
 3     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 4     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 5 <hibernate-mapping>
 6     <!--1.配置类和表的对应关系  name属性 :类的全路径  table:是数据库中的表名称  -->
 7     <class name="org.model.User" table="t_user">
 8         <!-- 2.hibernate要求属性有一个属性唯一值 
 9                hinernate要求表中有一个字段 作为唯一值
10                name:实体中的id属性的名称   column:表中的主键列名称 一般和实体类中的名称一样 但是不一样也可以-->
11         <id name="uid" column="uid">
12         <!-- 主键生成策略 -->
13             <generator class="native"></generator>
14         </id>
15         <property name="username" column="username"></property>
16         <property name="password" column="password"></property>
17         <property name="address" column="address"></property>
18     </class>
19 </hibernate-mapping>

在src下面创建核心配置文件

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE hibernate-configuration PUBLIC
 3     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 4     "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
 5 <hibernate-configuration>
 6     <session-factory>
 7     <!--1. 配置数据库信息 -->
 8         <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
 9         <property name="hibernate.connection.username">root</property>
10         <property name="hibernate.connection.password">jay571018</property>
11         <property name="hibernate.connection.url">jdbc:mysql:///hibernate1_demo1</property>
    <!--<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate1_demo1</property> 上句代码和此句一样 多出了/表示是 本地的3306端口-->
12 13 <!--2. 配置hibernate信息 可选的 --> 14 <!-- 自动建立表 --> 15 <property name="hibernate.hbm2ddl.auto">update</property> 16 <!-- 控制台打印底层sql语句 --> 17 <property name="show_sql">true</property> 18 <!-- 格式化控制台打印的sql语句 --> 19 <property name="format_sql">true</property> 20 21 <!-- 定义方言 --> 22 <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 23 24 <!--3. 把映射文件放到核心配置文件中 resource属性:给出关系映射文件的路径--> 25 <!-- 类的全路径 和文件的全路径是不同的 user类的全路径是:org.model.User User.hbm.xml文件的全路径是: 26 /Hibernate1_Demo1/src/org/model/User.hbm.xml 但是因为核心配置文件的位置是在src下 所以/org/model/User.hbm.xml即可 27 ctrl单击 如果到达指定的文件 说明路径配置正确--> 28 <mapping resource="org/model/User.hbm.xml"/> 29 </session-factory> 30 </hibernate-configuration>

测试程序:

 1 package org.testdemo;
 2 import org.hibernate.Session;
 3 import org.hibernate.SessionFactory;
 4 import org.hibernate.Transaction;
 5 import org.hibernate.cfg.Configuration;
 6 import org.junit.Test;
 7 import org.model.User;
 8 
 9 public class TestDemo {
10     @Test
11     public void test() {
12 
13         // 第一步 加载hibernate核心配置文件
14         Configuration config=new Configuration();
15         config.configure();
16 
17         // 第二步 创建SessionFactory对象
18         SessionFactory sessionfactory=config.buildSessionFactory();
19 
20         // 第三步 使用SessionFactory创建session对象
21         //注意这里的session和javaweb中的不是同一个概念
22         Session session=sessionfactory.openSession();
23 
24         // 第四步 开启事务
25         Transaction tran=session.beginTransaction();
26 
27         // 第五步 写具体逻辑 crud操作
28         //hibernate对原始jdbc进行了封装,对数据库的操作通过对象关系映射变为对实体类的操作
29         User u=new User();
30         u.setUsername("jay");
31         u.setPassword("123");
32         u.setAddress("台湾");
33         session.save(u);
34         // 第六步 提交事务
35         tran.commit();
36         // 第七步 关闭资源
37         session.close();
38         sessionfactory.close();
39     }
40 }

本程序在运行之前只创建了数据库hibernate1_demo1

运行程序之后,hibernate根据配置文件中的信息,帮我们创建出了表  并且表中也有了user这个对象的数据

控制台打印:

1 Hibernate: 
2     insert 
3     into
4         t_user
5         (username, password, address) 
6     values
7         (?, ?, ?)

完成了数据的保存。

注意:

以上3个文件在hibernate的jar包中都可以搜索到

第一个文件:核心配置文件中的属性的值  都可以在该文件中找到

建立表的属性:

数据库配置属性:

 

核心配置文件中引入的约束在第二个文件中可以找到

 

 对象关系映射文件中引入的约束在第三个文件中可以找到

 

参考视频:http://v.itcast.cn/course/203.html

欢迎大家转载,但请注明原创链接:http://www.cnblogs.com/Joke-Jay/p/6517021.html

 

posted @ 2017-03-07 21:56  乔克叔叔  阅读(511)  评论(0编辑  收藏  举报