1. 什么是 hql
Hibernate Query Language 即 Hibernate 查询语言,面向的是类和属性
下面开始列子
- //1.HQL 检索所有学生集合
- @org.junit.Test
- public void testselectAllDepts(){
- String hql="from Student";
- Query query = session.createQuery(hql);
- List<Student> list = query.list();
- for (Student student:list) {
- System.out.println(student.getStuname());
- }
- }
- //2.获取学生的信息
- @org.junit.Test
- public void testselectSomeRows(){
- String hql="from Student d where d.stuname='呵呵'";
- Query query = session.createQuery(hql);
- List<Student> list = query.list();
- for (Student student:list) {
- System.out.println(student.getStuname());
- }
- }
- //3.获取部分列
- @org.junit.Test
- public void testgetMultiColumns(){
- String hql="select d.stuname from Student d";
- Query query = session.createQuery(hql);
- List<String> list = query.list();
- for (String dept:list) {
- System.out.println(dept);
- }
- }
- //3.获取部分列 多列 List<Objecgt[]>
- @Test public void testgetMultipleColumns() {
- String hql = "select d.stuname,d.sage from Student d";
- Query query = session.createQuery(hql);
- List < Object[] > list = query.list();
- for (Object[] dept: list) {
- for (Object item: dept) {
- System.out.print(item + "===");
- }
- System.out.println();
- }
- }
1. 匿名占位符
from Student where stuname = ?
2. 名称占位符
from Student where s.stuname = :stuname
3. 绑定命名参数与一个对象的属性值
Session session = HibernateUtil.openSession();
NewsDetail news=new NewsDetail();
news.setNtitle("hibernate");
hibernate 工具类
- public class HibernateUtil {
- // 初始化一个ThreadLocal对象
- @SuppressWarnings("rawtypes") private static final ThreadLocal sessionTL = new ThreadLocal();
- private static Configuration configuration;
- private final static SessionFactory sessionFactory;
- static {
- try {
- configuration = new Configuration().configure();
- sessionFactory = configuration.buildSessionFactory();
- } catch(Throwable ex) {
- throw new ExceptionInInitializerError(ex);
- }
- }
- public static Session currentSession() {
- //sessionTL的get()方法根据当前线程返回其对应的线程内部变量,
- Session session = (Session) sessionTL.get();
- // 如果session为null,则打开一个新的session
- if (session == null) {
- //创建一个数据库连接对象session。
- session = sessionFactory.openSession();
- // 保存该数据库连接session到ThreadLocal中。
- sessionTL.set(session);
- }
- //sessionTL中get()可以获取该线程上次获取过的数据库连接对象。
- return session;
- }
- /**
- * 关闭Session
- */
- public static void closeSession() {
- Session session = (Session) sessionTL.get();
- sessionTL.set(null);
- session.close();
- }hql实现动态查询
- 1.检索条件的实体属性
- //job
- private String job;
- //salary
- private Double sal;
- //入职开始时间
- private Date fromDate;
- //入职结束时间
- private Date endDate;
- 2.测试
- @Test
- public void test05() throws ParseException {
- /*准备对象*/
- Electronic ex=new Electronic();
- /*价格小于等于800.0*/
- ex.setPrice(800.0);
- /*准备hql,hql根据条件动态生成*/
- StringBuilder stringBuilder=new StringBuilder("from Electronic e where 1=1 ");
- /*判断价格是否为空*/
- if (ex.getPrice() != null) {
- stringBuilder.append("and e.price<=:price");
- }
- /*3. 依据hql构建query对象*/
- Query query = session.createQuery(stringBuilder.toString());
- /*使用query对象的setProperties()方法为参数赋值,empCondition对象中封装了条件*/
- query.setProperties(ex);
- List < Electronic > list = query.list();
- /*遍历*/
- for (Electronic item: list) {
- System.out.println(item.getEid() + "===" + item.getE_code() + "===" + item.getPrice());
- }
- }
- 分页查询
- uniqueResult()获取唯一对象
- setFirstResult(int firstResult) 设置返回结果从第几条开始 ---- 索引从0开始
- setMaxResults(int maxResults) 设置本次返回结果记录条数
- @Test public void selectPageEc() {
- String hql = "from Electronic";
- Query query = session.createQuery(hql);
- int pageSize = 3;
- int pageIndex = 1;
- query.setFirstResult((pageIndex - 1) * pageSize); //6
- query.setMaxResults(pageSize);
- List < Electronic > list = query.list();
- for (Electronic item: list) {
- System.out.println(item.getE_code());
- }
- }
来源: http://www.bubuko.com/infodetail-2441372.html