Hibernate es un marco de mapeo relacional de objetos de código abierto. Encapsula JDBC con objetos muy livianos. Establece una relación de mapeo entre POJO y las tablas de la base de datos. Es un marco ORM completamente automático. Hibernate puede generar automáticamente declaraciones SQL y ejecutarlas automáticamente. permitiendo a los programadores de Java utilizar el pensamiento de programación de objetos para manipular la base de datos como deseen.
Marco : en realidad es un ensamblaje reutilizable .
Marco de hibernación: es un marco de capa de persistencia totalmente automático.
Uso :
1. Cree un proyecto e importe paquetes jar relevantes. O cree un proyecto Maven directamente ¿ Cómo construir un proyecto Maven?
Introducir dependencias relacionadas:
<!-- 全自动持久层框架 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.7.Final</version>
</dependency>
2. Cree un archivo de configuración en el directorio classpath (el código generalmente se coloca en el directorio src/main/resources): hibernate.cfg.xml (debe tener un nombre)
Información de configuración principal:
<?xml version='1.0' encoding='UTF-8'?>
<!--hibernate配置文件的相关约束-->
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration>
<session-factory>
<!-- 自动建表 -->
<property name="hbm2ddl.auto">update</property>
<!-- 方言 根据不同方言生成不同sql语句 -->
<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
<!--数据库相关配置-->
<property name="connection.username">root</property>
<property name="connection.password">123456</property>
<property name="connection.url">jdbc:mysql://127.0.0.1:3306/hibernateDemo?characterEncoding=utf-8</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!--是否打印 自动生成的 sql 语句-->
<property name="show_sql">true</property>
<!--是否格式化 生成的sql 语句-->
<property name="format_sql">true</property>
<!--关系映射 在第四点有说明-->
<mapping resource ="demo/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
3. Cree un nuevo ejemplo de POJO (objeto Java ordinario)
:
public class User {
private int id;
private String name;
private String password;
private int age;
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 getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
4. Cree un nuevo archivo de configuración xxx.xml (nómbrelo como desee) para mapear entre clases de entidad y bases de datos.
Agregar configuración en hibernate.cfg.xml: <mapping resource ="xxx.xml"/>
Ejemplo:
<?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="demo.User" table="user" >
<!--name指类中属性名,column指对应的表中列名 -->
<id name = "id" column ="user_id">
<generator class="identity"></generator> <!--主键从0自增-->
</id>
<property name="name" column ="namedemo" type="string" length ="20"></property>
<!--默认column 和 name 值相同,其他属性也都有默认值-->
<property name="password"></property>
<property name="age"></property>
</class>
</hibernate-mapping>
5. Cree una nueva clase de prueba.
Ejemplo:
public class HibernateDemo {
public static void main(String[] args) {
// .configure()方法会读取classpath下的hibernate.cfg.xml
Configuration cfg = new Configuration().configure();
// 会启动一个线程
SessionFactory fac = cfg.buildSessionFactory();
//打开一条数据库会话,底层会建立jdbc连接
Session session = fac.openSession();
System.out.println("Hibernate 已成功连接数据库");
session.getTransaction().begin(); //开启事务
User user = new User();
user.setName("张三");
user.setPassword("123456");
user.setAge(15);
session.save(user); //保存数据
session.getTransaction().commit(); //提交事务
//关闭资源
session.close();
fac.close();
}
}
6. Ejecute la prueba:
según la entrada del programa, Hibernate primero creará una tabla basada en el mapeo y luego ejecutará la instrucción de inserción para agregar datos.
Suplemento: eliminar, modificar, consultar operaciones.
Descripción del código: es solo el código desde el inicio de la transacción hasta el final de la transacción, los demás códigos son los mismos que los códigos agregados.
Eliminar: elimine mediante el pensamiento orientado a objetos, cree un nuevo objeto y pase la identificación del registro que se eliminará.
session.getTransaction().begin(); //开启事务
try {
User u = new User();
u.setUserId(12);
session.delete(u);
session.getTransaction().commit(); //提交事务
} catch (Exception e) {
session.getTransaction().rollback(); //若有异常 则回滚事务
}
Modificación: Al modificar, primero se deben consultar los registros que se deben modificar, luego modificar uno de los atributos y finalmente guardarlos.
session.getTransaction().begin();//开启事务
try {
//错误方法
/*User u = new User();
u.setUserId(12);
u.setAge(0);
session.update(u);*/
//先查询 再修改 再更新
User u = session.get(User.class, 12);
u.setAge(100);
session.update(u);
session.getTransaction().commit();//提交事务
} catch (Exception e) {
session.getTransaction().rollback();//回滚事务 要么全部执行,要么全不执行。
}
Preguntar:
//HQL(Hibernate Query Language)语句,纯查询语句,面向对象的语言,在HQL中没有数据库的概念
//方式一 list集合
String hql = "from User u";
Query<User> query = session.createQuery(hql);
//query.list() 返回list 集合
List<User> list = query.list();
for(User u: list){
System.out.println(u.getName());
}
//方式二 使用迭代器
String hql = "from User u where u.age > 5";
Query query = session.createQuery(hql);
Iterator it = query.iterate(); //先查询符合条件的id
while(it.hasNext()){
User u = (User)it.next(); //再根据id查具体值
System.out.println(u.getName());
}
//方式三 唯一值
String hql = "from User u where u.age = 5";
Query query2 = session.createQuery(hql);
User u =(User) query2.uniqueResult(); //确定只有一个返回值时使用 否则会抛出异常
System.out.println(u.getName());