Java Web之Hibernate框架

          Java Web框架之Hibernate

 

1. Hibernate的定义:

    Hibernate是一个基于JDBC的开源的持久化框架,是一个优秀的ORM实现,它很大程度的简化了DAO层编码工作。Hibernate         对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。 

    在分层结构中处于持久化层,封装对数据库的访问细节,使业务逻辑层更专注于实现业务逻辑。 

 

2. Hibernate的开发步骤:

1.创建持久化类

2.创建对象-关系映射(ROM)文件

3.创建Hibernate配置文件

4.通过Hibernate API编写访问数据库的代码

               

 

 

1.创建持久化类:

  /**
 * 实体
 */
public class User {
    private int id;
    private String name;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "[User: id=" + id + ", name=" + name + "]";
    }

}

 

2. 创建对象-关系映射文件*.hbm.xml:

 (Hibernate之所以能够智能地判断实体类和数据表之间的对象关系,就是因为有映射文件)

<hibernate-mapping>

<!-- 实体类class和数据库表table的映射 -->
<class name="com.ljh.hibernate.pojo.User" table="t_user">

<!--
id标签用来映射主键字段
name属性表示类的属性
column属性表示表的字段
 -->
<id name="usercode" column="usercode" length="20">

<!-- 主键生成策略
native 表示根据连接数据库的表的主键生成方式来生成主键值
  mysql数据采用的auto_increment属性来生成主键值,一般主键字            段需要设置的类型为int
assigned 表示主键由用户自己维护。
-->

<generator class="assigned"/>
</id>

<!-- 普通属性的映射
name 表示类中的属性名称  
column 表示表中的列名称   
            column属性不指定会采用默认的值,默认名称与属性名称一致
length 表示属性的字符长度
not-null 表示属性值不能为null
 -->

<property name="userpswd" column="userpswd" type="java.lang.String" length="20" not-null="true"/>
<property name="username" />
<property name="regdate" length="19"/>
<property name="orgtype" length="1"/>
</class>
</hibernate-mapping>

 

3. 创建Hibernate配置文件hibernate.cfg.xml:(在src目录下)

<hibernate-configuration>
    <session-factory name="foo">

        <!-- 1. 配置数据库信息 -->
        <!-- 方言(连接的数据库类型) -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="connection.url">jdbc:mysql:///hibernate_20160926</property>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.username">root</property>
        <property name="connection.password">yezi</property>

        <!-- 2. 其他配置 -->
        <!-- 显示生成的SQL语句 -->
        <property name="hibernate.show_sql">true</property>

        <!-- 3. 导入映射文件 -->
        <mapping resource="cn/itcast/a_helloworld/User.hbm.xml"/>

    </session-factory>
</hibernate-configuration>

 

 

4.  通过Hibernate API编写访问数据库的代码:

编程步骤:

  1. 获取Configuration对象。
  2. 获取SessionFactory对象。
  3. 获取Session,打开事务Hibernate对JDBC进行了一种包装,提供了另外一套API来操作数据,其中与数据直接打交道的是Session,它是Hibernate的一级缓存,保持着应用程序与数据库之间的连接,通过它保持内存与数据库之间的数据同步。
  4. 用面向对象的方式操作数据库。
  5. 关闭事务,关闭Session。

 

public class App {

    private static SessionFactory sessionFactory;

    static {
        Configuration cfg = new Configuration();
        cfg.configure("hibernate.cfg.xml"); // 读取指定的主配置文件
        sessionFactory = cfg.buildSessionFactory(); // 根据配置生成Session工厂
    }

    @Test
    public void testSave() {
        User user = new User();
        user.setName("张三");

        // 保存
        Session session = sessionFactory.openSession(); // 打开一个新的Session
        Transaction tx = session.beginTransaction(); // 开启事务

        session.save(user);

        tx.commit(); // 提交事务
        session.close(); // 关闭Session,释放资源(不一定是真正的关闭)
    }

    @Test
    public void testGet() {
        Session session = sessionFactory.openSession();
        Transaction tx = session.beginTransaction();

        User user = (User) session.get(User.class, 1); // 获取?
        System.out.println(user);

        tx.commit();
        session.close();
    }
}

注意:Session的管理,Spring会帮助关闭的

  这样一看我们的方法写的代码也是挺多了,想说的是这里只是写出了Hibernate框架是从创建sessionFactory对象,然后创建session对象,通过session对象进行对数据库的操作。其实真正的开发中,我们会把这些对象,事务的操作交给框架来管理,我们需要做的就是持久化操作的那些代码,是非常少的。

 

5. Hibernate的优点、缺点:

优点:

  1. 轻量级的ORM框架
  2. 对JDBC进行很好的封装,使用ORM映射,可以通过面向对象的方式操作数据库
  3. 提供了缓存机制,可以提高效率

 缺点:如果对大量的数据进行频繁的操作,性能效率低,不如直接使用JDBC。

 

6. ORM(object Relation Mapping)对象关系数据库的映射:

这是Hibernate框架的重点,也就是说我们程序中的实体(bean,这里也叫POJO)和数据库中的表进行映射。Java类型和sql类型映射,面向对象设计和关系型数据库设计的映射,从而我们只需要把更多的精力放在业务中。

 

7.  MyBatis和Hibernate的区别

 1、Hibernate 是一个标准的ORM框架(对象关系映射框架),不需要程序写sql,sql语句自动生成,对sql语句进行优化、修改          比较困难。全自动的、完全面向对象的持久层框架。

 2、MyBatis专注于sql本身,需要程序员自己编写sql语句,sql修改、优化比较方便。是一个不完全的ORM框架,虽然程序员自          己写sql,MyBatis也可以实现映射(输入映射,输出映射)半自动化的持久层框架。

  3、Hibernate的DAO层开发比MyBatis简单,Mybatis需要维护sql和结果映射。

  4、Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便。

  5、Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同sql。

   6、Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳。

   7、MyBatis可以进行更为细致的SQL优化,可以减少查询字段。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值