Hibernate 学习笔记(一)

本贴最后更新于 2650 天前,其中的信息可能已经东海扬尘

Hibernate 入门

    搭建 hibernate 环境

    出于方便的考虑,建立一个 maven 项目,这样就不用考虑 jar 包问题,只需要将相应的 maven 坐标找到就可以了,以下是我演示项目 pom.xml 里的坐标

  <dependency>
	<groupId>org.hibernate</groupId>
	<artifactId>hibernate-core</artifactId>
	<version>5.1.0.Final</version>
  </dependency>
  <dependency>
	<groupId>log4j</groupId>
	<artifactId>log4j</artifactId>
	<version>1.2.17</version>
  </dependency>
  <dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<version>5.1.34</version>
  </dependency>
  <dependency>
	<groupId>org.hibernate</groupId>
	<artifactId>hibernate-annotations</artifactId>
	<version>3.5.6-Final</version>
  </dependency>
  <dependency>
	<groupId>junit</groupId>
	<artifactId>junit</artifactId>
	<version>3.8.1</version>
	<scope>test</scope>
  </dependency>

    创建实体类

    这时应当注意的是,在 hibernate 中要求实体类有一个属性唯一的值,也就是数据库中的主键,因为在 hibernate 中可以自动生成表,因此要写这么一个属性。

  public class User {
	private int uid;
	private String userName;
	private String password;
	private String address;
  }
