hibernate入门学习笔记

简介: hibernate入门学习笔记

 hibernate框架应用在javaee三层结构中 dao层框架,在dao层里面做对数据库crud操作,使用hibernate实现crud操作,hibernate底层代码就是jdbc,hibernate对jdbc进行封装,使用hibernate好处,不需要写复杂jdbc代码了,

不需要写sql语句实现。


   hibernate不需要创建表,你只要创建实体类,通过配置实体类和数据库表一一对应关系,他就会帮助我们在数据库中自己创建表。


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>
    <!-- 第一部分: 配置数据库信息 必须的 -->
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost/hibernate_day01</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>
    <!-- hibernate帮创建表,需要配置之后 
      update: 如果已经有表,更新,如果没有,创建
    -->
    <property name="hibernate.hbm2ddl.auto">update</property>
    <!-- 配置数据库方言
      在mysql里面实现分页 关键字 limit,只能使用mysql里面
      在oracle数据库,实现分页rownum
      让hibernate框架识别不同数据库的自己特有的语句
     -->
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <!-- 第三部分: 把映射文件放到核心配置文件中 必须的-->
    <mapping resource="cn/itcast/entity/User.hbm.xml"/>
  </session-factory>
</hibernate-configuration>

实体类:

package cn.itcast.entity;
public class User {
  /*hibernate要求实体类有一个属性唯一的*/
  private int uid;
  private String username;
  private String password;
  private String address;
  public String getUsername() {
    return username;
  }
  public int getUid() {
    return uid;
  }
  public void setUid(int uid) {
    this.uid = uid;
  }
  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;
  }
}

实体类的映射配置:

<?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>
<!-- 1 配置类和表对应 
    class标签
    name属性:实体类全路径
    table属性:数据库表名称
  -->
  <class name="cn.itcast.entity.User" table="t_user">
    <!-- 2 配置实体类id和表id对应 
      hibernate要求实体类有一个属性唯一值
      hibernate要求表有字段作为唯一值
    -->
    <!-- id标签
      name属性:实体类里面id属性名称
      column属性:生成的表字段名称
     -->
    <id name="uid" column="uid">
      <!-- 设置数据库表id增长策略 
        native:生成表id值就是主键自动增长
      -->
      <generator class="native"></generator>
    </id>
    <!-- 配置其他属性和表字段对应 
      name属性:实体类属性名称
      column属性:生成表字段名称
    -->
    <property name="username" column="username"></property>
    <property name="password" column="password"></property>
    <property name="address" column="address"></property>
  </class>
</hibernate-mapping>

加载核心配置文件:静态代码块的作用是,在创建sessionFactory过程中特别耗资源,一个项目中一般只创建一个,静态代码块在类加载时候执行,执行一次。

package cn.itcast.utils;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtils { 
  private static Configuration cfg = null;
  private static SessionFactory sessionFactory = null;
  //静态代码块实现
  static {
    //加载核心配置文件
    cfg = new Configuration();
    cfg.configure();
    sessionFactory = cfg.buildSessionFactory();
  }
  //提供方法返回sessionFactory
  public static SessionFactory getSessionFactory() {
    return sessionFactory;
  }
}

Crud操作:

package cn.itcast.hibernatetest;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;
import cn.itcast.entity.User;
import cn.itcast.utils.HibernateUtils;
public class HibernateDemo {
  @Test
  public void testAdd() { 
//      第一步,加载核心配置文件
    SessionFactory sessionFactory = HibernateUtils.getSessionFactory();
//    第二步 使用SessionFactory创建session对象
    // 类似于连接
    Session session = sessionFactory.openSession();
//    第三步 开启事务
    Transaction tx = session.beginTransaction();
//    第四步 写具体逻辑 crud操作
    //添加功能
    System.out.println(User.class+"aaaaa");
    User user = new User();
    user.setUsername("小明");
    user.setPassword("123456");
    user.setAddress("中国");
    //调用session的方法实现添加
    session.save(user);
//    第五步 提交事务
    tx.commit();
//    第六步 关闭资源
    session.close();
    sessionFactory.close();
  }
}
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
SQL XML Java
一篇文章让你马上入门Hibernate
一篇文章让你马上入门Hibernate
|
Java 数据库连接 数据库
告别繁琐 SQL!Hibernate 入门指南带你轻松玩转 ORM,解锁高效数据库操作新姿势
【8月更文挑战第31天】Hibernate 是一款流行的 Java 持久层框架,简化了对象关系映射(ORM)过程,使开发者能以面向对象的方式进行数据持久化操作而无需直接编写 SQL 语句。本文提供 Hibernate 入门指南,介绍核心概念及示例代码,涵盖依赖引入、配置文件设置、实体类定义、工具类构建及基本 CRUD 操作。通过学习,你将掌握使用 Hibernate 简化数据持久化的技巧,为实际项目应用打下基础。
1210 0
|
SQL Java 数据库连接
Java从入门到精通:3.1.2深入学习Java EE技术——Hibernate与MyBatis等ORM框架的掌握
Java从入门到精通:3.1.2深入学习Java EE技术——Hibernate与MyBatis等ORM框架的掌握
358 1
|
Oracle Java 关系型数据库
[学习笔记] 在Eclipse中使用Hibernate,并创建第一个Demo工程,数据库为Oracle XE
[学习笔记] 在Eclipse中使用Hibernate,并创建第一个Demo工程,数据库为Oracle XE
|
Java 数据库连接
杨老师课堂之JavaEE三大框架Hibernate入门第一课
杨老师课堂之JavaEE三大框架Hibernate入门第一课
188 0
|
SQL Java 数据库连接
Hibernate - 基础入门详解
Hibernate - 基础入门详解
570 1
|
Java 关系型数据库 数据库连接
Hibernate学习笔记(一)快速入门
Hibernate学习笔记(一)快速入门
|
SQL 缓存 Java
Hibernate - 检索策略入门与详解
Hibernate - 检索策略入门与详解
269 0
|
存储 SQL Java
hibernate学习笔记之二(映射关系与懒加载)
hibernate学习笔记之二(映射关系与懒加载)
hibernate学习笔记之二(映射关系与懒加载)
|
SQL 存储 缓存
hibernate学习笔记之一(下)
hibernate学习笔记之一(下)
hibernate学习笔记之一(下)