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 的核心配置文件
一共分为三个部分:
- 数据库连接的参数
hibernate.connection.driver_class
hibernate.connection.url
hibernate.connection.username
hibernate.connection.password hibernate.dialect - hibernate 扩展参数
hibernate.show_sql : 是否输出 hibernate 生成的 sql 语句 hibernate.format_sql: 是否格式化 hibernate 生成的 sql 语句 hibernate.hbm2ddl.auto : 是否需要 hibernate 维护表结构
1.create : 每次 hibernate 都会生成表结构
2.update: hibernate 会维护表结构。没有表的时候创建表,有表的时候不创建。 - 映射信息
<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();
}