hibernate的三种查询方式、原生sql、hql、Criteria(标准查询)
三种查询方式各有特点、个人对三种方式的一个理解
原生sql:需要手动书写sql语句,在sql优化上比其他两种方式要灵活,毕竟自己写sql
hql:hibernate面向对象的一种查询方式,跟数据库中表和字段不直接挂钩,跟实体类和其属性相关,省去了书写sql语句。操作更方便简单
Criteria:该方式个人理解是在hql方式上的进一步包装,将hql中需要手动写的条件查询,进行了进一步封装成各种方法,需要进行条件查询时,可直接调用其相应方法即可、更加方便
package com.dao;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import com.bean.Emplyoee;
public class TestAnnotations {
static SessionFactory sessionFactory;
static {
Configuration configuration = new Configuration();
configuration.configure();
sessionFactory = configuration.buildSessionFactory();
}
public static void main(String[] args) {
TestAnnotations testAnnotations = new TestAnnotations();
/*
* 向表中循环添加数据 :for (int i = 1; i < 19; i++) { Emplyoee work = new
* Emplyoee(); work.setMoney(i * 1000 + i * 100 + i * 10 + i);
* work.setName("张半仙" + i); testAnnotations.add(work); }
*/
/*
* List<Emplyoee> list = testAnnotations.select(); for (Emplyoee e :
* list) { System.out.println(e);
*
* }
*/
// testAnnotations.select(0);
// int update = testAnnotations.update(5, "老子");
// testAnnotations.criteriaSelect();
// testAnnotations.batchAdd();
// testAnnotations.sqlSelect();
testAnnotations.sqlDelete(50);
}
/*
* 批处理添加
*/
public void batchAdd() {
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
try {
for (int i = 0; i < 100; i++) {
Emplyoee e = new Emplyoee();
e.setName("我是" + i + "号");
e.setMoney(i * 10);
session.save(e);
if (i % 30 == 0) {
session.flush();
session.clear();
}
}
transaction.commit();
} catch (Exception e) {
if (transaction != null)
transaction.rollback();
e.printStackTrace();
} finally {
session.close();
}
}
/*
* 第一种查询方式:标准查询
*/
public void criteriaSelect() {
Session openSession = sessionFactory.openSession();
Transaction ts = openSession.beginTransaction();
Criteria criteria = openSession.createCriteria(Emplyoee.class);
// criteria.add(Restrictions.eq("money", 6666));
// criteria.add(Restrictions.gt("money", 6666));
// criteria.add(Restrictions.between("money", 6666, 9999));
Criterion c1 = Restrictions.lt("money", 3333);
Criterion c2 = Restrictions.gt("money", 13333);
// criteria.add(Restrictions.or(c1, c2));
// criteria.setProjection(Projections.rowCount());
criteria.setProjection(Projections.avg("money"));
List list = criteria.list();
System.out.println(list);
}
/*
* 第三种查询方式:原生sql查询
*/
public void sqlSelect() {
Session openSession = sessionFactory.openSession();
Transaction ts = openSession.beginTransaction();
// sql语句
String sql = "select e.id,e.name,e.money from emplyoee e";
SQLQuery sqlQuery = openSession.createSQLQuery(sql);
// 设置对象类型
sqlQuery.addEntity(Emplyoee.class);
List list = sqlQuery.list();
System.out.println(list);
}
/*
* 原生sql删除语句>>delete
*/
public void sqlDelete(int id) {
Session openSession = sessionFactory.openSession();
Transaction ts = openSession.beginTransaction();
// sql语句
try {
String sql = "delete from emplyoee where id>" + id;
SQLQuery sqlQuery = openSession.createSQLQuery(sql);
int update = sqlQuery.executeUpdate();
ts.commit();
System.out.println(update);
} catch (Exception e) {
if (ts != null)
ts.rollback();
e.printStackTrace();
} finally {
openSession.close();
}
}
/*
* 第二种查询方式:hql查询
*/
public int add(Emplyoee work) {
Session openSession = sessionFactory.openSession();
Transaction ts = openSession.beginTransaction();
int result = -2;
try {
result = (int) openSession.save(work);
ts.commit();
} catch (Exception e) {
ts.rollback();
e.printStackTrace();
} finally {
openSession.close();
}
return result;
}
@SuppressWarnings({ "rawtypes", "unchecked" })
public List select() {
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
// Query createQuery = session.createQuery("FROM Emplyoee e where e.id
// =:id");
// createQuery.setParameter("id", id);
Query createQuery = session.createQuery("From Emplyoee e ORDER BY e.money desc");
createQuery.setFirstResult(0);
createQuery.setMaxResults(10);
List list = createQuery.list();
session.close();
return list;
}
/*
* 更新方法
*/
public int update(int id, String name) {
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
int executeUpdate = -1;
try {
/*
* 数据更新操作
*/
String hql = "update Emplyoee e set e.name=:name where e.id=:id";
Query query = session.createQuery(hql);
query.setParameter("name", name);
query.setParameter("id", id);
executeUpdate = query.executeUpdate();
transaction.commit();
} catch (Exception e) {
// TODO: handle exception
transaction.rollback();
e.printStackTrace();
} finally {
session.close();
}
return executeUpdate;
}
/*
* 根据条件查询单条记录
*/
public Object select(int id) {
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
String hql = "select sum(e.money) from Emplyoee e group by e.name";
// String hql = "FROM Emplyoee e where e.id=:id";
// Query k = createQuery.setParameter("id", id);
Query createQuery = session.createQuery(hql);
List list = createQuery.list();
session.close();
System.out.println(list);
return list.get(0);
}
}