ORM : 对象关系映射
映射需要通过XML的配置文件来完成,这个配置文件尽量统一(xxx.hbm.xml) Hibernate核心的配置:必须的配置、可选的配置、映射文件的引入
Configuration的作用:1.加载核心配置文件 2.加载映射文件 SessionFactory:内部维护了Hibernate的连接池和Hibernate的二级缓存,是线程安全的对象,一个项目创建一个对象即可 Session:代表Hibernate和数据库的连接对象,不是线程安全的,所以不能定义成全局的变量 Transaction:Hibernate中管理事务的对象
文件结构
工具类
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtils {
public static final Configuration cfg;
public static final SessionFactory sf;
static {
cfg = new Configuration().configure();
sf = cfg.buildSessionFactory();
}
public static Session openSession() {
return sf.openSession();
}
}
对象类
public class Customer {
private int id;
private String name;
private String source;
private String industry;
private String level;
private String phone;
private String mobile;
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 getSource() {
return source;
}
public void setSource(String source) {
this.source = source;
}
public String getIndustry() {
return industry;
}
public void setIndustry(String industry) {
this.industry = industry;
}
public String getLevel() {
return level;
}
public void setLevel(String level) {
this.level = level;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
@Override
public String toString() {
return "Customer{" +
"id=" + id +
", name='" + name + '\'' +
", source='" + source + '\'' +
", industry='" + industry + '\'' +
", level='" + level + '\'' +
", phone='" + phone + '\'' +
", mobile='" + mobile + '\'' +
'}';
}
}
映射配置文件
<?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>
<!--建立类与表的映射-->
<!--如果类中的属性名和表中的字段名一直,column可以省略-->
<class name="com.jinke.hibernate.Customer" table="customer">
<!--建立类中的属性与表中的主键对应-->
<id name="id" column="id">
<generator class="native"/>
</id>
<!--建立类中的普通属性和标的字段的对应-->
<property name="name" column="name" length="32" type="string" not-null="true" unique="true"/>
<property name="source" column="source"/>
<property name="industry" column="industry"/>
<property name="level" column="level"/>
<property name="phone" column="phone"/>
<property name="mobile" column="mobile"/>
</class>
</hibernate-mapping>
总配置类
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!--必须配置===============-->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/spring_database?characterEncoding=utf8
</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">1234</property>
<!--配置Hibernate的方言-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!--可选配置===============-->
<!--打印sql-->
<property name="hibernate.show_sql">true</property>
<!--格式化sql-->
<property name="hibernate.format_sql">true</property>
<!--自动创建表-->
<property name="hibernate.hbm2ddl.auto">update</property>
<!--映射文件的引用===============-->
<mapping resource="com/jinke/hibernate/Customer.hbm.xml"/>
</session-factory>
</hibernate-configuration>
测试类
import com.jinke.hibernate.utils.HibernateUtils;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.query.NativeQuery;
import org.hibernate.query.Query;
import org.junit.Test;
import java.util.Arrays;
import java.util.List;
public class HibernateDemo1 {
@Test
public void demo() {
/* //1.加载hibernate核心配置文件
Configuration configuration = new Configuration().configure();
//2.创建一个sessionfactory对象:类似于jdbc中连接池
SessionFactory sessionFactory = configuration.buildSessionFactory();
//3.通过sessionFactory获取到session对象:类似于jdbc中connection
Session session = sessionFactory.openSession();*/
Session session = HibernateUtils.openSession();
//4.手动开启事务
Transaction transaction = session.beginTransaction();
//5.编写代码
Customer customer = new Customer();
customer.setName("王东");
//保存
session.save(customer);
//6.事务提交
transaction.commit();
//7.资源释放
session.close();
/*sessionFactory.close();*/
}
/**
* get方法:(一般用这种)
* 采用立即加载,执行到这行代码的时候,马上发送SQL语句去查询
* 查询后返回的是真是对象本身
* 查询一个找不到的对象会返回null
* <p>
* load方法:
* 采用延迟加载(懒加载),执行到这行代码的时候,不会发送SQL语句,当真正使用项目的时候才会发送SQL语句
* 查询后返回的是代理对象
* 查询一个找不到的对象会抛出一个异常
*/
@Test
//查询
public void demo2() {
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//使用get方法
Customer customer = session.get(Customer.class, 1);
System.out.println(customer);
//使用load方法
/*Customer load = session.load(Customer.class, 2);
System.out.println(load);*/
tx.commit();
session.close();
}
@Test
//修改
public void demo3() {
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//直接创建对象,进行修改
/*Customer customer = new Customer();
customer.setId(1);
customer.setName("李达");
session.update(customer);*/
//先查询,再修改(一般用这种)
Customer customer = session.get(Customer.class, 1);
customer.setName("张三");
session.update(customer);
tx.commit();
session.close();
}
@Test
//删除
public void demo4() {
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//直接创建对象,进行删除
/*Customer customer = new Customer();
customer.setId(1);
session.delete(customer);*/
//先查询,再删除(一般用这种) 级联删除
Customer customer = session.get(Customer.class, 1);
session.delete(customer);
tx.commit();
session.close();
}
@Test
//保存或更新
public void demo5() {
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
Customer customer = new Customer();
/*customer.setName("李飞");
session.saveOrUpdate(customer);*/
customer.setId(3);
customer.setName("如花");
session.saveOrUpdate(customer);
tx.commit();
session.close();
}
@Test
//查询所有
public void demo6() {
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//接收HQL:hibernate query language 面向对象的查询语言
Query query = session.createQuery("from Customer");
List<Customer> list = query.list();
for (Customer customer : list) {
System.out.println(customer);
}
//接收sql:
NativeQuery sqlQuery = session.createSQLQuery("select * from customer");
List<Object[]> sqlList = sqlQuery.list();
for (Object[] objects : sqlList) {
System.out.println(Arrays.toString(objects));
}
tx.commit();
session.close();
}
}
结果在MySql Workbench里看
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有