Hibernate快速入门

Hibernate快速入门

前两天学习完毕了Mybatis,今天来学习另一个ORM框架,Hibernate。

Hibernate的优势:

  1. 对象化

Hibernate可以使开发人员以面向对象的思想来对数据库进行操作。Jdbc只能通过sql语句将元素传递给数据库,进行数据库操作。但是Hibernate可以在底层对数据进行对象转化,使开发人员只用面向对象的思想和方式来存取数据即可。

  1. 更好的移植性

Hibernate使用XML或者jpa的配置以及数据库方言等等的一系列机制,使得Hibernate具有更好的移植性,面对不同的数据库,开发人员仅需要使用想的数据操作即可,无需关心数据库之间的差异,而直接使用Jdbc就不得不考虑数据库之间的差异的问题。

  1. 缓存机制的使用

Hibernate提供了缓存机制,(session缓存,二级缓存,查询缓存),对于那些改动不大且进场时用的数据,可以将它们放在缓存中,不必每次使用都去查询数据,缓存机制对于提升性能有很大的作用。

  1. 开发效率高

Hibernate提供了大量的封装(这也是它最大的缺点),很多数据操作以及关联关系等都被封装的很好,开发者不需要写大量的sql语句,这就极大的提高了开发者的开发效率。

Hibernate的快速入门小案例

老生常谈,先说说Hibernate需要什么
1.Jar包
2.要操作的数据库
3.实体类
4.实体类映射文件
5.核心配置文件

按照我们上述的分析,来一步一步的实现。
首先导入Jar包,因为我使用的是Maven工程,这里我就仅需要配置坐标就好了,这里写一下必须的jar包:
1.数据库连接驱动mysql-connector-java
2.hibernate-core

<dependencies>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.2.6.Final</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.40</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
    </dependencies>

2.数据库:
(这里我就随便找了一个)
在这里插入图片描述
3.实体类:



public class News {
    private int nid;
    private String title;
    private String content;
    private String photo;

    @Override
    public String toString() {
        return "News{" +
                "nid=" + nid +
                ", title='" + title + '\'' +
                ", content='" + content + '\'' +
                ", photo='" + photo + '\'' +
                '}';
    }


    public int getNid() {
        return nid;
    }

    public void setNid(int nid) {
        this.nid = nid;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public String getPhoto() {
        return photo;
    }

    public void setPhoto(String photo) {
        this.photo = photo;
    }
}

4.实体类对应的映射文件:

命名规范为XXX.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.bean.News" table="news">
        <!-- 建立类中的属性与表中的主键相对应 -->
        <id name="nid" column="nid">
            <!-- 主键的生成策略,后面会讲,现在使用的是本地生成策略 -->
            <generator class="native" />
        </id>

        <!-- 建立类中的普通属性和表中的字段相对应 -->
        <property name="title" column="title" />
        <property name="content" column="content" />
        <property name="photo" column="photo" />

    </class>
</hibernate-mapping>

解释一下这里的几个关键的标签和标签属性:
< class >标签中的name属性就是代表你要操作哪个数据库表所对应的实体类的全类名,table属性也显而易见,就是对应数据库的那张表。
剩下的属性和mybatis的映射文件相同,如果映射的是主键,就是用id标签,如果映射的不是主键,就使用property标签,name对应实体类中的属性,column对应数据库表中的列名。

5.主配置文件:
默认名称为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>
        <!-- 下面是三个必须要有的配置 -->
        <!-- 配置连接MySQL数据库的基本参数 -->
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql:///hibernate_demo01</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">root</property>

        <!-- 配置Hibernate的方言 -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

        <!-- 下面两个是可选的配置哟! -->
        <!-- 打印sql语句 -->
        <property name="hibernate.show_sql">true</property>
        <!-- 格式化sql语句 -->
        <property name="hibernate.format_sql">true</property>

        <!-- 告诉Hibernate的核心配置文件加载哪个映射文件 -->
        <mapping resource="com/bean/News.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

这个就没啥好说的了。

hibernate需要的文件都创建完毕了,接下来就是创建一个测试类,来对hibernate的功能进行测试,我们这个demo就实现CRUD功能。

创建测试类:

//这里我使用的是单元测试:
import com.offcn.bean.News;
import com.offcn.bean.User;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.query.Query;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.util.List;


public class Hibernate02 {


    Session session;
    Transaction transaction;
    SessionFactory sessionFactory;

    @Before
    public void init() {
        //1. 加载Hibernate的核心配置文件
        Configuration configuration = new Configuration().configure();
        //如果在Hibernate的核心配置文件没有设置加载哪个映射文件,则可手动加载映射文件
        //configuration.addResource("com/meimeixia/hibernate/demo01/Customer.hbm.xml");

        //2. 创建SessionFactory对象,类似于JDBC中的连接池
        sessionFactory = configuration.buildSessionFactory();

        //3. 通过SessionFactory获取到Session对象,类似于JDBC中的Connection
        session = sessionFactory.openSession();

        //4. 手动开启事务,(最好是手动开启事务)
        transaction = session.beginTransaction();
    }
    
    //增加
    @Test
    public void insert(){
        News news = new News();
        news.setTitle("号外号外");
        news.setContent("大新闻");
        news.setPhoto("photo01");

        session.save(news);
    }
    
    //删除
    @Test
    public void delete(){
        //删除方法里面传递的也是一个对象
        News news = new News();
        news.setNid(12);
        session.delete(news);
    }
    
    //修改
    @Test
    public void update(){
        //对象其中必须包含主键
        News news = new News();
        news.setTitle("修改后Title");
        news.setContent("修改后Content");
        news.setNid(10);
        session.update(news);
    }
    
    //查询
    @Test
    public void findById(){
        //有两种查询的方法,get和load,load具有延迟加载的效果。
        News news = session.get(News.class, 10);
        System.out.println(news);
        News news1 = session.load(News.class, 10);
        System.out.println(news1);
    }





    @After
    public void commit(){
        transaction.commit();
        session.close();
        sessionFactory.close();
    }
}

增加操作的结果
在这里插入图片描述
删除操作的结果
在这里插入图片描述
日志文件打印的sql语句:
在这里插入图片描述
修改操作的结果:

在这里插入图片描述

查询操作的结果
在这里插入图片描述

快速入门就是以上的啦,喜欢请点个赞。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值