Hibernate主键增长策略
- native(自增长)
- uuid(使用长度为16位uuid作为主键值)
1)映射文件的配置
<id name="uid" column="uid">
<generator class="native"></generator>
</id>
实体类的操作
- 实体类对象的状态
1)瞬时态:与session没关系且id没有值
2)持久态:与session有关系且id有值
3)托管态:与session没关系且id有值
- 通过实体类的增删改查操作
1)save():保存,参数为实体类对象
2)delete():删除,参数为实体类对象
3)update():更新,参数为实体类对象
4)get(Class clazz, serializable arg ):查询,根据id查询,参数为删除对象对应的实体类,以及主键值
查询
package tqb.test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.junit.Test;
import tqb.entity.User;
import utils.HibernateUtils;
public class Demo2 {
@Test
public void testGet(){
SessionFactory sessionFactory = HibernateUtils.getSessionFactory();
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
User user = session.get(User.class, 1);
System.out.println(user);
transaction.commit();
session.close();
sessionFactory.close();
}
}
更新
package tqb.test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.junit.Test;
import tqb.entity.User;
import utils.HibernateUtils;
public class Demo3 {
@Test
public void testUpdate(){
SessionFactory sessionFactory = HibernateUtils.getSessionFactory();
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
User user = session.get(User.class, 1);
user.setUsername("lisi");
user.setPwd("654321");
session.update(user);
transaction.commit();
session.close();
sessionFactory.close();
}
}
删除
package tqb.test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.junit.Test;
import tqb.entity.User;
import utils.HibernateUtils;
public class Demo4 {
@Test
public void testDelete(){
SessionFactory sessionFactory = HibernateUtils.getSessionFactory();
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
User user = session.get(User.class, 1);
session.delete(user);
transaction.commit();
session.close();
sessionFactory.close();
}
}
SaveOrUpdate方法的使用
package tqb.test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.junit.Test;
import tqb.entity.User;
import utils.HibernateUtils;
public class Demo5 {
@Test
public void testSaveOrUpdate(){
SessionFactory sessionFactory = HibernateUtils.getSessionFactory();
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
User user = new User();
user.setUsername("wangmazi");
user.setPwd("123");
session.saveOrUpdate(user);
transaction.commit();
session.close();
sessionFactory.close();
}
}
代码的规范化书写
package tqb.test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.junit.Test;
import tqb.entity.User;
import utils.HibernateUtils;
public class Demo8 {
@Test
public void fun() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction transaction = null;
try {
sessionFactory = HibernateUtils.getSessionFactory();
session = sessionFactory.openSession();
transaction = session.beginTransaction();
User user = session.get(User.class, 1);
System.out.println(user);
} catch (Exception e) {
e.printStackTrace();
transaction.rollback();
} finally {
if (sessionFactory != null)
sessionFactory.close();
}
}
}
Hibernate的缓存机制
- Hibernate的缓存机制拥有一级缓存机制和二级缓存机制
- 一级缓存机制(默认开启)
1)使用范围:session开启到session关闭
2)在第一次查询时将user持久态对象保存到一级缓存区
3)在第二次查询时在缓存区判断是否存在,存在的话直接拿来使用,不在的话执行第二步
- 二级缓存机制(默认关闭,很少使用,或者不使用)
- 一级缓存机制的特性
1)更新数据时,若更新的数据与原先查询出来保存在副本的数据不同时,不用写更新语句即可更新
验证代码
package tqb.test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.junit.Test;
import tqb.entity.User;
import utils.HibernateUtils;
public class Demo6 {
@Test
public void fun(){
SessionFactory sessionFactory = HibernateUtils.getSessionFactory();
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
User user = session.get(User.class, 1);
System.out.println(user);
User user1 = session.get(User.class, 1);
System.out.println(user1);
transaction.commit();
session.close();
sessionFactory.close();
}
}
验证结果

一级缓存机制的特性
package tqb.test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.junit.Test;
import tqb.entity.User;
import utils.HibernateUtils;
public class Demo7 {
@Test
public void fun(){
SessionFactory sessionFactory = HibernateUtils.getSessionFactory();
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
User user = session.get(User.class, 1);
user.setUsername("wangwu");
transaction.commit();
session.close();
sessionFactory.close();
}
}
session与Hibernate的绑定
- 在核心配置文件中添加如下内容
- session不用关闭,每次使用完成后自动关闭,sessionFactory不用关闭,实际项目中是一直开启的
<property name="hibernate.current_session_context_class">thread</property>
package tqb.test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.junit.Test;
import tqb.entity.User;
import utils.HibernateUtils;
public class Demo9 {
@Test
public void fun(){
Session session = null;
Transaction transaction = null;
try {
session = HibernateUtils.getSessionObject();
transaction = session.beginTransaction();
User user = session.get(User.class, 1);
System.out.println(user);
} catch (Exception e) {
e.printStackTrace();
transaction.rollback();
}
}
}
Hibernate其它API的使用
- Query:使用hql(hibernate query language)进行查询,结果为实体类对象的所有集合
- Criteria:结果为实体类对象的所有集合
- SQLQuery:使用正常的sql查询语句进行查询,结果为数组形式的所有集合
Query
package tqb.test;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;
import tqb.entity.User;
import utils.HibernateUtils;
public class Demo10 {
@Test
public void fun(){
Session session = null;
Transaction transaction = null;
try {
session = HibernateUtils.getSessionObject();
transaction = session.beginTransaction();
Query query = session.createQuery("from User");
List<User> list = query.list();
for (User user : list) {
System.out.println(user);
}
} catch (Exception e) {
e.printStackTrace();
transaction.rollback();
}
}
}
Criteria
package tqb.test;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;
import tqb.entity.User;
import utils.HibernateUtils;
public class Demo11 {
@Test
public void fun(){
Session session = null;
Transaction transaction = null;
try {
session = HibernateUtils.getSessionObject();
transaction = session.beginTransaction();
Criteria criteria = session.createCriteria(User.class);
List<User> list = criteria.list();
for (User user : list) {
System.out.println(user);
}
} catch (Exception e) {
e.printStackTrace();
transaction.rollback();
}
}
}
SQLQuery
package tqb.test;
import java.util.List;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;
import tqb.entity.User;
import utils.HibernateUtils;
public class Demo12 {
@Test
public void fun(){
Session session = null;
Transaction transaction = null;
try {
session = HibernateUtils.getSessionObject();
transaction = session.beginTransaction();
SQLQuery sqlQuery = session.createSQLQuery("select * from t_user");
sqlQuery.addEntity(User.class);
List<User> list = sqlQuery.list();
for (User user : list) {
System.out.println(user);
}
} catch (Exception e) {
e.printStackTrace();
transaction.rollback();
}
}
}