一、主键查询的两种方法:
User u=(User)session.get(User.class,1);
User u=(User)session.load(User.class,1);支持懒加载
源码如下所示:
package com.bie.test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;
import com.bie.po.User;
public class SelectTest {
//全局静态session工厂
private static SessionFactory sf;
static{
//1:创建sesson工厂
sf=new Configuration().configure().buildSessionFactory();
}
@Test
public void select(){
User user=new User();
//2:根据session工厂创建session
Session session=sf.openSession();
//3:开启事务
Transaction tx=session.beginTransaction();
//4:主键查询,执行查询操作,方法一:get方法,方法2:load方法
//User u=(User)session.get(User.class, 1);
User u=(User)session.load(User.class, 1);
//主键查询测试结果
System.out.println(u);
//5:提交事务
tx.commit();
//6:关闭事务和session
session.close();
sf.close();
}
}
二、HQL查询,特别注意的是查询语句必须是实体类的方法名,不能是表名称,必须和sql语句查询区别:
1.sql查询是表以及字段,不区分大小写,也叫做结构化的查询语句;
2.HQL查询是Hibernate提供的面向对象的查询语句,查询的是对象以及对象的属性,区分大小写的。
源码如下所示:
package com.bie.test;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;
import com.bie.po.User;
public class SelectTest2 {
//全局静态session工厂
private static SessionFactory sf;
static{
//1:创建sesson工厂
sf=new Configuration().configure().buildSessionFactory();
}
@Test
public void select(){
User user=new User();
//2:根据session工厂创建session
Session session=sf.openSession();
//3:开启事务
Transaction tx=session.beginTransaction();
//HRL查询,查询全部信息,注意HRL查询的是实体类的名称,不是数据表的名称,特别注意这一点
//Query q=session.createQuery("from User");
Query q=session.createQuery("from User user where user.id=1 or user.id=2 ");
List<User> list=q.list();
System.out.println(list);
//5:提交事务
tx.commit();
//6:关闭事务和session
session.close();
sf.close();
}
}
三、完全面向对象的查询,Criteria查询也叫做QBC查询,query by criteria,核心代码:
Criteria criteria = session.createCriteria(User.class);
criteria.add(Restrictions.eq(“id”,1));
List<User>list = criteria.list();
System.out.println(list);
源码如下所示:
package com.bie.test;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.criterion.Restrictions;
import org.junit.Test;
import com.bie.po.User;
public class SelectTest3 {
//全局静态session工厂
private static SessionFactory sf;
static{
//1:创建sesson工厂
sf=new Configuration().configure().buildSessionFactory();
}
@Test
public void select(){
User user=new User();
//2:根据session工厂创建session
Session session=sf.openSession();
//3:开启事务
Transaction tx=session.beginTransaction();
//Criteria查询也叫做 QBC查询 query by criteria
//完全的面向对象的查询
Criteria criteria = session.createCriteria(User.class);
//添加条件
criteria.add(Restrictions.eq("id", 1));
//查询全部,没有sql语句
List<User> list = criteria.list();
System.out.println(list);
//5:提交事务
tx.commit();
//6:关闭事务和session
session.close();
sf.close();
}
}
四、本地查询sql语句,适合使用复杂的查询,或者不想使用HQL或者criteria查询,可以使用本地sql查询,缺点,不能跨越数据库,一般不适用,除非遇到复杂的sql语句才使用:
核心代码:
//sql语句
//SQLQuery sql = session.createSQLQuery(“select*from user”);
SQLQuery sql = session.createSQLQuery(“select*from user where id = 1”);
sql.addEntity(User.class);
List<User>list = sql.list();
System.out.println(list);源码如下所示:
package com.bie.test;
import java.util.List;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;
import com.bie.po.User;
public class SelectTest4 {
//全局静态session工厂
private static SessionFactory sf;
static{
//1:创建sesson工厂
sf=new Configuration().configure().buildSessionFactory();
}
@Test
public void select(){
User user=new User();
//2:根据session工厂创建session
Session session=sf.openSession();
//3:开启事务
Transaction tx=session.beginTransaction();
//sql语句
//把每一行记录封装为对象数组,再添加到list集合中
//SQLQuery sql= session.createSQLQuery("select * from user ");
//把每一行记录封装为指定的对象类型
SQLQuery sql=session.createSQLQuery("select * from user where id=1 ").addEntity(User.class);
List<User> list=sql.list();
System.out.println(list);
//5:提交事务
tx.commit();
//6:关闭事务和session
session.close();
sf.close();
}
}