Hibernate 入门实践

Hibernate是一个开源的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。

框架:其实就是可复用的程序集
Hibernate 框架:是一个全自动的持久层框架。

使用方法
1、创建项目,导入相关jar包。或直接创建Maven项目,如何构建Maven项目?
引入相关依赖:

<!-- 全自动持久层框架 -->
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-core</artifactId>
			<version>5.4.7.Final</version>
		</dependency>

2、在 classpath 目录下(代码中一般放在 src/main/resources目录下)创建配置文件:hibernate.cfg.xml (命名必须为它)
核心配置信息:

<?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、新建一个POJO(普通的Java对象)
示例:

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、新建一个配置文件 xxx.xml(命名随便取) 用于 实体类和数据库的映射。
在 hibernate.cfg.xml 中添加配置:<mapping resource ="xxx.xml"/>
示例:

<?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、新建一个测试类
示例:

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、运行测试:
在这里插入图片描述
在这里插入图片描述
根据程序输入可以看出,Hibernate 首先会根据映射创建 一张表,再执行插入语句,进行数据的添加。

补充:删除、修改、查询操作。
代码说明:只是从事务开启到事务结束的代码,其他代码和添加的代码一样。
删除: 通过面向对象思想删除,new 一个对象,传入要删除的记录的id即可。

	   session.getTransaction().begin(); //开启事务
		try {
    
    
			User u = new User();
			u.setUserId(12);
			session.delete(u);
			session.getTransaction().commit(); //提交事务
		} catch (Exception e) {
    
    
			session.getTransaction().rollback();  //若有异常 则回滚事务
		}

修改: 修改时首先要将需要修改的记录查询出来,再将其中某个属性修改,最后保存。

		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();//回滚事务  要么全部执行,要么全不执行。
		}

查询:

		//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());


猜你喜欢

转载自blog.csdn.net/weixin_40307206/article/details/103051752