SSH中hibernate的使用

一、第一个hibernate程序

新建javaproject

创建实体类

Customer.java

package cn.sm1234.domain;

import java.io.Serializable;


public class Customer implements Serializable{

	private Integer id;
	private String name;
	private String gender;
	private Integer age;
	private String level;
	
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	public String getLevel() {
		return level;
	}
	public void setLevel(String level) {
		this.level = level;
	}

}

创建hbm.xml 的对象关系映射文件

建议规则要求:
1)文件名称: 实体类名称.hbm.xml
2)文件存放的位置:和实体类存放到同一个目录下

Customer.hbm.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 package="cn.sm1234.domain">
 
 	<!-- 
 		name:类名
 		table:表名
 	 -->
 	<class name="Customer" table="t_customer">
 		<!-- 主键 -->
 		<id name="id" column="c_id">
 			<generator class="native"></generator>
 		</id>
 		<!-- 其他属性 -->
 		<property name="name" column="c_name"></property>
 		<property name="gender" column="c_gender"></property>
 		<property name="age" column="c_age"></property>
 		<property name="level" column="c_level"></property>
 	</class>		
 
 
</hibernate-mapping>   

*.hbm.xml 这个文件是 hibernate 对象关系映射文件
hibernate-mapping 标签:根标签
package 属性: 类所在的包
class 标签: 代表映射一个类
1.name:类的限定名(包名+类名)
如果有了package 属性,那么 name 只写 类名即可
2.table:表名称

创建 hibernate.cfg.xml 文件

建议规则要求:
1)文件名称:hibernate.cfg.xml
2)文件存放位置:项目的 src 目录下

hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
	
<hibernate-configuration>	
	<!-- 连接数据库的参数 -->
	<session-factory>
		<!-- 1.连接数据库参数 -->
		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/sm1234_hibernate</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">123456</property>
		
		<!-- hibernate方言 -->
		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
		
		<!-- 2.hibernate扩展参数 -->
		<property name="hibernate.show_sql">true</property>
		<property name="hibernate.format_sql">true</property>
		<property name="hibernate.hbm2ddl.auto">update</property>
		
		<!-- *.hbm.xml文件 -->
		<mapping resource="cn/sm1234/domain/Customer.hbm.xml"/>
	</session-factory>
</hibernate-configuration>	

hibernate.cfg.xml 是 hibernate 的核心配置文件
一共分为三个部分:

  1. 数据库连接的参数
    hibernate.connection.driver_class
    hibernate.connection.url
    hibernate.connection.username
    hibernate.connection.password hibernate.dialect
  2. hibernate 扩展参数
    hibernate.show_sql : 是否输出 hibernate 生成的 sql 语句 hibernate.format_sql: 是否格式化 hibernate 生成的 sql 语句 hibernate.hbm2ddl.auto : 是否需要 hibernate 维护表结构
    1.create : 每次 hibernate 都会生成表结构
    2.update: hibernate 会维护表结构。没有表的时候创建表,有表的时候不创建。
  3. 映射信息
<mapping resource="cn/sm1234/domain/Customer.hbm.xml"/>

编写测试代码

demo1.java

package cn.sm1234.test;

import java.io.File;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;

import cn.sm1234.domain.Customer;


public class Demo1 {

	@Test
	public void test1(){
		Customer customer = new Customer();
		customer.setName("jackma");
		customer.setAge(56);
		customer.setGender("男");
		customer.setLevel("vip");
		
		//1.读取 hibernate.cfg.xml 文件
		Configuration cfg = new Configuration();
		cfg.configure();
		//cfg.configure(new File("./src/hbm.cfg.xml"));
		
		//2.创建 SessionFactory 工厂
		SessionFactory factory = cfg.buildSessionFactory();
		
		//3.创建 Session 对象
		Session session = factory.openSession();
		
		//4.开启事务
		Transaction tx = session.beginTransaction();
		
		//5.执行添加操作
		session.save(customer);
		
		//6.提交事务
		tx.commit();
		
		//7.关闭资源
		session.close();
	}
}

导包

导入 junit 和 hibernate 相关的jar包
创建数据库 ,数据库名字为 sm1234_hibernate

二、Hibernate 核心接口

hibernate 的核心 API 一共有 6 个:

Configuration 类

Configuration 的作用启动 hibernate 程序,加载 hibernate.cfg.xml 配置文件
1)通常情况下 Configuration 对象只会创建一个对象,Configuration 对象是单例 的

SessionFactory 接口

SessionFactory 接口的作用加载连接数据库,扩展参数,映射信息,通过这些映 射信息帮助我们创建 Session 对象。
注意事项: 1)通常一个项目只需要创建一个 SessionFactory 即可!

Session 接口

