hibernate学习笔记(一)

目录

 

一、hibernate简介

1.1 hibernate是什么

1.2 hibernate的位置​

1.3 ORM的概念

二、hibernate框架的搭建

2.1 导包

2.2 配置对象关系映射

2.3 配置主文件

2.4 测试

三、配置文件详解

3.1 orm 元数据

3.2 主配置文件

四、hibernate api详解

4.1 代码解读

4.2 sessionFactory对象

4.3 增删改查

五:总结


一、hibernate简介

1.1 hibernate是什么

hibernate是一个orm数据库访问框架,能让我们以面向对象的思想来操作数据库,非常的简洁和方便。

1.2 hibernate的位置

1.3 ORM的概念

orm全称 object relationg mapping. 对象关系映射

orm分4级

dbutil属于1级,简单的封装;mybatis属于2级;hibernate属于4级,完全面向对象 操作。

二、hibernate框架的搭建

2.1 导包

导入required包

导入驱动包

2.2 配置对象关系映射

建表

编写类

package cn.itcast.bean;

public class Customer {

	public int id;
	public String name;
	public int age;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
}

配置Customer.hbm.xml文件映射

导入约束:<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="cn.itcast.bean">
	<class name="Customer" table="customer">
		<id name="id" column="id">
			<generator class="native"></generator>
		</id>
		<property name="name" column="name"></property>
		<property name="age" column="age"></property>
	</class>
</hibernate-mapping>

2.3 配置主文件

hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
	<session-factory>
		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="hibernate.connection.url">jdbc:mysql:///hibernate</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">root</property>
		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

		<property name="hibernate.show_sql">true</property>
		<property name="hibernate.format_sql">true</property>

		<property name="hibernate.hbm2ddl.auto">update</property>
		
		<mapping resource="cn/itcast/bean/Customer.hbm.xml" />
	</session-factory>
</hibernate-configuration>

2.4 测试

package cn.itcast.test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;

import cn.itcast.bean.Customer;

public class Demo {

	@Test
	public void testSave(){
		
		Configuration config = new Configuration().configure();
		SessionFactory sessionFactory = config.buildSessionFactory();
		
		Session session = sessionFactory.openSession();
		Transaction transaction = session.beginTransaction();
		
		Customer customer = new Customer();
		customer.setName("hibernate");
		customer.setAge(58);
		
		session.save(customer);
		transaction.commit();
		session.close();
		sessionFactory.close();
	}
}

输出如下:

三、配置文件详解

3.1 orm 元数据

一般的,orm元数据配置文件一类名+.hbm.xml结束,约定大于配置。

整体配置:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="cn.itcast.bean">
	<class name="Customer" table="customer">
		<id name="id" column="id">
			<generator class="native"></generator>
		</id>
		<property name="name" column="name"></property>
		<property name="age" column="age"></property>
	</class>
</hibernate-mapping>

根元素:

 配置表与实体的映射关系
 package:填写一个包名,以后用到包内的某个类,就可以直接写类名了 这里的实体包名为cn.itcast.bean,我们要用下边的Customer来映射 
<hibernate-mapping package="cn.itcast.bean" >
	
</hibernate-mapping>

class元素:

class:配置实体与表的映射关系
name:某个实体的完整类名,因为上边已经用了package属性,所以只用写上类名就可以
table:要映射的表名称 对应我们数据库中的customer

<class name="Customer" table="customer">
	
</class>

id元素:

id:配置主键映射的属性 
name:填写主键对应的属性名 
column(可选):填写表中的主键列名。默认值:列名会默认使用属性名 
type(可选):填写列(属性)的类型。hibernate会自动检测实体的数据类型。 每个类型有三种填法:java类型、hibernate类型、数据库类型 
not-null(可选):配置该属性(列)是否不能为空。默认是:false,可以为空。
length(可选):配置数据库中列的长度。默认值:使用数据库中类型最大的长度。
<id name="id" column="id">                                                                                                                                                         
    <generator class="native"></generator>                                                                                                                                         
</id>                                                                                                                                                                              

property元素:

property: 除id以外其他属性名的映射 和id的基本一样                                                      
name:填写主键对应的属性名 column(可选):填写表中的主键列名。默认值:列名会默认使用属性名                                    
type(可选):填写列(属性)的类型。hibernate会自动检测实体的数据类型。                                             
		每个类型有三种填法:java类型、hibernate类型、数据库类型                                             
not-null(可选):配置该属性(列)是否不能为空。默认是:false,可以为空。                                            
length(可选):配置数据库中列的长度。默认值:使用数据库中类型最大的长度。                                               
                                                                                        
<property name="name" column="name"></property>                                            
<property name="age" column="age"></property>                                              