```<br/>
以上是我的User类中的属性。<br/>

## &nbsp;&nbsp;&nbsp;&nbsp;配置实体类和数据库表的对应关系<br/>
> &nbsp;&nbsp;&nbsp;&nbsp;(1)首先创建一个xml格式的配置文件。映射配置文件名称和位置没有固定要求。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;建议:在实体类所在的包里面创建,实体类名称为XXXX.hbm.xml
> &nbsp;&nbsp;&nbsp;&nbsp;(2)应当配置相应的xml约束,一般是dtd格式当然还有schema格式。一般在网上都会搜的到配置文件,直接借过来用!!
<br/>
以下是我的映射文件(里面有解释)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 5.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-5.0.dtd"> 
<hibernate-mapping>
  <!--第一步
	首先配置类和表对应的class标签
	name属性:实体类全路径
	table属性:对应数据库表的名字
  -->
 <class name="entity.User" table="t_user">
	<!--第二步
		配置实体类id和表对应的id,也就是所说的表的主键。
		hibernate要求实体类有一个属性唯一值,即同时要求此id作为表字段的主键
		name属性:实体类里面id的属性名称
		column属性:生成表字段名称(可以不填,那么在生成表时会以name值作为表字段)
	 -->
	<id name="uid" column="uid">
		<generator class="native"></generator>
	</id>
	<!--第三步
		配置其他属性和表字段对应
		name属性:实体类里面id的属性名称
		column属性:生成表字段名称(可以不填,那么在生成表时会以name值作为表字段)
	 -->
	<property name="userName" column="userName"></property>
	<property name="password" column="password"></property>
	<property name="address" column="address"></property>
  </class>
</hibernate-mapping>

## &nbsp;&nbsp;&nbsp;&nbsp;创建hibernate核心的配置文件<br/>
> &nbsp;&nbsp;&nbsp;&nbsp;(1)首先创建一个xml格式的配置文件。注意的是,核心配置文件的名称和位置是固定的,但在spring中映射配置文件名称和位置没有固定要求(请参照以后的spring学习笔记 
**&nbsp;&nbsp;&nbsp;&nbsp;位置:必须在src下** 
**&nbsp;&nbsp;&nbsp;&nbsp;名称:hibernate.cfg.xml** 
> &nbsp;&nbsp;&nbsp;&nbsp;(2)hibernate操作过程中,只会加载核心配置文件,其他配置文件不会加载
> &nbsp;&nbsp;&nbsp;&nbsp;(3)配置映射文件信息时,用\<mapping\>标签,resource应当写上映射文件的全路径,因为都在src包下,只需写不同的包名+文件名在这即为:entity/User.hbm.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="hibernate.connection.driver_class">com.mysql.jdbc.Driver </property>
	  <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/webtest</property>
	  <property name="hibernate.connection.username">root</property>
	  <property name="hibernate.connection.password">123</property>
	  <!-- 配置hibernate信息 -->
	  <!--输出底层sql语句-->
	  <property name="hibernate.show_sql">true</property>
	  <!--输出底层sql的格式语句-->
	  <property name="hibernate.format_sql">true</property>
	  <!-- 配置自动创建表  update的意思是没表创建,有表就更新-->
	  <property name="hibernate.hbm2ddl.auto">update</property>
	  <!-- 注意! 这里配置的是数据库的方言,比如在mysql中的分页操作用到limit关键字,需要将mysql方言做如下配置  -->
	  <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
	  <!-- 配置映射文件信息 -->
	  <mapping resource="entity/User.hbm.xml"/>
	</session-factory>
</hibernate-configuration>

## &nbsp;&nbsp;&nbsp;&nbsp;实现基本操作<br/>
> &nbsp;&nbsp;&nbsp;&nbsp;(1) **加载核心配置文件**
> &nbsp;&nbsp;&nbsp;&nbsp;(2) **创建sessionFactory对象**
> &nbsp;&nbsp;&nbsp;&nbsp;(3) **使用sessionFactory创建session对象**
> &nbsp;&nbsp;&nbsp;&nbsp;(4) **开启事务** 
> &nbsp;&nbsp;&nbsp;&nbsp;(5) **写出具体的操作CRUD** 
> &nbsp;&nbsp;&nbsp;&nbsp;(6) **提交事务** 
> &nbsp;&nbsp;&nbsp;&nbsp;(7) **关闭资源** 
如果在数据库中观察到了表的创建。表中有数据,说明配置成功。

public class Demo1 {
@Test
public void testAdd(){
//加载核心配置文件
Configuration cfg = new Configuration();
cfg.configure();
//创建 sessionFactory 对象,在此过程中,根据映射关系在数据库中创建相应的表
SessionFactory sessionFactory = cfg.buildSessionFactory();
//使用 sessionFactory 创建 session 对象
Session session = sessionFactory.openSession();
// 开启事务
Transaction tx = session.beginTransaction();
//写出具体的操作 CRUD
User user = new User();
user.setUserName("小王");
user.setAddress("sd");
user.setPassword("123");
session.save(user);
// 提交事务
tx.commit();
//关闭资源
session.close();
sessionFactory.close();
}
}


# Hibernate配置文件详解<br/>
## &nbsp;&nbsp;&nbsp;&nbsp;hibernate映射配置文件<br/>
> &nbsp;&nbsp;&nbsp;&nbsp;1. **映射配置文件名称没有固定要求**
> &nbsp;&nbsp;&nbsp;&nbsp;2. **映射配置文件中,标签name属性值写实体类相关内容**
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1) **class标签name属性值为实体类全路径**
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(2) **id标签和property标签 name属性值为实体类属性名称**
> &nbsp;&nbsp;&nbsp;&nbsp;3. **id标签和property标签,column属性可以忽略**
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1) **不写值和name属性一样**
> &nbsp;&nbsp;&nbsp;&nbsp;4. **property标签type属性,设置生成表字段类型,自动对应类型** 

## &nbsp;&nbsp;&nbsp;&nbsp;hibernate核心配置文件<br/>
> &nbsp;&nbsp;&nbsp;&nbsp;1. **配置写位置要求在\<bibernate-configuration>\<session-factory>\</session-factory>\</bibernate-configuration>中**
> &nbsp;&nbsp;&nbsp;&nbsp;2. **配置三部分要求**
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1) **数据库部分必须**
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(2) **hibernate部分可选**
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(3) **映射文件必须**
> &nbsp;&nbsp;&nbsp;&nbsp;3. **i配置文件名称和位置是固定的**
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1) **位置,src下**
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(2) **名称,hibernate.cfg.xml**

# Hibernate核心API<br/>
## &nbsp;&nbsp;&nbsp;&nbsp;Configuration<br/>
> &nbsp;&nbsp;&nbsp;&nbsp;1. **代码**
Configuration cfg = new Configuration();
cfg.configure();
> &nbsp;&nbsp;&nbsp;&nbsp;2. **会到src下面找到名称为hibernate.cfg.xml配置文件,创建对象,把配置文件加载进去**

## &nbsp;&nbsp;&nbsp;&nbsp;SessionFactory<br/>
> &nbsp;&nbsp;&nbsp;&nbsp;1. **使用configuration对象创建sessionFactory对象**
SessionFactory sessionFactory = cfg.buildSessionFactory();
> &nbsp;&nbsp;&nbsp;&nbsp;2. **创建SessionFactory的过程中非常消耗资源**
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1) **在hibernate中,建议一个项目只创建一个sessionFactory对象(创建一个工具类)**

## &nbsp;&nbsp;&nbsp;&nbsp;Session<br/>
> &nbsp;&nbsp;&nbsp;&nbsp;1. **session类似于jdbc中的connection**
> &nbsp;&nbsp;&nbsp;&nbsp;2. **调用session对象里的不同方法进行CRUD**
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1) **添加 save 方法**
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(2) **修改 update 方法**
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(3) **删除 delete 方法**
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(4) **根据id查询 get 方法**
> &nbsp;&nbsp;&nbsp;&nbsp;3. **session对象是单线程对象**
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1) **session对象不能共用,只能自己使用**
> &nbsp;&nbsp;&nbsp;&nbsp;4. **property标签type属性,设置生成表字段类型,自动对应类型** 

## &nbsp;&nbsp;&nbsp;&nbsp;Transaction<br/>
> &nbsp;&nbsp;&nbsp;&nbsp;1. **事务对象**
Transaction tx = session.beginTransaction();
> &nbsp;&nbsp;&nbsp;&nbsp;2. **事务提交和回滚**
tx.commit();
tx.rollback();
> &nbsp;&nbsp;&nbsp;&nbsp;3. **事务特性(ACID)**
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1) **原子性、一致性、隔离性、持久性** 
  • Hibernate

    Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,使得 Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。

    39 引用 • 103 回帖 • 684 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3168 引用 • 8207 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...