Hibernate 第一天

本贴最后更新于 1859 天前,其中的信息可能已经斗转星移

Java EE 三层结构

  1. web 层:struts2
  2. service 层:spring
  3. dao 层:hibernate
  • 对数据库进行 crud 操作

Hibernate 配置文件

  • 映射配置文件
  1. 映射文件的名称和位置没有固定要求
  2. class 标签 name 属性值实体类全路径
  3. id 标签和 property 标签 name 属性值 实体类名称
  4. id 标签和 property 标签,column 属性可以省略
  5. property 标签 type 属性,设置生成表字段类型,自动对应类型(可以不做设置)
//实体类User.java
public class User {
	private int uid;
	private String username;
	private String password;
	private String address;
	public int getUid() {
		return uid;
	}
	public void setUid(int uid) {
		this.uid = uid;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
}

//映射文件,User.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>
	<class name="com.eric.demo.entity.User" table="t_user">
		<id name="uid" column="uid">
		<generator class="native"></generator>
		</id>
		<property name="username" column="username"></property>
		<property name="password" column="password"></property>
		<property name="address" column="address"></property>
	</class>
</hibernate-mapping>

  • 核心配置文件
  1. 数据库部分必须配置
  2. hibernate 部分可选
  3. 映射文件必须配置
  4. 核心配置文件名称和位置固定(hibernate.cfg.xml、位置在 src 下)
  5. 该文件配置完成后,很少修改
<?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_test</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">0314</property>
		<!-- 第二部分,配置hibernate信息(可选) -->
		<property name="hibernate.show_sql">true</property>
		<property name="hibernate.fromat_sql">true</property>
		<!-- 自动生成表 -->
		<property name="hibernate.hbm2ddl.auto">update</property>
		<!-- 配置数据库方言 
			让hibernate框架识别不同的数据库所持有的语句
		-->
		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
		<!-- 第三部分,把映射文件放到核心文件中(必须) -->
		<mapping resource="com/eric/demo/entity/User.hbm.xml"/>
	</session-factory>
</hibernate-configuration>

Hibernate 核心 api 的使用

  • Configuration
  1. 到 src 下找到名称为 hibernate.cfg.xml 配置文件,创建对象,把配置文件放到对象里面(加载核心配置文件)
Configuration cfg = new Configuration();
cfg.configure();
  • SessionFactory(重点)
  1. 使用 Configuration 对象创建 SessionFactory 对象
    1. 根据核心配置文件中,有数据库配置,有映射文件部分,到数据库里面根据映射关系把表创建。
<property name="hibernate.hbm2ddl.auto">update</property>
  1. 创建 SessionFactory 过程中,这个过程需要创建表,这个过程很耗时
    1. 一个项目只创建一个 SessionFactory 对象。
  2. 具体优化实现
    1. 写工具类,写静态代码块实现
public class HibernateUtils {
	private static final Configuration cfg;
	private static final SessionFactory sessionFactory;
	static{
		// 加载核心配置文件
		cfg = new Configuration();
		cfg.configure();
		sessionFactory = cfg.buildSessionFactory();
	}
	// 获取SessionFactory的引用
	public static SessionFactory getSessionFactory() {
		return sessionFactory;
	}
}
  • Session(重点
  1. 类似于 jdbc 中的 connection
  2. 调用 session 中的不同方法实现 crud 操作
    1. 添加 save
    2. 修改 update
    3. 删除 delete
    4. 根据 id 查询 get
  3. session 对象是单线程对象:session 不能共用,只能自己使用
  • Transaction
  1. 开启事务
Transaction tx = session.beginTransaction();
  1. 事务的提交 tx.commit()
  2. 事务的回滚 tx.rollback()
  3. 事务的四个特性
    1. 原子性:一组操作,一个失败相当于所有失败
    2. 一致性:操作之前之后,数据总量没变
    3. 隔离性:多个操作同时操作同一条记录,互不影响
    4. 持久性:提交数据到数据库保存

解决 MyEclipse 写配置文件没有提示的问题

  1. 若是电脑可以上网,配置的约束可以有提示功能
  2. 把约束文件引入到 MyEclipse 中
  • Hibernate

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

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

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

    3167 引用 • 8207 回帖 • 2 关注

相关帖子

欢迎来到这里!

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

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