Hibernate入门(6):CRUD 增删改查

来源:互联网 发布:access数据库设计视图 编辑:程序博客网 时间:2024/06/06 20:45

Hibernate CRUD 增删改查

 
Hibernate 是一种 ORM 架构,对于数据库进行的 CRUD 操作都是建立在实体对象上的,这个区别于面向数据表关系的 JDBC ;

以下示例中使用的 HibernateUtil 类是一个封装的 Session 管理类,详见:HibernateUtil



查询操作 Retrieve

Hibernate 支持查询的方式主要有3种:
  • HQL 查询:详见 http://blog.csdn.net/al_assad/article/details/77900663
  • Criteria 条件查询
  • 原生 SQL 查询:详见http://blog.csdn.net/al_assad/article/details/77900678

HQL 是 Hibernate 的一种面向持久化实体的查询语言,区别于 SQL ;
Criteria 条件查询是一种完全面向对象的查询结构,使用类和方法的组织形式来取代 SQL 语言的组织形式,但是在 Hibernate5.x 版本中已经废弃了该种查询方式,仅保留作为向后兼容;
Hibernate 也支持原生的SQL查询,但是实际使用时,主要是用在项目的向后兼容,或者HQL无法解决过于复杂的关联查询的情况下,Hibernate官方是推荐使用 HQL 的方式进行查询;

一个简单的示例如下,详细内容参见以上的链接:



增加 Create

Hibernate 的数据插入直接通过将数据映射为实体实例进行的,如下示例:
1
public class Test {
2
    
3
    public static void main (String[] args) throws Exception{
4
        Session session = HibernateUitl.currentSession();
5
        Transaction tran = session.beginTransaction();
6
        
7
        //向user表增加一条记录,user表已经映射为User实体
8
        User user = new User()  //创建User实体并填充属性
9
        user.setName("assad")
10
        user.setAge(20);
11
        user.setDate(new Date());
12
  
13
        session.save(user);  //将User实体实例保存在Session
14
        
15
        tran.commit();     //提交事务
16
        HibernateUtil.closeSession();  //关闭Session
17
    }
18
}



更新 Update


类似于增加操作,hibernate的数据更新操作也是基于实体对象的,对获取到的实体对象的操作,会同步映射到数据中,这其中涉及到一些 hibernate 的缓存,可以参见 http://blog.csdn.net/al_assad/article/details/77900705
以下是一个简单的示例:

对于批量更新,除了直接面这映射的实体类进行操作外,hibernate还支持基于 HQL 的 DML风格的批量修改:
1
 public static void main(String[] args){
2
        Session session = HibernateUtil.currentSession();
3
        Transaction tran = session.beginTransaction();
4
        
5
     //更新数据
6
        String hqlUpdate = "update User u set u.point = u.point + :increasePoint where u.age > :limit";    
7
        int updateCount = session.createQuery( hqlUpdate)
8
                .setParameter("increasePoint",10)
9
                .setParameter("limit",18)
10
                .executeUpdate();
11
12
        tran.commit();
13
        HibernateUtil.closeSession();
14
 }



删除 Delete

hibernate 的数据删除操作也是基于实体对象的,但完成数据库到实体的映射之后,如果在Session删除该实体,那么数据表中相应的记录也会被删除;
以下是一个简单的示例:

对于批量删除,除了直接面对映射的实体类进行操作外,hibernate还支持基于 HQL 的 DML风格的批量删除:
1
 public static void main(String[] args){
2
        Session session = HibernateUtil.currentSession();
3
        Transaction tran = session.beginTransaction();
4
5
     //删除数据
6
        String hqlDelete = "delete from User u where u.age < :limitAge";
7
        int deletedCount = session.createQuery(hqlDelete)
8
                .setParameter("limitAge",18)
9
                .executeUpdate();
10
11
        tran.commit();
12
        HibernateUtil.closeSession();
13
 }


※ 对于大数据量的 批量操作(批量更新,批量插入)可能遇到内存溢出的情况,这一部分的详细情况和解决方式参见 :http://blog.csdn.net/al_assad/article/details/77900705






原创粉丝点击