Hibernate学习笔记(一)

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;
  }

以上是我的User类中的属性。

    配置实体类和数据库表的对应关系

    (1)首先创建一个xml格式的配置文件。映射配置文件名称和位置没有固定要求。
        建议:在实体类所在的包里面创建,实体类名称为XXXX.hbm.xml
    (2)应当配置相应的xml约束,一般是dtd格式当然还有schema格式。一般在网上都会搜的到配置文件,直接借过来用!!
以下是我的映射文件(里面有解释)

    <?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核心的配置文件

    (1)首先创建一个xml格式的配置文件。注意的是,核心配置文件的名称和位置是固定的,但在spring中映射配置文件名称和位置没有固定要求(请参照以后的spring学习笔记
    位置:必须在src下
    名称:hibernate.cfg.xml
    (2)hibernate操作过程中,只会加载核心配置文件,其他配置文件不会加载
    (3)配置映射文件信息时,用\

    <?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>

    实现基本操作

    (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配置文件详解

    hibernate映射配置文件

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

    hibernate核心配置文件

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

Hibernate核心API

    Configuration

    1. 代码

    Configuration cfg = new Configuration();
    cfg.configure();

    2. 会到src下面找到名称为hibernate.cfg.xml配置文件,创建对象,把配置文件加载进去

    SessionFactory

    1. 使用configuration对象创建sessionFactory对象

    SessionFactory sessionFactory = cfg.buildSessionFactory();

    2. 创建SessionFactory的过程中非常消耗资源
      (1) 在hibernate中,建议一个项目只创建一个sessionFactory对象(创建一个工具类)

    Session

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

    Transaction

    1. 事务对象

    Transaction tx = session.beginTransaction();

    2. 事务提交和回滚

    tx.commit();
    tx.rollback();

    3. 事务特性(ACID)
      (1) 原子性、一致性、隔离性、持久性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值