前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Hibernate文件配置

Hibernate文件配置

作者头像
用户3112896
发布于 2019-09-26 06:54:41
发布于 2019-09-26 06:54:41
43400
代码可运行
举报
文章被收录于专栏:安卓圈安卓圈
运行总次数:0
代码可运行

ORM : 对象关系映射

映射需要通过XML的配置文件来完成,这个配置文件尽量统一(xxx.hbm.xml) Hibernate核心的配置:必须的配置、可选的配置、映射文件的引入

Configuration的作用:1.加载核心配置文件 2.加载映射文件 SessionFactory:内部维护了Hibernate的连接池和Hibernate的二级缓存,是线程安全的对象,一个项目创建一个对象即可 Session:代表Hibernate和数据库的连接对象,不是线程安全的,所以不能定义成全局的变量 Transaction:Hibernate中管理事务的对象

文件结构

工具类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtils {
    public static final Configuration cfg;
    public static final SessionFactory sf;

    static {
        cfg = new Configuration().configure();
        sf = cfg.buildSessionFactory();
    }

    public static Session openSession() {
        return sf.openSession();
    }
}

对象类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Customer {
    private int id;
    private String name;
    private String source;
    private String industry;
    private String level;
    private String phone;
    private String mobile;

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

    public String getSource() {
        return source;
    }

    public void setSource(String source) {
        this.source = source;
    }

    public String getIndustry() {
        return industry;
    }

    public void setIndustry(String industry) {
        this.industry = industry;
    }

    public String getLevel() {
        return level;
    }

    public void setLevel(String level) {
        this.level = level;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getMobile() {
        return mobile;
    }

    public void setMobile(String mobile) {
        this.mobile = mobile;
    }

    @Override
    public String toString() {
        return "Customer{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", source='" + source + '\'' +
                ", industry='" + industry + '\'' +
                ", level='" + level + '\'' +
                ", phone='" + phone + '\'' +
                ", mobile='" + mobile + '\'' +
                '}';
    }
}

映射配置文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?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>
    <!--建立类与表的映射-->
    <!--如果类中的属性名和表中的字段名一直,column可以省略-->
    <class name="com.jinke.hibernate.Customer" table="customer">
        <!--建立类中的属性与表中的主键对应-->
        <id name="id" column="id">
            <generator class="native"/>
        </id>

        <!--建立类中的普通属性和标的字段的对应-->
        <property name="name" column="name" length="32" type="string" not-null="true" unique="true"/>
        <property name="source" column="source"/>
        <property name="industry" column="industry"/>
        <property name="level" column="level"/>
        <property name="phone" column="phone"/>
        <property name="mobile" column="mobile"/>
    </class>
</hibernate-mapping>

总配置类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD//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:3306/spring_database?characterEncoding=utf8
        </property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">1234</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>
        <!--自动创建表-->
        <property name="hibernate.hbm2ddl.auto">update</property>

        <!--映射文件的引用===============-->
        <mapping resource="com/jinke/hibernate/Customer.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

测试类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import com.jinke.hibernate.utils.HibernateUtils;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.query.NativeQuery;
import org.hibernate.query.Query;
import org.junit.Test;

import java.util.Arrays;
import java.util.List;

public class HibernateDemo1 {

    @Test
    public void demo() {
       /* //1.加载hibernate核心配置文件
        Configuration configuration = new Configuration().configure();
        //2.创建一个sessionfactory对象:类似于jdbc中连接池
        SessionFactory sessionFactory = configuration.buildSessionFactory();
        //3.通过sessionFactory获取到session对象:类似于jdbc中connection
        Session session = sessionFactory.openSession();*/

        Session session = HibernateUtils.openSession();
        //4.手动开启事务
        Transaction transaction = session.beginTransaction();
        //5.编写代码

        Customer customer = new Customer();
        customer.setName("王东");
        //保存
        session.save(customer);


        //6.事务提交
        transaction.commit();
        //7.资源释放
        session.close();
        /*sessionFactory.close();*/
    }

    /**
     * get方法:(一般用这种)
     * 采用立即加载,执行到这行代码的时候,马上发送SQL语句去查询
     * 查询后返回的是真是对象本身
     * 查询一个找不到的对象会返回null
     * <p>
     * load方法:
     * 采用延迟加载(懒加载),执行到这行代码的时候,不会发送SQL语句,当真正使用项目的时候才会发送SQL语句
     * 查询后返回的是代理对象
     * 查询一个找不到的对象会抛出一个异常
     */
    @Test
    //查询
    public void demo2() {
        Session session = HibernateUtils.openSession();
        Transaction tx = session.beginTransaction();
        //使用get方法
        Customer customer = session.get(Customer.class, 1);
        System.out.println(customer);

        //使用load方法
        /*Customer load = session.load(Customer.class, 2);
        System.out.println(load);*/

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

    @Test
    //修改
    public void demo3() {
        Session session = HibernateUtils.openSession();
        Transaction tx = session.beginTransaction();

        //直接创建对象,进行修改
        /*Customer customer = new Customer();
        customer.setId(1);
        customer.setName("李达");
        session.update(customer);*/
        //先查询,再修改(一般用这种)
        Customer customer = session.get(Customer.class, 1);
        customer.setName("张三");
        session.update(customer);

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

    @Test
    //删除
    public void demo4() {
        Session session = HibernateUtils.openSession();
        Transaction tx = session.beginTransaction();

        //直接创建对象,进行删除
        /*Customer customer = new Customer();
        customer.setId(1);
        session.delete(customer);*/
        //先查询,再删除(一般用这种)  级联删除
        Customer customer = session.get(Customer.class, 1);
        session.delete(customer);

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

    @Test
    //保存或更新
    public void demo5() {
        Session session = HibernateUtils.openSession();
        Transaction tx = session.beginTransaction();

        Customer customer = new Customer();
        /*customer.setName("李飞");
        session.saveOrUpdate(customer);*/

        customer.setId(3);
        customer.setName("如花");
        session.saveOrUpdate(customer);

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

    @Test
    //查询所有
    public void demo6() {
        Session session = HibernateUtils.openSession();
        Transaction tx = session.beginTransaction();
        //接收HQL:hibernate query language 面向对象的查询语言
        Query query = session.createQuery("from Customer");
        List<Customer> list = query.list();
        for (Customer customer : list) {
            System.out.println(customer);
        }

        //接收sql:
        NativeQuery sqlQuery = session.createSQLQuery("select * from customer");
        List<Object[]> sqlList = sqlQuery.list();
        for (Object[] objects : sqlList) {
            System.out.println(Arrays.toString(objects));
        }

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

结果在MySql Workbench里看

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-06-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 安卓圈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
hibernate系列之二
持久化:将程序数据在持久状态和瞬时状态间转换的机制;即将内存的数据永久存在关系型数据库中;
沁溪源
2020/09/03
4700
[ SSH框架 ] Hibernate框架学习之三
一、表关系的分析   Hibernate框架实现了ORM的思想,将关系数据库中表的数据映射成对象,使开发人员把对数据库的操作转化为对对象的操作,Hibernate的关联关系映射主要包括多表的映射配置、
Kevin_Zhang
2018/05/22
1.8K0
Hibernate配置文件详解-2
在具体业务场景中,Customer和Orders是一对多关系,一个Customer对应多个Orders,实体类中用一个set集合作为属性来表示对应的Orders。
南风
2019/04/22
6220
Hibernate配置文件详解-2
Hibernate初级入门
private String userName;<—————>t_userName(这个我们要通过映射文件来创建)
全栈程序员站长
2022/06/30
4490
Hibernate第三天:Hibernate的一对多配置、Hibernate的多对多的配置
* * 前提:一对多的双方都设置cascade="save-update"
AlbertYang
2020/09/08
1.9K0
Hibernate第三天:Hibernate的一对多配置、Hibernate的多对多的配置
SSH框架之Hibernate第一篇
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
海仔
2019/09/18
5940
Hibernate_day04总结
更多资源分享就在【Java帮帮】微信公众号与QQ空间 Hibernate_day04总结 今日内容 l Hibernate的二级缓存 1.1 上次课内容回顾: Hibernate的检索方式 * 对象导航的方式:customer.getOrders() * OID检索方式:get/load * HQL检索: * 简单查询:from Customer * 别名查询:from Customer as c * 多态查询:from java.lang.Object * 排序查询:from Customer ord
Java帮帮
2018/03/19
6570
Hibernate_day04总结
Hibernate的缓存机制如何应用?
2.一级缓存应用: save()。当session对象调用save()方法保存一个对象后,该对象会被放入到session的缓存中。 get()和load()。当session对象调用get()或load()方法从数据库取出一个对象后,该对象也会被放入到session的缓存中。 使用HQL和QBC等从数据库中查询数据。
小小鱼儿小小林
2020/06/24
4710
Hibernate_day02总结
Hibernate_day02总结 今日内容 l Hibernate持久化对象的状态 l Hibernate的一级缓存 l Hibernate操作持久化对象的方法 l Hibernate 关联关系映射 1.1 上次课内容回顾: Hibernate框架的概述. * 什么是Hibernate * 持久层的ORM框架. * ORM:对象关系映射. * 常见的持久层框架 * JPA * Hibernate * Mybatis * JdbcTemplate * Hibernate流行版本: * 3.x和4.x H
Java帮帮
2018/03/19
1.5K0
Hibernate_day02总结
把头像图片以二进制形式保存到数据库(Hibernate实现)
我们把头像直接保存到数据库,而不是保存一个地址。 使用Hibernate自动创建表方式,数据库photo字段的数据类型是CLOB,这是针对MySQL,其他数据库可能不一样。 1、Hibernate环境搭建、建立工程略。 2、首先我们新建一个User类,储存一些用户信息字段,在Java中photo字段要申明为应该byte[]类型
张张
2019/12/26
1.5K0
Hibernate第二天:Hibernate的一级缓存、其他的API
持久化,将内存中的一个对象持久化到数据库的过程。Hibernate框架就是用来进行持久化的框架。
AlbertYang
2020/09/08
7210
Hibernate_day01总结
第1章 Hibernate_day01总结 今日内容 Hibernate框架的概述 Hibernate的快速入门 Hibernate核心API的介绍 Hibernate的持久化类 主键的生成策略 1.
Java帮帮
2018/03/19
1.3K0
Hibernate_day01总结
hibernate笔记(一)
原始的jdbc操作, Connection/Statement/ResultSet
HUC思梦
2020/09/03
8410
SSH框架之旅-hibernate(3)
表 A 中的一条记录只能和表 B 的一条记录,反之亦然。这种关系的表并不常见,因为既然可以存放在两张表中的数据,也可以用一张表来存放。一对一的表关系用于: 1.分割一个含有有许多列的表 2.由于安全性的考虑而隔离了表的某一部分 3.存储一些很容易删除的临时数据,删除这些表就是删除了这些数据 4.存储只应用于主表的一个子集的信息
Wizey
2018/08/30
1.2K0
SSH框架之旅-hibernate(3)
SSH框架之Hibernate第三篇
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
海仔
2019/09/18
7000
day32_Hibernate学习笔记_04
  缓存(Cache):是计算机领域非常通用的概念。它介于应用程序和永久性数据存储源(如硬盘上的文件或者数据库)之间,其作用是降低应用程序直接读写硬盘(永久性数据存储源)的频率,从而提高应用的运行性能。缓存中的数据是数据存储源中数据的拷贝。缓存的物理介质通常是内存。   缓存:程序 <-- (内存) --> 硬盘
黑泽君
2018/10/11
9940
day32_Hibernate学习笔记_04
Hibernate的CRUD以及junit测试
Hibernate的CRUD以及junit测试 1:第一步创建动态工程引包,省略。 2:第二步,创建数据库和数据表,省略。 3:第三步,创建实体类,如User.java,源码如下所示:   对于实体
别先生
2018/01/02
1.3K0
Hibernate的CRUD以及junit测试
Hibernate的四种查询方式(主键查询,HQL查询,Criteria查询,本地sql查询)和修改和添加
根据文章内容总结摘要。
别先生
2018/01/02
5.4K0
Hibernate的四种查询方式(主键查询,HQL查询,Criteria查询,本地sql查询)和修改和添加
day30_Hibernate学习笔记_02
对象状态 瞬时态|临时态:Transient     1、没有与Hibernate产生关联(没有与Session有关联)。     2、与数据库中的记录没有产生关联,即对象没有ID(有关联:就是与数据库中的ID有对应)。 持久态:Persistent     1、与Hibernate有关联(与session有关联)。     2、对象有ID。 游离态|脱管态:Detached     1、没有与Hibernate产生关联。     2、对象有ID。 三种状态转换如下图所示:
黑泽君
2018/10/11
1.1K0
day30_Hibernate学习笔记_02
Hibernate_day03总结
Hibernate_day03总结 今日内容 l Hibernate的检索方式 l Hibernate的抓取策略 l Hibernate的批量检索 l 事务的并发问题 1.1 上次课内容回顾: Hibernate的持久类三种状态: * 瞬时态:没有唯一标识OID,没有被session管理 * 持久态:有唯一标识OID,被session管理 * 脱管态:有唯一标识OID,没有被session管理. * 状态转换: 瞬时态:new 获得. * 瞬时à持久:save/saveOrUpdate * 瞬时à脱管:
Java帮帮
2018/03/19
1.1K0
Hibernate_day03总结
相关推荐
hibernate系列之二
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档