Hibernate HQL增删改查

 

Hibernate

  • 对象关系映射或ORM是将应用程序域模型对象映射到关系数据库表的编程技术
  • Hibernate是基于Java的ORM工具,它提供了一个框架,用于将应用程序域对象映射到关系数据库表,反之亦然。它提供了Java Persistence API的参考实现,使其成为具有松散耦合优势的ORM工具的绝佳选择
  • Framework提供了使用JPA注释和基于XML的配置将普通旧Java对象映射到传统数据库表的选项
  • Framework处理应用程序与数据库的交互,使开发人员可以更专注于业务逻辑和解决复杂问题

图1:Hibernate概述

图1:Hibernate概述

1.1.1 Hibernate注释

  • Hibernate注释是在不使用XML文件的情况下定义映射的最新方法
  • 开发人员使用注释来提供元数据配置以及Java代码。因此,使代码易于理解
  • XML提供了在不构建项目的情况下更改配置的功能。因此,注释不如XML配置强大,只应用于表和列映射
  • 注释预先配置了合理的默认值,这减少了所需的编码量。例如,类名默认为表名,字段名默认为列名

1.1.2 Hibernate注释参考指南

Hibernate Annotations基于JPA 2规范。所有JPA注释都在javax.persistence.*包中定义。可以在实体中使用的Hibernate的基本JPA注释如下所示。

注解修改描述
@Entity 将类标记为Hibernate实体(映射类)
@Table名称使用name修饰符指定的数据库表映射此类。如果未提供该名称,则会使用与该类同名的表映射该类。
@Id 将此类字段标记为主键列。
@GeneratedValue 指示数据库自动为此字段生成值。
@Column名称使用name指定的表列映射此字段,如果不存在name修饰符,则使用字段名称。

1.2 CRUD

CRUD表示要在数据存储库中完成的基本操作。我们直接处理记录或数据对象; 除了这些操作之外,记录是被动实体。CRUD代表C reate,R ead,U pdate和D elete。CRUD函数是数据库的用户界面,因为它们允许用户创建,查看,修改和更改数据。CRUD适用于数据库中的实体并操纵这些实体。

例如,简单的学生数据库表添加(创建)新学生详细信息,访问(读取)现有学生详细信息,修改(更新)现有学生数据(如科目),并在学生离开学校时删除学生详细信息。

对应于SQL这些操作的命令是INSERTSELECTUPDATE,和DELETE。根据选择条件INSERT添加新记录,SELECT检索或选择现有记录,UPDATE修改现有记录并DELETE删除表中的表或记录。

图2:CRUD(创建,读取,更新,删除)概述

图2:CRUD(创建,读取,更新,删除)概述

1.2.1 CRUD的好处

在您的应用程序中使用数据库操作它有一些优点,即

  • 使用主机和查询语言改进数据安全性和用户数据访问
  • 更高的数据完整性和应用程序的独立性
  • 通过减少数据冗余来提高应用程序性能

 下面是hibernate 的数据CRUD操作的示例代码 

提供源码:https://pan.baidu.com/s/1KBSfHsdCH2fpY5Txx62jEw 
提取码:dnlo

package com.sz;

import com.sz.domain.Student;
import com.sz.util.HibernateUtil;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.query.Query;
import org.junit.Test;

import java.util.Date;
import java.util.List;
import java.util.Scanner;

public class TestStudentCRUD {

// 增加 save()方法;
    @Test
    public void insert() {

        // 1 得到会话
        Session session = null;

        session = HibernateUtil.getSession();

        // 2 开启事务
        Transaction tx = session.beginTransaction();


        // 3 业务代码
        Student s = new Student();
        s.setName("王杰");
        s.setBirth(new Date());

        // 保存,插入一条数据(insert into t_student vaxxxxx)
        session.save(s);

        // 4 事务提交
        tx.commit();

        // 关了再说
        if (session != null)
            session.close();
    }


// 修改 update()方法
    @Test
    public void update() {

        // 更新某个对象,一定要去把该对象查出来(数据库记录搞出来--》hibernate当中可以管理的对象)

        Session session = HibernateUtil.getSession();

        Transaction tx = session.beginTransaction();


        // 以z主键为基准
        Student student = session.get(Student.class, 1);
        student.setName("周星驰");

        session.update(student);

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

    }

// 查询方法 get( 实体类, id)

