Hibernate入门(一)

来源:互联网 发布:美工素材网站有哪些 编辑:程序博客网 时间:2024/06/08 12:42
package com.hibernate.test;


import java.sql.Date;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import org.junit.Test;
import com.hibernate.entity.Employee;
//二级缓存:先从一级缓存(默认开启)中查找,一级缓存中没有找到,则会从二级缓存(需要手动开启)中查找
public class HibernateTest {


@Test
public void testAddEmployee() {
SessionFactory sessionFactory = null;
Configuration configuration = new Configuration().configure("hibernate.cfg.xml");
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Employee employee=new Employee("Alice","alice@162.com",new Date(new java.util.Date().getTime()));
session.save(employee);
transaction.commit();
sessionFactory.close();
}
@Test
public void testGetEmployee() {
SessionFactory sessionFactory = null;
Configuration configuration = new Configuration().configure("hibernate.cfg.xml");
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Employee employee=(Employee) session.get(Employee.class, 1);
System.out.println(employee);
transaction.commit();
sessionFactory.close();
}
/**
* get与load的区别?
* (1):如果查询不到数据,get会返回为null但不会报错,load会抛出ObjectNotFoundException
* (2):使用get方式去查询数据,会立即发送sql语句,如果使用的是load查询数据,
* 首先会从session缓存/sessionFactory缓存中查找,找不到会返回一个代理类对象
* 如果后面没有使用查询结果,它不会去发送sql语句,如果使用了要查询的结果,才会发送sql语句,成为懒加载(lazy)
*  (3):通过修改配置文件,可以取消懒加载,在.hbm.xml文件class中设置lazy="false"(取消懒加载),会立即发送SQL语句
*  (4):如何选择:如果确定数据库中有这个记录,使用load(update)比较好
*   如果不确定数据库中有这个记录,使用get(insert,delete)比较好
*/
@Test
public void testLoadEmployee() {
SessionFactory sessionFactory = null;
Configuration configuration = new Configuration().configure("hibernate.cfg.xml");
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Employee employee1=(Employee) session.get(Employee.class, 1);
Employee employee2=(Employee) session.load(Employee.class, 1);
System.out.println(employee1==employee2);//true
transaction.commit();
sessionFactory.close();
}
@Test
public void testUpdateEmployee(){
SessionFactory sessionFactory = null;
Configuration configuration = new Configuration().configure("hibernate.cfg.xml");
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Employee employee=new Employee(3,"Lucy","lucy@162.com",new Date(new java.util.Date().getTime()));
session.update(employee);
employee=(Employee) session.get(Employee.class, employee.getId());
System.out.println(employee);
transaction.commit();
sessionFactory.close();
}
@Test
public void testDeleteEmployee(){
SessionFactory sessionFactory = null;
Configuration configuration = new Configuration().configure("hibernate.cfg.xml");
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Employee employee=(Employee) session.get(Employee.class,3);
session.delete(employee);
transaction.commit();
sessionFactory.close();
}
}
原创粉丝点击