利用Hibernate3.6.10进行CRUD操作(一)

2014-11-23 23:34:42 · 作者: · 浏览: 3

1.增加一条数据,需要加入事务

package com.itheima.util;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.cfg.Configuration;

//Hibenate工具类

public class HibernateUtil {

private static SessionFactory sessionFactory;

static{

Configuration cfg = new Configuration().configure();

sessionFactory = cfg.buildSessionFactory();

}

public static Session getSession(){

return sessionFactory.openSession();

}

public static void main(String[] args) {

Session s = getSession();

s.close();

}

}

你看这里的增加操作,没写hql语句,是通过对象进行设置值的,这就是hibernate的好处

@Test

publicvoid testaddPerson(){

Personp = new Person();

p.setName("陈星宇1");

p.setBirthday(newDate());

p.setGender("男性");

Sessionsession = HibernateUtil.getSession();

Transactiontx = session.beginTransaction();开启事务

session.save(p);//准备执行sql语句

System.out.println(p.getName());执行到这,控制台会打印insert语句,但是数据库不会有数据

tx.commit();提交事务

session.close();执行到这,数据库中才有数据,刷新数据库可以看到

System.out.println(p);

}

2.按照联合主键查询实体

package com.itheima.domain;

import java.io.Serializable;

//假设:没有重名的学生

public class Student implementsSerializable{

privateString firstName;//Primary key

privateString secondName;//Primary key

privateString gender;

publicString getFirstName() {

returnfirstName;

}

publicvoid setFirstName(String firstName) {

this.firstName= firstName;

}

publicString getSecondName() {

returnsecondName;

}

publicvoid setSecondName(String secondName) {

this.secondName= secondName;

}

publicString getGender() {

returngender;

}

publicvoid setGender(String gender) {

this.gender= gender;

}

}

配置文件student.hbm.xml

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

以下也没有写hql语句,使用get方法进行查询

//按照联合主键查询实体

@Test

publicvoid testQueryStudent(){

文本框: 立即检索或叫立即查询 Sessionsession = HibernateUtil.getSession();

\ //设置联合主键

Students1 = new Student();

s1.setFirstName("zhting");

s1.setSecondName("w");

Students = (Student) session.get(Student.class,s1);//联合主键:使用实体类自身作为条件

System.out.println(s);

session.close();

}

3.Hibernate中持久化对象的三种状态及他们之间的相互转换

\

4.hibernate的缓存

//Session的缓存:一级缓存

public class HibernateDemo3 {

//证明缓存的存在

@Test

public void testaddStudent(){

Session session = HibernateUtil.getSession();

Transaction tx = session.beginTransaction();

Person p1 = (Person) session.get(Person.class, 1);//OID一样

Person p2 = (Person) session.get(Person.class, 1);//OID一样.因为缓存中有该对象,直接取,不会再次去数据库查询

System.out.println(p1==p2);//true

tx.commit();

session.close();

}

//一级缓存的管理

/*

* session.flush():刷新缓存(同步数据库)。缓存中数据还在

* session.clear():清空缓存。

* session.evict():清空指定的实体

*/

@Test

public void testSessionManager1(){

Session session = HibernateUtil.getSession();

Transaction tx = session.beginTransaction();

Person p1 = (Person) session.get(Person.class, 1);//得到持久对象,放入Session的缓存中

System.out.println(p1);

// session.flush();//只是更新数据库.缓存中数据还在

// session.clear();//清空缓存

session.evict(p1);//从缓存中清除指定的实体

Person p2 = (Person) session.get(Person.class, 1);

System.out.println(p2);

tx.commit();

session.close();

}

//快照:

//commit时会刷新

@Test

public void testSessionManager2(){

Session session = HibernateUtil.getSession();

Transaction tx = session.beginTransaction();

Person p1 = (Person) session.get(P