Hibernate
- 对象关系映射或ORM是将应用程序域模型对象映射到关系数据库表的编程技术
- Hibernate是基于Java的ORM工具,它提供了一个框架,用于将应用程序域对象映射到关系数据库表,反之亦然。它提供了Java Persistence API的参考实现,使其成为具有松散耦合优势的ORM工具的绝佳选择
- Framework提供了使用JPA注释和基于XML的配置将普通旧Java对象映射到传统数据库表的选项
- Framework处理应用程序与数据库的交互,使开发人员可以更专注于业务逻辑和解决复杂问题
图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这些操作的命令是INSERT
,SELECT
,UPDATE
,和DELETE
。根据选择条件INSERT
添加新记录,SELECT
检索或选择现有记录,UPDATE
修改现有记录并DELETE
删除表中的表或记录。
图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();
}
}