【Hibernate】查询Student表

注:之前的一篇博客【JDBC】查询Student表是用纯JSP实现的,现在将Hibernate引入其中。Eclipse、MySQL、Hibernate3。

简介

  Hibernate是当今比较流行的Java持久层框架之一。
  Hibernate是对JDBC的轻量级封装,其主要功能是操作数据库。
  Hibernate是一个开放源代码的ORM(Object Relational Mapping)框架,支持用面向对象思想来操作数据库。

实例

  对用框架的学习,首先需要将其引入到项目中,一般引入的步骤都比较固定,做个笔记,以备查阅。

1、新建一个Web项目,引入Jar包

  我们可以从官网下载Jar包,目前的最新版本是5.8.0,最新特性不太了解。这里使用的是hibernate-distribution-3.6.10.Final-dist版本,解压后将lib\required目录下的jar包、根目录的hibernate3.jar以及\lib\jpa目录下的jar包拷贝到Web项目的WebContent-WEB-INF\lib下即可(Hibernate基础JAR包)。

2、编写实体类

  亦称持久化类,这里的持久化是指类的对象能够被持久化保存到数据库。Hibernate使用普通Java对象,即POJO(Plain Old Java Object)的编程模式来进行持久化。在src目录下创建一个cn.jujianfei.domain包,并在包中创建一个实体类Student,代码如下:

package cn.jujianfei.domain;

public class Student {
    private Integer ID;
    private Integer Sno;
    private String Sname;
    private String Saddress;

    //getter和setter方法:略......

    // 重写Object类的toString()方法
    public String toString() {
        return "Student [ ID =" + ID + ",Sno = " + Sno + ",Sname = " + Sname
                + ",Saddress =" + Saddress + "]";
    }
}
3、编写映射文件Student.hbm.xml

  实体类Student目前还不具备持久化操作的能力,而Hibernate需要知道实体类Student映射到数据库dbname中的哪个表,以及类中的哪个属性对应数据库表中的哪个字段,这些都需要在映射文件中配置。在Student类所在的包中创建一个Student.hbm.xml文件,该文件中定义了实体类Student的属性是如何映射到student表的列上的。代码如下:

<?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>
    <!-- name代表的是实体类名,table代表的是表明 -->
    <class name ="cn.jujianfei.domain.Student" table ="student">
        <id name ="ID" column = "ID">
            <generator class ="native" /> <!-- 主键生成策略 -->
        </id>
        <!-- 其他属性使用property标签来映射 -->
        <property name ="Sno" column ="Sno" type= "integer" />
        <property name ="Sname" column ="Sname" type ="string" />
        <property name ="Saddress" column ="Saddress" type ="string" />
    </class>
</hibernate-mapping>
4、编写核心配置文件hibernate.cfg.xml

  Hibernate的映射文件反映了持久化类和数据库表的映射信息,而Hibernate的配置文件则主要用来配置数据库连接以及Hibernate运行时所需要的各个属性的值。在src下创建一个名称为hibernate.cfg.xml的文件,代码如下:

<?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.dialect">
            org.hibernate.dialect.MySQLDialect
        </property>
        <!-- 数据库驱动 -->
        <property name="hibernate.connection.driver_class">
            com.mysql.jdbc.Driver
        </property>
        <!-- 连接数据库的url -->
        <property name="hibernate.connection.url">
            jdbc:mysql:///dbname
        </property>
        <!-- 数据库的用户名 -->
        <property name="hibernate.connection.username">root</property>
        <!-- 数据库的密码 -->
        <property name="hibernate.connection.password">jujianfei</property>
        <!-- 其他配置 -->
        <!-- 显示SQL语句 -->
        <property name="hibernate.show_sql">true</property>
        <!-- 格式化SQL语句 -->
        <property name="format_sql">true</property>
        <!-- 用来关联hbm配置文件 -->
        <mapping resource="cn/jujianfei/domain/Student.hbm.xml" />
    </session-factory>
</hibernate-configuration>
5、编写测试类来查询数据
public class StudentTest {
    @Test
    public void selectAll() {
        // 1.加载hibernate.cfg.xml
        Configuration config = new Configuration().configure();
        // 2.获取SessionFactory
        SessionFactory sf = config.buildSessionFactory();
        // 3.得到一个Session
        Session session = sf.openSession();
        // 4.开启事务
        Transaction t = session.beginTransaction();
        // 5.操作
        Student student = new Student();
        String hql = "from Student";
        Query query = session.createQuery(hql);
        List<Student> students = query.list();
        for(Student s:students){
            System.out.println(s);
        }
        t.commit();
        session.close();
        sf.close();
    }
}
6、查询结果

这里写图片描述

结语

  Hibernate是开源的框架,那么则意味着它的更新速度也是很快的,我看的是16年出版的书,是基于Hibernate3来讲解的。目前已更新到Hibernate5.8,上面实例中的某些操作在最新版本中已被抛弃。在Hibernate3中,其优势主要有:封装了数据库访问层重复的代码,减少冗余,简化开发;一级缓存和快照的存在,访问数据库的次数减少,提高了运行效率;支持对关系型数据库的关联关系映射操作;数据检索方便,检索方式有:HQL,QBC、OID,SQL,导航对象图;最重要的一点,对于数据库的操作,并发访问的处理必不可少,Hibernate的事务管理和二级缓存也为并发问题提供了优秀的解决方案。

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值