版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zl_StepByStep/article/details/80357943
一、hibernate的概念
1.1、框架是什么?
①框架是用来提高开发效率的
②封装好了一些功能,我们需要使用这些功能时,调用即可,不需要再手动实现。
③框架可以理解成一个半成品的项目,只要懂得如何配置和使用这些功能即可。
1.2、hibernate框架是什么?
1.3、hibernate的好处
操作数据库的时候,可以面向对象的方式来完成,不需要写SQL语句
1.4、hibernate是一款ORM框架
ORM即对象关系映射。
ORM分4级,hibernate属于4级,完全面向对象操作数据库;mybatis属于2级;DBUtils属于1级。
二、hibernate项目搭建
2.1、导包
required下的包即为hibernate的必要包
扫描二维码关注公众号,回复:
3042892 查看本文章
连接数据库的驱动
2.2、创建数据库、准备表
对应的JavaBean
package com.zl;
public class Customer {
private Integer id;
private String name;
private Integer age;
private String sex;
private String city;
public Customer() {
super();
// TODO Auto-generated constructor stub
}
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 Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
}
2.3、写ORM元数据(对象与表的映射配置文件)
导入约束
key中的值是从DTD的头部复制粘贴进去的
把对应DTD的头复制粘贴过去
(mapping的复制粘贴到Customer.hbm.xml里,configuration的复制粘贴到hibernate.cfg.xml里)
ORM元数据
id元素用于配置数据库中表的主键
创建数据库表的字段的类型与实体中属性的类型保持一致,在property元素中:
name属性是实体类中的成员变量,column是数据库中的字段名。
type属性可以是java的数据类型(类型的完整类名,比如java.lang.String)、数据库的数据类型、hibernate的数据类型,这里的type属性是保持一致的,所以最好这里不写type属性,以免出错。
2.4、写主配置文件
<?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>
<!-- Database connection settings --><!-- 必须要配置的,驱动,url,用户名,密码,数据库方言 -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8</property>
<property name="connection.username">root</property>
<property name="connection.password">123456</property>
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- JDBC connection pool (use the built-in) <property name="connection.pool_size">1</property> --> <!-- Enable Hibernate's automatic session context management <property name="current_session_context_class">thread</property>--> <!-- Disable the second-level cache <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property> --> <!-- Echo all executed SQL to stdout --> <property name="show_sql">true</property> <!-- Drop and re-create the database schema on startup --> <property name="hbm2ddl.auto">update</property> <mapping resource="com/zl/Customer.hbm.xml"/> </session-factory></hibernate-configuration>
2.5、写测试代码
package com.zl;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
public class Test {
//@Test
public void testInsert() { //1.插入数据
//1.加载hibernate.cfg.xml配置
Configuration config = new Configuration().configure();
ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(config.getProperties()).build();
//2.获取SessionFactory,sessionFactory负责保存和使用所有配置信息,消耗内存资源非常大,sessionFactory属于线程安全的对象设计,在Web项目中,只创建一个
SessionFactory sessionFactory = config.buildSessionFactory(sr);
//3.得到一个session,session对象表达hibernate框架与数据库之间的一次连接(会话),类似JDBC的Connection对象,除此之外还可以完成对数据库中谁的增删改查
Session session = sessionFactory.openSession();
//4.开启事务,session获得操作事务的Transaction对象
Transaction t = session.beginTransaction(); //开启事务并获得操作事务的t对象
//Transaction t2 = session.getTransaction(); //获得操作事务的t2对象
//5.操作
//5.1创建对象并为对象的属性赋值
Customer c = new Customer();
c.setName("Cody");
c.setAge(15);
c.setSex("男");
c.setCity("武汉");
//5.2将数据存储到表中
session.save(c);
//6.提交事务
t.commit();
//7.关闭资源
session.close();
sessionFactory.close();
}
//@Test
public void testUpdate() { //2.修改数据
//1.加载hibernate.cfg.xml配置
Configuration config = new Configuration().configure();
ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(config.getProperties()).build();
//2.获取SessionFactory
SessionFactory sessionFactory = config.buildSessionFactory(sr);
//3.得到一个session
Session session = sessionFactory.openSession();
//4.开启事务
Transaction t = session.beginTransaction();
//5.操作
//5.1创建对象并为指定id的那条记录修改其他的属性值
Customer c = new Customer();
c.setId(1);
c.setName("张华");
c.setAge(50);
c.setSex("男");
c.setCity("埃及");
//5.2将数据存储到表中
session.update(c);
//6.提交事务
t.commit();
//7.关闭资源
session.close();
sessionFactory.close();
}
//@Test
public void testFindById() { //3.查找数据
//1.加载hibernate.cfg.xml配置
Configuration config = new Configuration().configure();
ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(config.getProperties()).build();
//2.获取SessionFactory
SessionFactory sessionFactory = config.buildSessionFactory(sr);
//3.得到一个session
Session session = sessionFactory.openSession();
//4.开启事务
Transaction t = session.beginTransaction();
//5.操作
//5.1对于hibernate中的根据id的查找操作,可以使用两个方法get()、load()
Customer c = (Customer)session.get(Customer.class, 1);//查找id为1的那条记录
//5.2打印到控制台
System.out.println("姓名:"+c.getName()+",年龄:"+c.getAge()+",性别:"+c.getSex()+",所在城市:"+c.getCity());
//6.提交事务
t.commit();
//7.关闭资源
session.close();
sessionFactory.close();
}
@Test
public void testDelete() { //4.删除数据
//1.加载hibernate.cfg.xml配置
Configuration config = new Configuration().configure();
ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(config.getProperties()).build();
//2.获取SessionFactory
SessionFactory sessionFactory = config.buildSessionFactory(sr);
//3.得到一个session
Session session = sessionFactory.openSession();
//4.开启事务
Transaction t = session.beginTransaction();
//5.操作
//5.1先查询要修改的那条数据
Customer c = (Customer)session.get(Customer.class, 7);
//5.2删除这条数据
session.delete(c);
//6.提交事务
t.commit();
//7.关闭资源
session.close();
sessionFactory.close();
}
}