hibernate(二)基本操作

一、hibernate CURD基本操作

package com.itheima.test;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;

import com.itheima.domain.Customer;
import com.itheima.utils.HibernateUtil;

/**
 * 
 * 
 * <p>Description: Hibernate的增删改查操作</p>
 */
public class HiberanteCRUDTest {

    /**
     * 测试保存
     */
    @Test
    public void testSave() {
        Customer c = new Customer();
        c.setCustName("hibernate customer");

        //1.定义对象
        Session session = null;
        Transaction tx = null;
        try {
            //获取对象
            session = HibernateUtil.openSession();
            //开启事务
            tx = session.beginTransaction();
            //执行操作
            session.save(c);
            //提交事务
            tx.commit();
        }catch(Exception e) {
            //回滚事务
            tx.rollback();
            e.printStackTrace();
        }finally {
            //释放资源
            session.close();
        }
    }
//  
    /**
     * 根据id查询
     */
    @Test
    public void testFindOne() {
        //1.定义对象
        Session session = null;
        Transaction tx = null;
        try {
            //获取对象
            session = HibernateUtil.openSession();
            //开启事务
            tx = session.beginTransaction();
            //执行操作
            Customer c = session.get(Customer.class, 1L);
            System.out.println(c);
            //提交事务
            tx.commit();
        }catch(Exception e) {
            //回滚事务
            tx.rollback();
            e.printStackTrace();
        }finally {
            //释放资源
            session.close();
        }
    }

//  
//  
//  
//  
//  
    /**
     * 更新
     */
    @Test
    public void testUpdate() {
        //1.定义对象
        Session session = null;
        Transaction tx = null;
        try {
            //获取对象
            session = HibernateUtil.openSession();
            //开启事务
            tx = session.beginTransaction();
            //执行操作
            Customer c = session.get(Customer.class, 97L);
            c.setCustAddress("北京");
            c.setCustPhone("13111111111");
            //执行更新
            session.update(c);
            //提交事务
            tx.commit();
        }catch(Exception e) {
            //回滚事务
            tx.rollback();
            e.printStackTrace();
        }finally {
            //释放资源
            session.close();
        }
    }
//  
//  
    /**
     * 删除
     * 注意:
     *  它和我们之前的删除是有点不一样的,我们之前的删除是传入一个id就能实现删除功能
     *  现在不行了,因为我们操作的思想变了,变成操作实体类相当于操作数据库表。
     */
    @Test
    public void testDelete() {
        Customer c = new Customer();
        c.setCustId(94L);

        //1.定义对象
        Session session = null;
        Transaction tx = null;
        try {
            //获取对象
            session = HibernateUtil.openSession();
            //开启事务
            tx = session.beginTransaction();
            //执行操作
//          Customer c1 = session.get(Customer.class, 97L);
            //执行更新
            session.delete(c);
            //提交事务
            tx.commit();
        }catch(Exception e) {
            //回滚事务
            tx.rollback();
            e.printStackTrace();
        }finally {
            //释放资源
            session.close();
        }
    }
//  
//  
    /**
     * 查询所有
     */
    @Test
    public void testFindAll() {

        //1.定义对象
        Session session = null;
        Transaction tx = null;
        try {
            //获取对象
            session = HibernateUtil.openSession();
            //开启事务
            tx = session.beginTransaction();
            //执行操作
            //创建的是hibernate的查询对象Query
            Query query = session.createQuery("from Customer");//参数写的是HQL。Hibernate query language。它的特点和JPQL是相通的
            //得到结果集
            List list = query.list();
            for(Object obj : list) {
                System.out.println(obj);
            }

            //提交事务
            tx.commit();
        }catch(Exception e) {
            //回滚事务
            tx.rollback();
            e.printStackTrace();
        }finally {
            //释放资源
            session.close();
        }
    }
//  
//  
    /**
     * 查询列表,带条件
     */
    @Test
    public void testFindByCondition() {
        //1.定义对象
        Session session = null;
        Transaction tx = null;
        try {
            //获取对象
            session = HibernateUtil.openSession();
            //开启事务
            tx = session.beginTransaction();
            //执行操作
            //创建的是hibernate的查询对象Query
            //HQL的参数占位符是从0开始的
//          Query query = session.createQuery("from Customer where custLevel = ? and custName like ? ");//参数写的是HQL。Hibernate query language。它的特点和JPQL是相通的
//          //给参数占位符赋值
//          query.setString(0, "23");
//          query.setString(1, "%集%");


            Query query = session.createQuery("from Customer where custLevel = :custLevel and custName like :custName ");//参数写的是HQL。Hibernate query language。它的特点和JPQL是相通的
//          //给参数占位符赋值
            query.setString("custLevel", "23");
            query.setString("custName", "%集%");
            //得到结果集
            List list = query.list();
            for(Object obj : list) {
                System.out.println(obj);
            }

            //提交事务
            tx.commit();
        }catch(Exception e) {
            //回滚事务
            tx.rollback();
            e.printStackTrace();
        }finally {
            //释放资源
            session.close();
        }
    }



}

二、get和load方法的区别:

/**
 * 
 * get和load方法的区别:
 *  他们的作用都是根据id查询一个实体,但是有区别:
 *  区别1:查询的时机不一样。
 *          get方法是:只要一触发方法,马上发起查询。一个是立即加载
 *          load方法是:什么时候使用什么时候发起查询。一个是延迟加载(按需加载)
 * 
 *  区别2:返回的结果不一样
 *          get方法是:返回的是实体类对象
 *          load方法是:返回的是实体类的代理对象
 */
public class HibernateTestFindOne {

    /**
     * 
     */
    @Test
    public void testFindOne1() {
        Session session = HibernateUtil.openSession();
        Transaction tx = session.beginTransaction();
        Customer c = session.get(Customer.class, 1L);
        System.out.println(c);
        tx.commit();
        session.close();
    }

    /**
     * 
     */
    @Test
    public void testFindOne2() {
        Session session = HibernateUtil.openSession();
        Transaction tx = session.beginTransaction();
        Customer c = session.load(Customer.class, 1L);
        System.out.println(c);
        tx.commit();
        session.close();
    }
}

三、Hibernate中使用Connection对象

/**
 * 
 * <p>Description: Hibernate中使用Connection对象</p>
 */
public class HibernateConnectionTest {

    public static void main(String[] args) {
        Session session = HibernateUtil.openSession();
        session.doWork(new Work() {

            @Override
            public void execute(Connection connection) throws SQLException {
                System.out.println(connection.getClass().getName());
            }
        });
    }

}

四、hibernate 和 和 JPA 中的方法对照

    hibernate                    JPA
保存 save(Object entity)                persist(Object entity)

更新操作 update (Object entity)             merge (Object entity)

删除操作 delete (Object entity)             remove (Object entity)

查询一个操作 get (Class clazz,Serializable id)      find(Class clazz,Object id)
       load(Class clazz,Serializable id)     getReerence(Class clazz,Object id)

查询返回唯一结果操作 uniqueResult()         getSingleResult()

查询所有操作Query: 使用 HQL 语句查询 Query:   使用 JPQL 查询

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值