Práctica introductoria a hibernar

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:
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
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());


Supongo que te gusta

Origin blog.csdn.net/weixin_40307206/article/details/103051752
Recomendado
Clasificación