    @Test
    public void get() {

        // 更新某个对象,一定要去把该对象查出来(数据库记录搞出来--》hibernate当中可以管理的对象)

        Session session = HibernateUtil.getSession();

        Transaction tx = session.beginTransaction();


        // 以z主键为基准
        //   Student student = session.get(Student.class, 1);
        Student student = (Student) session.get("com.sz.domain.Student", 1);
      
      
 System.out.println(student.getId()+"\t"+student.getName()+"\t"+student.getBirth());

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

    }


// 删除 delete()  先获取对象后删除
    @Test
    public void delete() {

        // 更新某个对象,一定要去把该对象查出来(数据库记录搞出来--》hibernate当中可以管理的对象)

        Session session = HibernateUtil.getSession();

        Transaction tx = session.beginTransaction();


        // 以z主键为基准
        Student student = session.get(Student.class, 1);

        session.delete(student);
        tx.commit();
        session.close();

    }


    /**
        查询方法
     * 对于load方法而言,如果没有该对象,报错
     */
    @Test
    public void load() {

        // 更新某个对象,一定要去把该对象查出来(数据库记录搞出来--》hibernate当中可以管理的对象)

        Session session = HibernateUtil.getSession();

        Transaction tx = session.beginTransaction();


        //
        Student student = session.get(Student.class, 3);


        System.out.println(student);
        tx.commit();
        session.close();

    }


    /**
     * 保存或者修改 saveOrUpdate()
     */
    @Test
    public void saveOrUpdate() {

        // 更新某个对象,一定要去把该对象查出来(数据库记录搞出来--》hibernate当中可以管理的对象)

        Session session = HibernateUtil.getSession();

        Transaction tx = session.beginTransaction();


        Student student = new Student();

        student.setId(4);
        student.setName("破仑拿222");

        // 以主键为基准,如果主键匹配就修改,主键不匹配就新增
        session.saveOrUpdate(student);
        tx.commit();
        session.close();

    }



    @Test
    public void update2() {
        Scanner scanner = new Scanner(System.in);
        int id = scanner.nextInt();

//更新某个对象,一定要去把该对象查出来(数据库记录搞出来--》hibernate当中可以管理的对象)

     Session session = HibernateUtil.getSession();

       Transaction tx = session.beginTransaction();

       System.out.println("你输入你需要更新的学生的编号:");
       int id = scanner.nextInt();

        Student s = session.get(Student.class,id);
        if(s == null){
          System.out.println("该学生不存在");
        } else {
           System.out.println("请输入你要更新的名字:");
            String name = scanner.next();

           s.setName(name);
            session.update(s);
            System.out.println("更新成功");
        }


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

    }

    /* HQL语句 执行数据库CRUD操作 
          */
   // 查询
    @Test
    public void query() {

        Session session = HibernateUtil.getSession();

        Transaction tx = session.beginTransaction();

        List<Student> studentList = HibernateUtil.getSession().createQuery("from Student ").list();

        for (Student student : studentList) {
            System.out.println(student.getId() + "\t" + student.getName() + "\t" + student.getBirth());
        }
        tx.commit();

    }

//     修改

    @Test
    public void up() {

        Session session = HibernateUtil.getSession();

        Transaction tx = session.beginTransaction();

        String hql = "delete  from Student su where su.id=1 ";

        Query queryupdate = session.createQuery(hql);

       int i= queryupdate.executeUpdate();
        tx.commit();


    }

//    修改方法

    @Test
    public void update3() {
        Session session = HibernateUtil.getSession();
        Transaction tx = session.beginTransaction();
        String hql = "update  Student su set  su.name='理想' where id=2";
        Query queryupdate = session.createQuery(hql);
        int ret = queryupdate.executeUpdate();
        
        tx.commit();


    }

}




 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值