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/>
## 配置实体类和数据库表的对应关系<br/>
> (1)首先创建一个xml格式的配置文件。映射配置文件名称和位置没有固定要求。
建议:在实体类所在的包里面创建,实体类名称为XXXX.hbm.xml
> (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>
## 创建hibernate核心的配置文件<br/>
> (1)首先创建一个xml格式的配置文件。注意的是,核心配置文件的名称和位置是固定的,但在spring中映射配置文件名称和位置没有固定要求(请参照以后的spring学习笔记
** 位置:必须在src下**
** 名称:hibernate.cfg.xml**
> (2)hibernate操作过程中,只会加载核心配置文件,其他配置文件不会加载
> (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>
## 实现基本操作<br/>
> (1) **加载核心配置文件**
> (2) **创建sessionFactory对象**
> (3) **使用sessionFactory创建session对象**
> (4) **开启事务**
> (5) **写出具体的操作CRUD**
> (6) **提交事务**
> (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/>
## hibernate映射配置文件<br/>
> 1. **映射配置文件名称没有固定要求**
> 2. **映射配置文件中,标签name属性值写实体类相关内容**
> (1) **class标签name属性值为实体类全路径**
> (2) **id标签和property标签 name属性值为实体类属性名称**
> 3. **id标签和property标签,column属性可以忽略**
> (1) **不写值和name属性一样**
> 4. **property标签type属性,设置生成表字段类型,自动对应类型**
## hibernate核心配置文件<br/>
> 1. **配置写位置要求在\<bibernate-configuration>\<session-factory>\</session-factory>\</bibernate-configuration>中**
> 2. **配置三部分要求**
> (1) **数据库部分必须**
> (2) **hibernate部分可选**
> (3) **映射文件必须**
> 3. **i配置文件名称和位置是固定的**
> (1) **位置,src下**
> (2) **名称,hibernate.cfg.xml**
# Hibernate核心API<br/>
## Configuration<br/>
> 1. **代码**
Configuration cfg = new Configuration();
cfg.configure();
> 2. **会到src下面找到名称为hibernate.cfg.xml配置文件,创建对象,把配置文件加载进去**
## SessionFactory<br/>
> 1. **使用configuration对象创建sessionFactory对象**
SessionFactory sessionFactory = cfg.buildSessionFactory();
> 2. **创建SessionFactory的过程中非常消耗资源**
> (1) **在hibernate中,建议一个项目只创建一个sessionFactory对象(创建一个工具类)**
## Session<br/>
> 1. **session类似于jdbc中的connection**
> 2. **调用session对象里的不同方法进行CRUD**
> (1) **添加 save 方法**
> (2) **修改 update 方法**
> (3) **删除 delete 方法**
> (4) **根据id查询 get 方法**
> 3. **session对象是单线程对象**
> (1) **session对象不能共用,只能自己使用**
> 4. **property标签type属性,设置生成表字段类型,自动对应类型**
## Transaction<br/>
> 1. **事务对象**
Transaction tx = session.beginTransaction();
> 2. **事务提交和回滚**
tx.commit();
tx.rollback();
> 3. **事务特性(ACID)**
> (1) **原子性、一致性、隔离性、持久性**
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于