Hibernate4入门01--基本知识

一,Hibernate框架的主要工作:

  1. 提高数据访问层的编码效率,对JDBC进行了轻量级的对象封装;
  2. 将数据库的关系型数据,映射到普通的java类中,通过操作对象来操作数据库的数据,即ORM(Object Relational Mapping)对象-关系型数据映射。

二,Hibernate使用前的准备过程:

  1. 编写Hibernate的配置文件(可自动生成):hibernate.cfg.xml,主要是配置SessionFactory。

  
  

    
    
    com.mysql.jdbc.Driver
    
    
      jdbc:mysql://localhost:3306/cnconsum
    
    
    root
    
    naruto68
    
    
    org.hibernate.dialect.MySQLDialect
     
    true

    
    
    ...
  

  1. 编写回话工厂类HibernateSessionFactory:主要用于根据配置文件创建SessionFactory,并利用SessionFactory获取Session。
//1,通过Configuration对象解析hibernate.cfg.xml的内容,并创建SessionFactory对象。
configuration.configure();
......省略注册机代码
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
//2,通过sessionFactory的openSession()方法,获取session对象;
......省略处理每个线程维护自己的session的代码
session = sessionFactory.openSession();
  1. 创建实体类(对应数据库中的一张表),该实体类的属性值,对应表的列属性,并提供getXxx和setXxx方法。这些可自动生成。
public class CnUser
{
  private String uuid;
  private String phone;
  ......省略其它属性
  public String getUuid()
  {
    return this.uuid;
  }
  public void setUuid(String uuid)
  {
    this.uuid = uuid;
  }
  ......省略其它方法
}
  1. 编写映射文件(实体类和关系表的真正映射关系),可自动生成。

  
  

    
    
      
      
      
      
    

    
    
      
      
    

  

  1. 通过Annotation注解的方式,进行映射配置;

三,使用Hibernate操作数据库

操作数据的代码框架结构

//1,获得session实例
Session session = HibernateSessionFactory.getSession();
//2,开启事务
Transaction tx = null;
try
{
  tx = session.beginTransaction();
  //3,通过session操作持久化对象
  session.save(user);
  //4,提交事务
  tx.commit();
}
catch(Exception e)
{
  if(tx != null)
  {
    //4,事务回滚
    tx.rollback();
  }
}
finally
 {
  //5,关闭session
  HibernateSessionFactory.closeSession();
 }
  1. 加载数据(只能根据主键加载)
session.get(CnUser.class,id); //记录不存在,返回null
session.load(CnUser.class,id); //记录必须存在,否则返回异常
  1. 添加数据
   session.save(user); //重复提交会报异常
   session.saveOrUpdate(user); //重复提交,第二次做为更新
  1. 删除数据
session.delete(user); //先通过get或load加载到user,然后删除
  1. 修改数据
session.update(user);//先通过get或load加载到user,然后修改

四,使用hibernate检索数据

  1. 使用HQL(Hibernate Query Language),HQL对应于数据库中的sql查询;

使用HQL进行查询的代码框架

//1,获取session实例
Session session = HibernateSessionFactory.getSession();
//2,声明hql查询语句
String hql = "from CnUser user";
//3,通过session和hql创建sql查询
Query query = session.createQuery(hql);
/*4,对query可以设置查询的限制,包括:
4.1,动态设置条件;
4.2,sql查询的对应查询:分组,排序等;
4.3,聚集函数;
4.4,分页查询;
4.5,连接查询
*/
//5,获取查询结果
List list = query.list();
  1. 使用QBC(Query By Criteria)

因为HQL的虽然比JDBC方式的查询有进步,但是还是需要编写繁琐的HQL语句,Criteria采用面向对象的方式,封装查询条件,使得查询代码编写更加方便;代码结构如下:

//1,获取Session实例;
Session session = HibernateSessionFactory.getSession();

//2,利用Session创建Criteria对象;
Criteria criteria = session.createCriteria(CnUser.class);

/*3,给Criteria对象设置查询条件Critetion接口,实现类包括:
Example,SimpleExpression和Junction,都由Restrictions工具类来创建;*/

//3.1,直接使用Restrictions工具类来设置条件
criteria.add(Restrictions.like("userLevel", "ORD", MatchMode.ANYWHERE));

//3.2,使用Example类的实例来设置条件
//QBE查询
CnUser condition = new CnUser();
condition.setUserLevel("ORD");
condition.setName("liu");
Example example = Example.create(condition);
example.enableLike(MatchMode.ANYWHERE);
example.ignoreCase();
criteria.add(example);

//4,使用Order设置排序方式
criteria.addOrder(Order.desc);

//5,使用Projection进行分组和统计
//分组
ProjectionList  pList = Projections.projectionList();
//分组依据
pList.add(Projections.groupProperty("sex"));
//统计分组数
pList.add(Projections.rowCount());
criteria.setProjection(pList);

你可能感兴趣的:(Hibernate4入门01--基本知识)