Hibernate--查询
2017-09-24 本文已影响0人
常威爆打来福
一 Query
1 使用Query对象,不需要写sql语句,但是写hql语句
(1)hql:hibernate query language,hibernate提供查询语句,这个hql语句和普通sql语句很相似
(2)hql和sql语句区别:
- 使用sql语句操作表和字段
- 使用hql操作实体类和属性
2 查询所有hql语句
form 实体类名称
3 Query对象使用
(1)创建Query对象
//1 创建Query对象
Query query= session.createQuery("from entity.User");
(2)调用Query对象里面的方法得到结果
//2 调用query对象里面的方法得到结果
List<User> list = query.list();
for (User user :list){
System.out.println(user);
}
HibernateQuery.java
import Utils.HibernateUtils;
import entity.User;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;
import java.util.List;
public class HibernateQuery {
@Test
public void QueryText(){
Transaction tx =null;
try {
Session session= HibernateUtils.getSessionObject();
tx = session.beginTransaction();
//1 创建Query对象
Query query= session.createQuery("from entity.User");
//2 调用query对象里面的方法得到结果
List<User> list = query.list();
for (User user :list){
System.out.println(user);
}
tx.commit();
}catch (Exception e){
e.printStackTrace();
tx.rollback();
}finally {
}
}
}
结果显示
二 Criteria
1 使用这个对象查询操作,但是使用这个对象时候,不需要写语句,直接调用方法实现
2 实现过程
(1)创建Criteria
//1 创建Criteria
Criteria criteria= session.createCriteria(User.class);
(2)调用对象里面的方法得到结果
//2 调用对象里面的方法得到结果
List<User> list= criteria.list();
for (User user:list){
System.out.println(user);
}
HibernateQuery.java
public void CriteriaText() {
Transaction tx = null;
try {
Session session= HibernateUtils.getSessionObject();
tx= session.beginTransaction();
//1 创建Criteria
Criteria criteria= session.createCriteria(User.class);
//2 调用对象里面的方法得到结果
List<User> list= criteria.list();
for (User user:list){
System.out.println(user);
}
tx.commit();
}catch (Exception e){
e.printStackTrace();
tx.rollback();
}
}
结果显示
三 SQLQuery
1 使用hibernate时候,调用底层sql实现
2 实现过程
(1)创建对象
//1.创建对象
SQLQuery sqlQuery = session.createSQLQuery("SELECT * FROM t_user ");
(2)调用对象的方法得到结果
//2.调用方法得到结果
List<Object[]> list= sqlQuery.list();
for (Object[] objects:list){
System.out.println(Arrays.toString(objects));
}
返回数组
问题:返回的list集合每部分都是数组
解决:让返回list中每部分是对象形式
//设置数据返回到哪个实体类
sqlQuery.addEntity(User.class);
HibernateQuery.java
import Utils.HibernateUtils;
import entity.User;
import org.hibernate.*;
import org.junit.Test;
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.List;
public class HibernateQuery {
@Test
public void QueryText(){
Transaction tx =null;
try {
Session session= HibernateUtils.getSessionObject();
tx = session.beginTransaction();
//1 创建Query对象
Query query= session.createQuery("from entity.User");
//2 调用query对象里面的方法得到结果
List<User> list = query.list();
for (User user :list){
System.out.println(user);
}
tx.commit();
}catch (Exception e){
e.printStackTrace();
tx.rollback();
}
}
@Test
public void CriteriaText() {
Transaction tx = null;
try {
Session session= HibernateUtils.getSessionObject();
tx= session.beginTransaction();
//1 创建Criteria
Criteria criteria= session.createCriteria(User.class);
//2 调用对象里面的方法得到结果
List<User> list= criteria.list();
for (User user:list){
System.out.println(user);
}
tx.commit();
}catch (Exception e){
e.printStackTrace();
tx.rollback();
}
}
@Test
public void SQLQueryText(){
Transaction tx =null;
try {
Session session = HibernateUtils.getSessionObject();
tx = session.beginTransaction();
//1.创建对象
SQLQuery sqlQuery = session.createSQLQuery("SELECT * FROM t_user ");
//返回的list中每部分是对象形式
//设置数据返回到哪个实体类
sqlQuery.addEntity(User.class);
//2.调用方法得到结果
List<User> list= sqlQuery.list();
for (User user:list){
System.out.println(user);
}
/* //2.调用方法得到结果
List<Object[]> list= sqlQuery.list();
for (Object[] objects:list){
System.out.println(Arrays.toString(objects));
}*/
tx.rollback();
}catch (Exception e){
e.printStackTrace();
tx.rollback();
}
}
}
执行结果