Hibernate框架的增删改查

 

Hibernate框架的增删改查

一  思路分析

    在Hibernate框架的开发中,session对象是最核心的技术,增、删、该都需要用到,在通过id查询的时候用到的也是session对象,但是当有复杂查询的时候用到的是Query或Criteria类,这三个类都是在同一个包写的,在hibernate包下

二  Query类和Cirteria类的介绍

1.HQL(hibernate Query Language)面向对象的查询语言,与sql不同,HQL中的对象名师区分大小写的, HQL中查的是对象而不是和表,并且支持多态;HQL主要通过Query来操作,Query的创建方式:

    Query q = session.createQuery(hql);

l       from Person

l       from User user where user.name=:name

l       from User user where user.name=:name and user.birthday < :birthday

2.Criteria

    Criteria是一种比HQL更面向对象的查询方式;Criteria的创建方式:

    Criteria crit = session.createCriteria(DomainClass.class);

    简单属性条件如:criteria.add(Restrictions.eq(propertyName, value)),

    criteria.add(Restrictions.eqProperty(propertyName,otherPropertyName))

三  代码分析

1.添加任何一个对象

    public static void add(Object obj) {

       Session session = null;

       Transaction tx = null;

       try {

           session = HibernateUtil.getSession();

           tx = session.beginTransaction();// 开启事务

           session.save(obj);// 没有更新数据库

           tx.commit();// 执行提交事务的时候更新数据库

       } finally {

           // 使资源得到释放

           if (session != null) {

              session.close();

           }

       }

    }

    2.删除任何一个类中的文件

    public static void delete(Object obj) {

       Session session = null;

       Transaction tx = null;

       try {

           session = HibernateUtil.getSession();

           tx = session.beginTransaction();// 开启事务

           session.delete(obj);

           // 删除之后为瞬时状态

           tx.commit();

       } finally {

           // 使资源得到释放

           if (session != null) {

              session.close();

           }

       }

    }

 

   

    3.更新任何一个类中的对象

    public static void update(Object obj) {

       Session session = null;

       Transaction tx = null;

       try {

           session = HibernateUtil.getSession();

           tx = session.beginTransaction();// 开启事务

           session.update(obj);

           tx.commit();

       } finally {

           // 使资源得到释放

           if (session != null) {

              session.close();

           }

       }

    }

   

4  查找

(1)用session对象根据id查找

    public static Object get(Class clazz,int id) {

        Session session = null;

       try {

           session = HibernateUtil.getSession();

           // 通过映射文件查找class对象,查的是哪张表,查找表中的id,在面向对象的角度上,用的

            Object obj =session.get(clazz, id);

           // 持久状态

           return obj;

       } finally {

           // 使资源得到释放

           if (session != null) {

              session.close();

           }

       }

    }

(2)通过name查找,用Query

    public static void query(String name) {

       Session session = null;

       try {

           session = HibernateUtil.getSession();

// 查询字符串Hibernate的查询语

           String queryString = "from User as user where user.name=:n";

           Query query = session.createQuery(queryString);

           query.setString("n", name);

           //查询出所有的name相同的

           List<User> list = query.list();// 得到所有的结果集

           for (User u : list) {

              System.out.println(u.toString());

           }

       } finally {

           if (session != null) {

              session.close();

           }

       }

    }

    注:

    // 查询的是所有的User所对应 的记录  

user别名   

 name是类中的属性名   

name=:n是给?起的名字,为了在赋值的时候乱

(3)查找所有  用Criteria

    public static void criteria(String name) {

       Session session = null;

       try {

           session = HibernateUtil.getSession();

           // 查询的是User类对象的二维表 采用链的形式

           Criteria criteria = session.createCriteria(User.class);

    // 查询条件是用对象去查询约束条件 add(约束条件) 设置的是属性名为name的,传过来的name的条件

           criteria.add(Restrictions.eq("name", name));

                  List<User> list = criteria.list();

           for(User user:list){

              System.out.println(user.toString());

           }

       } finally {

           if (session != null) {

              session.close();

           }

       }

    }  

注:

(1)session.save(user);和session.persist(user);两者不同:当开启事务的时候过程是一样的,如果没有开启事务,save执行的插入的操作,但是确回滚了,而persist就没有执行

(2)瞬时状态和托管状态都不被session管理

瞬时状态不被session管理在,在数据库中也没有记录

(3)如果在持久状态时改变了数据库,会自动增加一条update语句

如果程序比较复杂,调用saveOrUpdate方法让Hibernate去判断

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值