hibernate

文章目录

    • Hibernate
    • 1、课程简介
    • 2、Hibernate的入门案例
    • 3.Hibernate配置文件详解
    • 4.Hibernate常用api介绍
    • 5.使用hibernate框架完成crud操作
    • 6.saveOrUpdate和merge
    • 7.hql

Hibernate

1、课程简介

什么是hibernate
Hibernate是一个ORM(对象关系映射)框架,我们在写程序时 ,用的是面向对象的方法,但是在关系型数据库里,存的是一条条的数据,为了用纯面向对象的思想解决问题,所有需要将程序中的对象和数据库的记录建立起映射关系,ORM就是这样的技术,而Hibernate就是这样一个框架,以操作对象的方式操作数据库。Hibernate是一个操作数据库的框架,实现了对JDBC的封装。
Hibernate的优势
1、对象化。hibernate可以让开发人员以面相对象的思想来操作数据库。jdbc只能通过SQL语句将元数据传送给数据库,进行数据操作。而hibernate可以在底层对元数据和对象进行转化,使得开发者只需要面向对象的方式来存取数据即可。

2、更好的移植性。hibernate使用xml或JPA的配置以及数据库方言等等的机制,使得hibernate具有更好的移植性,对于不同的数据库,开发者只需要使用相同的数据操作即可,无需关心数据库之间的差异。而直接使用JDBC就不得不考虑数据库差异的问题。

3、开发效率高。hibernate提供了大量的封装,很多数据操作以及关联关系等都被封装的很好,开发者不需写大量的sql语句,这就极大的提高了开发者的开发效率。 原生sql、hql、qbc、qbe、注解

4、缓存机制的使用。hibernate提供了缓存机制(session缓存,二级缓存,查询缓存),对于那些改动不大且经常使用的数据,可以将它们放到缓存中,不必在每次使用时都去查询数据库,缓存机制对提升性能大有裨益 redis

2、Hibernate的入门案例

2.1:导入hibernate框架依赖的jar文件

2.2:创建实体类 提供set get方法
public class Person implements Serializable {
private int id;
private String name;
private String password;
private Date bir;
2.3:创建实体类映射文件 Person_hbm.xml

2.4:创建hibernate的核心配置文件 hibernate.cfg.xml

org.hibernate.dialect.MySQLDialect com.mysql.jdbc.Driver jdbc:mysql://localhost:3306/0423dbs root root true true
      
      

2.5:实例化配置文件,操作数据对象
public class HT {
/*
* hibernate 执行原理 执行过程
*
* 1: 实例化配置文件
* 2:构建session工厂
* 3: 创建session
* 4: 开启事务
* 5: 操作数据
* 6: 提交事务
* 7: 关闭session
* */
public static void main(String[] args) {
//读取配置文件,实例化 默认的寻找 名字为 hibernate.cfg.xml
Configuration cfg = new Configuration().configure();
//构建session工厂
SessionFactory sf = cfg.buildSessionFactory();
//创建session
Session session = sf.openSession();
//操作数据 (insert delete update)手动开启事务
Transaction bt = session.beginTransaction();
//操作数据
Person per = new Person();
per.setName(“张三丰”);
per.setBir(new java.util.Date());
//保存数据(hibernate中操作数据的所有方法被封装到了session对象中)
session.save(per);
//提交事务
bt.commit();
session.close();
}
}

3.Hibernate配置文件详解

Person_hbm.xml配置文件详解

1、映射配置文件名称和路径不是固定的
2、映射配置文件中,标签name属性值写实体类相关内容
2.1、class标签name属性值实体类全路径
2.2、id标签和property标签name属性值 实体类属性名称
3、Id标签和property,column属性是可以省略的
3.1、不写的时候值和name属性值一样的
4、Property标签type属性,一般我们不用,主要是用来设置数据库字段的类型,Hibernate会自动设置
Hibernate.cfg.xml 配置文件详解
1、配置写的位置必须在里面
2、配置要求,三部分 数据库必须的、hibenate部分可选、映射文件是必须的
3、核心配置文件名称和位置是固定的 位置src下,名称是hiberante.cfg.xml

4.Hibernate常用api介绍

Configuration接口:
Configuration configuration = new Configuration().configure();
到src下面找到名称为hibernate.cfg.xml配置文件,创建对象,把配置文件放到对象里面(加载核心配置文件)

SessionFactory接口:
1、使用configuration对象创建sessionFactory对象
a) 创建sessionfactory过程中做一些事情:即根据核心配置文件中,有数据库配置,有映射配置部分,到数据库里面根据映射关系把表创建

2、创建sessionfactory过程中,这个过程很消耗资源
a) 在hibernate操作中,建议一个项目一般创建一个sessionfactory
Session接口:
1、session类似于jdbc中的Connection
2、调用session里面不同的curd方法,save、update、delete、根据id查询/get

Transaction事务控制接口:
1、事务对象(commit以及rollback)
2、事务特性:
a) 原子性
所有的操作要么都成功 要么都失败
b) 一致性
数据的一致性,转钱一方少钱,一方要多钱
c) 隔离性
多个事务操作同一条数据,彼此不影响
d) 持久性
因为事务要提交,保存到数据库中,这个就是持久化

5.使用hibernate框架完成crud操作

6.saveOrUpdate和merge

