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 |