Session 接口的作用用于操作对象,从而操作数据库。
session 的常用方法:
save() 保存对象
update()更新对象
delete() 删除对象
get() 查询一个对象
1)Session 是线程不安全的对象,在项目中需要创建多个 Session 对象,一个线 程就创建一个 Session 对象。

Transaction 接口

Transaction 接口的作用是用于执行事务操作 Transaction 的方法:
1)commit(): 提交事务
2)rollback() 回顾事务

Query 接口

Query 接口的作用用于执行 HQL 查询

Criteria 接口

Criteria 接口的作用用于执行基于对象的查询(QBC 查询)

三、HibernateUtil 工具类:

创建hibernate工具类

HibernateUtil.java

package cn.sm1234.utils;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

/**Hibernate开发的工具类
 */
public class HibernateUtil {

	private static Configuration cfg = null;
	private static SessionFactory factory = null;
	
	//只需要执行1次
	static{
		cfg = new Configuration();
		cfg.configure();
		factory = cfg.buildSessionFactory();
	}
	
	/**
	 * 让外部获取Session对象
	 */
	public static Session getSession(){
		return factory.openSession();
	}
}

使用hibernateutil工具类

可以少些三个步骤相比demo1,直接从第三四个步骤开始
demo2.java

package cn.sm1234.test;

import org.hibernate.Session;
//import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
//import org.hibernate.cfg.Configuration;
import org.junit.Test;

import cn.sm1234.domain.Customer;
import cn.sm1234.utils.HibernateUtil;

/**使用HibernateUtil工具类
 */
public class Demo2 {

	@Test
	public void test1(){
		Customer customer = new Customer();
		customer.setName("老王22289");
		customer.setAge(40);
		customer.setGender("男");
		customer.setLevel("VIP客户");
		
		Session session = HibernateUtil.getSession();
		
		//4.开启事务
		Transaction tx = session.beginTransaction();
		
		//5.执行添加操作
		session.save(customer);
		
		//6.提交事务
		tx.commit();
		
		//7.关闭资源
		session.close();
	}
}

四、使用hibernate进行增删改查

@Test
	public void test1(){
		Customer customer = new Customer();
		customer.setName("老王33338");
		customer.setAge(40);
		customer.setGender("男");
		customer.setLevel("VIP客户");
		
		Session session = HibernateUtil.getSession();
		
		//4.开启事务
		Transaction tx = session.beginTransaction();
		
		//5.执行添加操作
		session.save(customer);
		
		//6.提交事务
		tx.commit();
		
		//7.关闭资源
		session.close();
	}

更新

@Test
	public void test2(){
		Customer customer = new Customer();
		//给Customer的id赋值,才可以更新
		customer.setId(6);
		customer.setName("老王44444");
		customer.setAge(45);
		customer.setGender("男");
		customer.setLevel("VIP客户");
		
		Session session = HibernateUtil.getSession();
		
		//4.开启事务
		Transaction tx = session.beginTransaction();
		
		//5.执行添加操作
		session.update(customer);
		
		//6.提交事务
		tx.commit();
		
		//7.关闭资源
		session.close();
	}

增加或更新

@Test
	public void test3(){
		Customer customer = new Customer();
		//给Customer的id赋值,才可以更新
		customer.setId(6);
		customer.setName("老王666");
		customer.setAge(45);
		customer.setGender("男");
		customer.setLevel("VIP客户");
		
		Session session = HibernateUtil.getSession();
		
		//4.开启事务
		Transaction tx = session.beginTransaction();
		
		//5.执行添加操作
		session.saveOrUpdate(customer);
		
		//6.提交事务
		tx.commit();
		
		//7.关闭资源
		session.close();
	}

删除

@Test
	public void test4(){
		
		Session session = HibernateUtil.getSession();
		
		//4.开启事务
		Transaction tx = session.beginTransaction();
		
		//5.执行添加操作
		Customer customer = new Customer();
		customer.setId(7);
		session.delete(customer);
		
		//6.提交事务
		tx.commit();
		
		//7.关闭资源
		session.close();
	}
	```

```java
@Test
	public void test5(){
		
		Session session = HibernateUtil.getSession();
		
		//4.开启事务
		Transaction tx = session.beginTransaction();
		
		//5.执行添加操作
		//Customer cust = session.get(Customer.class, 6);
		Customer cust = session.load(Customer.class, 6);
		System.out.println(cust);
		
		//6.提交事务
		tx.commit();
		
		//7.关闭资源
		session.close();
	}

查询

@Test
	public void test5(){
		
		Session session = HibernateUtil.getSession();
		
		//4.开启事务
		Transaction tx = session.beginTransaction();
		
		//5.执行添加操作
		//Customer cust = session.get(Customer.class, 6);
		Customer cust = session.load(Customer.class, 6);
		System.out.println(cust);
		
		//6.提交事务
		tx.commit();
		
		//7.关闭资源
		session.close();
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值