@Test
//saveOrUpdate
public void test4() {
Configuration configure = new Configuration().configure(“hibernate.cfg.xml”);
SessionFactory sessionFactory = configure.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
User user = new User();
user.setId(1);
user.setName(“张三”);
session.saveOrUpdate(user);
transaction.commit();
}

@Test
//merge
public void test5() {
Configuration configure = new Configuration().configure(“hibernate.cfg.xml”);
SessionFactory sessionFactory = configure.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
User user = new User();
user.setId(1);
user.setName(“李四”);
session.merge(user);
transaction.commit();
}

saveOrUpdate、merge 都可以根据对象的状态判断进行savor还是update;
如果是瞬时态进行save,如果是持久态进行update
不同的是,merge在进行update前会先根据对象的值和数据库是否一致,如果完全一致则不需要update

7.hql

1.查询所有信息
public void test7() {
Configuration configure = new Configuration().configure(“hibernate.cfg.xml”);
SessionFactory sessionFactory = configure.buildSessionFactory();
Session session = sessionFactory.openSession();
Query query = session.createQuery(“from User”, User.class);
List list = query.list();
for (User user : list) {
System.out.println(user);
}
}
2.投影查询 Object[]
public void test8() {
Configuration configure = new Configuration().configure(“hibernate.cfg.xml”);
SessionFactory sessionFactory = configure.buildSessionFactory();
Session session = sessionFactory.openSession();
Query query = session.createQuery(“select name,bir from User”, Object[].class);
List list = query.list();
for (Object[] o : list) {
for (Object obj : o) {
System.out.print(obj);
}
System.out.println();
}
}
3.投影查询 Map
public void test9() {
Configuration configure = new Configuration().configure(“hibernate.cfg.xml”);
SessionFactory sessionFactory = configure.buildSessionFactory();
Session session = sessionFactory.openSession();
Query query = session.createQuery(“select new Map(name,bir) from User”, Map.class);
List list = query.list();
for (Map m: list) {
for (Entry entry: m.entrySet()) {
System.out.print(entry.getKey()+"\t"+entry.getValue());
}
System.out.println();
}
}
4.投影查询 对象
public void test10() {
Configuration configure = new Configuration().configure(“hibernate.cfg.xml”);
SessionFactory sessionFactory = configure.buildSessionFactory();
Session session = sessionFactory.openSession();
Query query = session.createQuery(“select new User(name,bir) from User”, User.class);
List list = query.list();
for (User user : list) {
System.out.println(user);
}
}
5.条件查询 名字绑定
//hql 条件查询 名字绑定
public void test12() {
Configuration configure = new Configuration().configure(“hibernate.cfg.xml”);
SessionFactory sessionFactory = configure.buildSessionFactory();
Session session = sessionFactory.openSession();
Query query = session.createQuery(“from User where name=:name1”, User.class);
query.setParameter(“name1”,“张三”);
List list = query.list();
for (User user : list) {
System.out.println(user);
}
}
6.条件查询 map绑定
public void test13() {
Configuration configure = new Configuration().configure(“hibernate.cfg.xml”);
SessionFactory sessionFactory = configure.buildSessionFactory();
Session session = sessionFactory.openSession();
Query query = session.createQuery(“from User where name=:name and password=:password”, User.class);
Map map = new HashMap();
map.put(“name”,“张三”);
map.put(“password”, “123”);
query.setProperties(map);
List list = query.list();
for (User user : list) {
System.out.println(user);
}
}
7.条件查询 对象绑定
public void test14() {
Configuration configure = new Configuration().configure(“hibernate.cfg.xml”);
SessionFactory sessionFactory = configure.buildSessionFactory();
Session session = sessionFactory.openSession();
Query query = session.createQuery(“from User where name=:name and password=:password”);
User u = new User(“张三”,“123”,null);
query.setProperties(u);
List list = query.list();
for (User user : list) {
System.out.println(user);
}
}
8.模糊查询
public void test15() {
Configuration configure = new Configuration().configure(“hibernate.cfg.xml”);
SessionFactory sessionFactory = configure.buildSessionFactory();
Session session = sessionFactory.openSession();
Query query = session.createQuery(“from User where name like:name and password=:password”, User.class);
User u = new User("%张%",“123”,null);
query.setProperties(u);
List list = query.list();
for (User user : list) {
System.out.println(user);
}
}
9.查询单个对象
public void test16() {
Configuration configure = new Configuration().configure(“hibernate.cfg.xml”);
SessionFactory sessionFactory = configure.buildSessionFactory();
Session session = sessionFactory.openSession();
Query query = session.createQuery(“from User where id = ?1”, User.class);
query.setParameter(1, 1);
User user = query.getSingleResult();
System.out.println(user);
}
10.查询聚合函数
public void test17() {
Configuration configure = new Configuration().configure(“hibernate.cfg.xml”);
SessionFactory sessionFactory = configure.buildSessionFactory();
Session session = sessionFactory.openSession();
Query query = session.createQuery(“select count(*)from User”, Long.class);
int result = query.getSingleResult().intValue();
System.out.println(result);
}
11.hql 分页
public void test18() {
Configuration configure = new Configuration().configure(“hibernate.cfg.xml”);
SessionFactory sessionFactory = configure.buildSessionFactory();
Session session = sessionFactory.openSession();
Query query = session.createQuery(“from User”, User.class);
query.setFirstResult(1);
query.setMaxResults(3);
List list = query.list();
for (User user : list) {
System.out.println(user);
}
}

你可能感兴趣的:(框架)