整体配置:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<!-- 配置表与实体的映射关系 -->
<!-- package:填写一个包名,以后用到包内的某个类,就可以直接写类名了 这里的实体包名为cn.itcast.bean,我们要用下边的Customer来映射 -->
<hibernate-mapping package="cn.itcast.bean">

	<!-- class:配置实体与表的映射关系 name:某个实体的完整类名,因为上边已经用了package属性,所以只用写上类名就可以 table:要映射的表名称 
		对应我们数据库中的customer -->
	<class name="Customer" table="customer">

		<!-- id:配置主键映射的属性
		 	name:填写主键对应的属性名 column(可选):填写表中的主键列名。默认值:列名会默认使用属性名
		  	type(可选):填写列(属性)的类型。hibernate会自动检测实体的数据类型。 
					每个类型有三种填法:java类型、hibernate类型、数据库类型 
			not-null(可选):配置该属性(列)是否不能为空。默认是:false,可以为空。 
			length(可选):配置数据库中列的长度。默认值:使用数据库中类型最大的长度。 -->
		<id name="id" column="id">
			<generator class="native"></generator>
		</id>
		<!-- property: 除id以外其他属性名的映射 和id的基本一样
			name:填写主键对应的属性名 column(可选):填写表中的主键列名。默认值:列名会默认使用属性名
		  	type(可选):填写列(属性)的类型。hibernate会自动检测实体的数据类型。 
					每个类型有三种填法:java类型、hibernate类型、数据库类型 
			not-null(可选):配置该属性(列)是否不能为空。默认是:false,可以为空。 
			length(可选):配置数据库中列的长度。默认值:使用数据库中类型最大的长度。
		-->
		<property name="name" column="name"></property>
		<property name="age" column="age"></property>
	</class>
</hibernate-mapping>

3.2 主配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
	<session-factory>
		 数据库驱动
		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
		 数据库连接
		<property name="hibernate.connection.url">jdbc:mysql:///hibernate</property>
		 用户名
		<property name="hibernate.connection.username">root</property>
		 密码 
		<property name="hibernate.connection.password">root</property>
		 数据库方言 针对不同的数据库生成不同的sql语句,标准的sql语句都一样,但不同的数据库对于同一个功能有不同的语法
		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

		 显示sql和sql语句格式化
		<property name="hibernate.show_sql">true</property>
		<property name="hibernate.format_sql">true</property>

		## auto schema export 自动导出表结构. 自动建表 
		#hibernate.hbm2ddl.auto create 自动建表.每次框架运行都会创建新的表.以前表将会被覆盖,表数据会丢失.(开发环境中测试使用) 
		#hibernate.hbm2ddl.auto create-drop 自动建表.每次框架运行结束都会将所有表删除.(开发环境中测试使用) 
		#hibernate.hbm2ddl.auto update(推荐使用) 自动生成表.如果已经存在不会再生成.如果表有变动.自动更新表(不会删除任何数据). 
		#hibernate.hbm2ddl.auto validate 校验.不自动生成表.每次启动会校验数据库中表是否正确.校验失败.
		<property name="hibernate.hbm2ddl.auto">update</property>

		引入元数据配置的路径
		<mapping resource="cn/itcast/bean/Customer.hbm.xml" />
	</session-factory>
</hibernate-configuration>

四、hibernate api详解

4.1 代码解读

package cn.itcast.test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;

import cn.itcast.bean.Customer;

public class Demo {

	@Test
	public void testSave(){
		
		//创建hibernate配置对象
		Configuration config = new Configuration();
		
		//调用configure 加载配置,默认加载src下的hibernate.cfg.xml
		config.configure();
		
		//根据配置信息 创建sessionFactory 对象
		SessionFactory sessionFactory = config.buildSessionFactory();
		
		//打开一个回话连接,相当于jdbc中的openConneciton了。
		Session session = sessionFactory.openSession();
		
		//开启事务并使用该事务提交,也可以不用
		Transaction transaction = session.beginTransaction();
		
		//保存操作
		Customer customer = new Customer();
		customer.setName("hibernate");
		customer.setAge(58);
		
		session.save(customer);
		
		//提交事务
		transaction.commit();
		//处理善后问题,关闭资源
		session.close();
		sessionFactory.close();
	}
}

4.2 sessionFactory对象

sessionFactory功能:用于创建操作数据库核心对象session对象的工场,简单涞水就是创建session对象

注意:1.sessionFactory 负责保存和使用所有配置信息。消耗内存资源非常大。可以把sessionFactory看成一个数据库,

hibernate.cfg.xml 可以配置多个sessionFactory就可以实现多个数据库。

session对象可以看做每个数据库的连接了。

2.sessionFactory数据线程安全的对象设计。

结论:在web项目中,只创建一个sessionFactory

4.3 增删改查

增加:

//保存操作                                   
Customer customer = new Customer();      
customer.setName("hibernate");           
customer.setAge(58);                     
                                         
session.save(customer);                  

查询:

Customer customer = session.get(Customer.class, 1);     
System.out.println(customer);                           

修改(一般需要先查出来,然后对相应属性修改复制,然后更新):

Customer customer = session.get(Customer.class, 1);  
                                                     
customer.setName("修改");                              
session.update(customer);                            

删除:

Customer customer = session.get(Customer.class, 1);
session.delete(customer);                          

五:总结

今天我们队hibernate有了一个初步的了解,基本的使用方法就是这样了。我们后续继续学习深入的内容

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值