Hibernate环境搭建及使用
程序员文章站
2024-03-21 09:43:04
...
文章目录
导入Hibernate的jar包
创建实体类和数据库表
- 创建实体类,要求属性唯一,目前手动创建,以后可以****自动创建实体类。
- 根据实体类中的属性,创建数据表。其实在使用hibernate的时候,不需要手动创建表。也会自动创建出来。
建立映射关系
使用配置文件,将实体类和数据库表一一对应起来(映射关系)
- 创建
xml
格式的配置文件
- 映射配置文件名称和位置没有固定要求。
- 建议:在实体类所在的包里创建,
实体类名称.hbm.xml
- 配置是
xml
格式,在配置文件中首先引入xml
约束
- 在
hibernate
中引入dtd
约束
插入这行代码在xml文件开头:
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
- 配置映射关系
引入约束文件,解决提示问题
- 可以看出来,在写
xml
文件的时候,默认是没有补全提示的,因为没有导入约束,所以我们需要倒入约束,才能使用补全提示功能,这样就会避免自己写的过程中出错。也方便敲代码。
- 复制这句话
http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd
- 点开
windows-->preference-->XML Catalog-->add
,修改Key type
为URL
,然后将复制的那句粘贴在key
中,在location
中选中你.dtd
问价的位置,导入进来即可。
创建hibernate的核心配置文件
- 核心配置文件的格式:
xml
,名称和位置固定 - 位置:
src
下面,名称:hibernate.cgf.xml
- 在
src
下创建hibernate.cfg.xml
,引入约束:
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
- hibernate在操作过程中,只会加载核心配置文件,其他配置文件不会加载
<?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>
<!-- 1.配置数据库信息 必须要有-->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///Hibernate01</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">***</property>
<!-- 2.配置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>
<!-- 配置数据库方言,每个数据库语法有细微不同的差别-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 3.把映射文件放到核心配置文件中 必须 -->
<mapping resource="com/daq/entity/User.hbm.xml"></mapping>
</session-factory>
</hibernate-configuration>
- 环境搭建好了
测试
- 实际添加操作
- 加载核心配置文件
- 创建
SessionFactory
对象 - 使用
SessionFactory
创建session
对象 - 开启事务
- 写具体逻辑
CRUD
操作 - 提交事务
- 关闭资源
- 代码实现
@Test
public void testAdd() {
// 1. 加载核心配置文件
//在hibernate中封装对象
Configuration cfg=new Configuration();
cfg.configure();
// 2. 创建SessionFactory对象
//读取hibernate配置文件的核心内容,来创建sessionFactory
//在这个过程中,根据映射关系,在数据库中创建表
SessionFactory sessionFactory = cfg.buildSessionFactory();
// 3. 使用SessionFactory创建session对象
Session session = sessionFactory.openSession();
// 4. 开启事务
Transaction tx = session.beginTransaction();
// 5. 写具体逻辑CRUD操作
//添加的功能
User user = new User();
user.setUsername("代澳旗");
user.setPassword("520");
user.setAddress("湖北武汉");
//调用session的方法进行添加
session.save(user);
// 6. 提交事务
tx.commit();
// 7. 关闭资源
session.close();
sessionFactory.close();
}
- 结果
- 千万要注意,映射不能写错了,实体类和数据库的映射不要写错!!!
关键对象
SessionFactory
- 使用
configuration
对象创建sessionFactory
对象
- 根据核心配置文件中,有数据库配置,有映射文件部分,到数据库里面根据映射关系把表创建。
<property name="hibernate.hbm2ddl.auto">update</property>
- 创建
sessionFactory
过程中,特别耗资源
在hibernate
操作中,建议一个项目中一般创建一个sessionFactory
对象,类似于servlet
中的serverContext
,用到单例模式的思想,在静态代码块中创建这个对象
(因为静态代码块在类加载的时候执行,并且只执行一次),所以抽取到工具类中
package com.daq.utils;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/工具类的抽取,写在静态代码块中,保证只创建一个sessionFactory对象
public class HibernateUtils {
static Configuration cfg = null;
static SessionFactory sessionFactory = null;
// 静态代码块实现
static {
// 加载核心配置文件
cfg = new Configuration();
cfg.configure();
sessionFactory = cfg.buildSessionFactory();
}
// 提供一个方法返回sessionFactory
public static SessionFactory getSesionFactory() {
return sessionFactory;
}
}
Session
-
session
类似于jdbc
中的connection
。 -
session
是单线程对象(重点!!!)session
对象不能共用,只能自己用 - 调用
session
中的不同方法实现CRUD
操作。
- 添加
save()
- 修改
update()
- 删除
delete()
- 根据id查询,
get()
方法。 - 根据主键查询,
load()
- 条件查询
createCriteria()
- 用于数据库操作对象
createQuery()
和creatSQLQuery()
Transaction
- 事务对象
4. 开启事务
Transaction tx = session.beginTransaction();
- 事务提交和回滚
tx.commit();
tx.rollback();
- 事务概念
- 原子性(要么成功,要么失败)
- 一致性(操作之前之后都一样)
- 隔离性(多个事务同时操作,他们之间不会影响)
- 持久性(当你提交,数据库里面就生效了)
推荐阅读
-
Hibernate环境搭建及使用
-
简介keepalived及搭建主备切换环境
-
Hibernate环境搭建 博客分类: Hibernate javahibernatemysql
-
mongodb 环境搭建及简单CURD 博客分类: nosql webnosqlmongoinstallcurd
-
Hibernate环境搭建 博客分类: Hibernate javahibernatemysql
-
Weex简介及环境搭建(mac版)
-
使用了nginx+mongerl来搭建了rails的生产环境 博客分类: ruby RailsnginxUbuntuRuby应用服务器
-
使用Gulp搭建前端简单开发环境 博客分类: 前端大全 css
-
使用Maven搭建Hadoop开发环境
-
spring mvc4.1.6 spring4.1.6 hibernate4.3.11 mysql5.5.25开发环境搭建图文教程