HIbernate核心接口有SessionFactory,Session,Transaction来帮助进行持久化操作,其中最核心的为Session,通过Session来进行增删改查的操作。
文章目录
前言
一、Query用法
二、使用步骤
1.在manageUser中扩展一些功能
2.运行
总结
前言
Configuration对象:连数据库相关信息都通过Configuration;Configuration类负责管理Hibernate的配置信息。启动Hibernate、创建SessionFactory对象。
创建SessionFactory对象:它是一个重量级对象,一般情况下,一个项目通常只需要一个SessionFactory(单例模式),使用静态代码块static(在类加载时即可使用,在Session中增删改查)
Session(会话)对象:负责执行被持久化对象的curd操作(增删改查操作),用getCurrentSession方法保证一个线程中仅存一个Session实例。(使用getCurrentSession需在配置文件加入<porperty name = "hibernate.current_session_context_class"> thread </property>)
Transaction(事务):负责事务相关操作,对数据库的操作需提交事务才可以生效。
Query:用于查询对象。在数据库上执行查询并控制查询如何执行。(调用代码:Query query = session.createQuery("from User");)
一、Query用法
继ORM框架入门之如何使用Hibernate实现用户添加的项目,使用单元测试来单独测试一个方法,使用Query用法。
二、使用步骤
1.在manageUser中扩展一些功能
代码如下(示例):
package cn.hrbust.dao;
import java.sql.Date;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.query.Query;
import cn.hrbust.pojo.User;
import junit.framework.TestCase;
public class managerUser extends TestCase {
//查询用户对象
public void testQueryUser() {
SessionFactory sf = null;
Configuration cfg =null;
Session session = null;
Transaction ts = null;
try {
sf = HibernateUtil.getSessionFactory();//sessionFactory单态模式
session = sf.getCurrentSession();//保证每个读写线程有唯一的session实例
ts = session.beginTransaction();
Query query = session.createQuery("from User");
List<User>users = query.list();
//访问结构元素
//方式一
// for(int i = 0 ; i < users.size();i++)
// {
// User u =users.get(i);
// System.out.println(u.getName()+" "+u.getAge());
// }
//方式二(更简便一些)
for(User u : users)
{System.out.println(u.getName()+" "+u.getAge());}
ts.commit();
}catch(HibernateException e) {
e.printStackTrace();
if(ts!=null) {
ts.rollback();
}
}finally {
session.close();
//sf.close();
}
}
public static void main1(String[] args) {
SessionFactory sf = null;
Session session = null;
Transaction ts = null;
User u = new User();
u.setName("李斯");
u.setGender("man");
u.setAge(21);
u.setBirthday(Date.valueOf("2000-6-6"));
try {
sf = HibernateUtil.getSessionFactory();
session = sf.getCurrentSession();
ts = session.beginTransaction();
session.save(u);
ts.commit();
}catch(HibernateException e) {
e.printStackTrace();
if(ts!=null) {
ts.rollback();
}
}finally {
session.close();
//sf.close();
}
}
//保存用户
public void testSaveUser() {
SessionFactory sf = null;
Configuration cfg =null;
Session session = null;
Transaction ts = null;
User u = new User();
u.setName("张三儿");
u.setGender("man");
u.setAge(27);
u.setBirthday(Date.valueOf("2000-6-6"));
try {
sf = HibernateUtil.getSessionFactory();//sessionFactory单态模式
session = sf.getCurrentSession();//保证每个读写线程有唯一的session实例
ts = session.beginTransaction();
session.save(u);
ts.commit();
}catch(HibernateException e) {
e.printStackTrace();
if(ts!=null) {
ts.rollback();
}
}finally {
session.close();
//sf.close();
}
}
public static void main(String[] args) {
SessionFactory sf = null;
Session session = null;
Transaction ts = null;
User u = new User();
u.setName("李斯");
u.setGender("man");
u.setAge(21);
u.setBirthday(Date.valueOf("2000-6-6"));
try {
sf = HibernateUtil.getSessionFactory();
session = sf.getCurrentSession();
ts = session.beginTransaction();
session.save(u);
ts.commit();
}catch(HibernateException e) {
e.printStackTrace();
if(ts!=null) {
ts.rollback();
}
}finally {
session.close();
//sf.close();
}
}
}
注意:Query方法导包不要导错,import org.hibernate.query.Query ; TestCase 要导入junit包,import junit.framework.TestCase
2.运行
使用Junit.test运行,运行成功,则插入用户对象成功。
单独测试Query方法,使用Junit.test运行,即可看见插入的用户对象,是用面向对象的方式获取的。
总结
本篇文章在前言对Hibernate API简介以及Query查询的用法进行了大致的说明。