博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
4、Hibenrate中HQL的10中查询方式
阅读量:4635 次
发布时间:2019-06-09

本文共 11624 字,大约阅读时间需要 38 分钟。

二、具体事例如下:

2.0 编写如下sql语句

1 create table teacher(tid number not null primary key,tname varchar2(20));2 create sequence seq_teacher;3 insert into teacher values(seq_teacher.nextval,'holly');4 insert into teacher values(seq_teacher.nextval,'石头');5 commit;6 insert into teacher values(seq_teacher.nextval,'holly1');7 insert into teacher values(seq_teacher.nextval,'holly2');8 commit;

2.1 创建如下的javaweb项目并添加jar文件

 

2.2 在项目的src下创建hibernate.cfg.xml主配置文件

1 
2 3
4
5
oracle.jdbc.driver.OracleDriver
6
jdbc:oracle:thin:@127.0.0.1:1521:orcl
7
scott
8
tiger
9
org.hibernate.dialect.Oracle10gDialect
10
true
11
true
12
13
14

2.3 在项目的com.entity包下创建Teacher.java类

1 package com.entity; 2  3  4 public class Teacher { 5     private int tid; 6     private String tname; 7      8     public Teacher() { 9     }10 11     public Teacher(String tname) {12         this.tname = tname;13     }14 15     public Teacher(int tid, String tname) {16         this.tid = tid;17         this.tname = tname;18     }19 20     public int getTid() {21         return tid;22     }23 24     public void setTid(int tid) {25         this.tid = tid;26     }27 28     public String getTname() {29         return tname;30     }31 32     public void setTname(String tname) {33         this.tname = tname;34     }35 36     @Override37     public String toString() {38         return "Teacher [tid=" + tid + ", tname=" + tname + "]";39     }40     41     42 43 }

 

2.4 在项目的com.entity包下创建Teacher.hbm.xm文件

1 
2 3
4
5
6
7
seq_teacher 8
9
10
11
12

 

2.5 在项目的com.util包下创建HibernateUtil.java类

1 package com.util; 2  3 import org.hibernate.HibernateException; 4 import org.hibernate.Session; 5 import org.hibernate.SessionFactory; 6 import org.hibernate.cfg.Configuration; 7  8 public class HibernateUtil { 9     private static ThreadLocal
thread=new ThreadLocal
();10 private static Configuration config=null;11 private static SessionFactory factory=null;12 13 static{14 try {15 config=new Configuration().configure("/hibernate.cfg.xml");16 factory=config.buildSessionFactory();17 } catch (HibernateException e) {18 System.out.println("读取配置文件或创建工厂失败");19 e.printStackTrace();20 }21 }22 23 public static Session getSession(){24 Session session =thread.get();25 if(session==null){26 session =factory.openSession();27 thread.set(session);28 }29 return session;30 }31 public static void closeSession(){32 Session session =thread.get();33 thread.set(null);34 session.close();35 36 }37 38 }

 

2.6 在项目的com.dao包下创建TeacherDao.java类

1 package com.dao;  2   3 import java.util.Iterator;  4 import java.util.List;  5   6 import org.hibernate.Query;  7 import org.hibernate.Session;  8   9 import com.entity.Teacher; 10 import com.util.HibernateUtil; 11  12 public class TeacherDao { 13     /** 14      * 1.iterate() 延时加载查询一堆 15      * 得到1+N条sql 16      * 1是查询所有的sql 17      * n根据id查询的n条sql 18      * 延迟加载(用时在查询),关闭session的时机是读取完数据之后再关闭 19      */ 20     public static Iterator
hqlItertor() { 21 Session session=HibernateUtil.getSession(); 22 //定义hql语句 23 String hql="from Teacher"; 24 25 //创建Query查询接口对象 26 Query query=session.createQuery(hql); 27 28 //使用list方法查询所有返回list集合 29 Iterator
it=query.iterate(); 30 31 32 return it; 33 } 34 /** 35 * 2. list()立即加载 36 * 一条sql 37 * 立即加载(一次性查询出所有内容(关联)放入内存) 38 * 39 */ 40 public static List
hqlList() { 41 Session session=HibernateUtil.getSession(); 42 //定义hql语句 43 String hql="from Teacher"; 44 45 //创建Query查询接口对象 46 Query query=session.createQuery(hql); 47 48 //使用list方法查询所有返回list集合 49 List
list=query.list(); 50 51 52 HibernateUtil.closeSession(); 53 return list; 54 55 } 56 /** 57 * 3.根据条件查询返回集合 58 * @param tname 59 * @return 60 */ 61 public static List
hqlIf(String tname) { 62 Session session=HibernateUtil.getSession(); 63 //定义hql语句 64 String hql="from Teacher where tname='"+tname+"'"; 65 66 //创建Query查询接口对象 67 Query query=session.createQuery(hql); 68 69 //使用list方法查询所有返回list集合 70 List
list=query.list(); 71 72 73 HibernateUtil.closeSession(); 74 return list; 75 } 76 /** 77 * 4. 占位符的使用(模糊查询) 78 * @param string 79 * @return 80 */ 81 public static List
hqlLike(String name) { 82 Session session=HibernateUtil.getSession(); 83 //定义hql语句 84 String hql="from Teacher where tname like ?"; 85 86 //创建Query查询接口对象 87 Query query=session.createQuery(hql); 88 String str="%"+name+"%"; 89 query.setString(0, str); 90 91 //使用list方法查询所有返回list集合 92 List
list=query.list(); 93 94 95 HibernateUtil.closeSession(); 96 return list; 97 } 98 /** 99 * 5. 按照参数名称使用(模糊查询)100 * @param string101 * @return102 */103 public static List
hqlLikeName(String name) {104 Session session=HibernateUtil.getSession();105 //定义hql语句106 String hql="from Teacher where tname like :pname";107 108 //创建Query查询接口对象109 Query query=session.createQuery(hql);110 String str="%"+name+"%";111 query.setString("pname", str);112 113 //使用list方法查询所有返回list集合114 List
list=query.list();115 116 117 HibernateUtil.closeSession();118 return list;119 }120 /**121 * 6. 条件查询绑定任意类型的参数:命名参数122 * @param string123 * @return124 */125 public static List
hqlSetParam(String name) {126 Session session=HibernateUtil.getSession();127 //定义hql语句128 String hql="from Teacher where tname like :pname";129 130 //创建Query查询接口对象131 Query query=session.createQuery(hql);132 String str="%"+name+"%";133 134 query.setParameter("pname", str);135 136 //使用list方法查询所有返回list集合137 List
list=query.list();138 139 140 HibernateUtil.closeSession();141 return list;142 }143 /**144 * 7. 条件查询绑定任意类型的参数:占位符145 * @param string146 * @return147 */148 public static List
hqlSetParamXx(String name) {149 Session session=HibernateUtil.getSession();150 //定义hql语句151 String hql="from Teacher where tname like ?";152 153 //创建Query查询接口对象154 Query query=session.createQuery(hql);155 String str="%"+name+"%";156 157 query.setParameter(0, str);158 159 //使用list方法查询所有返回list集合160 List
list=query.list();161 162 163 HibernateUtil.closeSession();164 return list;165 }166 167 168 /**169 * 8.条件动态:通过对象属性去给命名参数赋值170 * @param name171 * @return172 */173 public static List
hqlSetProte(Teacher teacher) {174 175 Session session=HibernateUtil.getSession();176 //定义hql语句177 StringBuilder hql=new StringBuilder("from Teacher as t where 1=1");178 179 if(teacher.getTname()!=null){180 hql.append(" and t.tname=:tname");181 }182 183 //创建Query查询接口对象184 Query query=session.createQuery(hql.toString());185 query.setProperties(teacher);186 187 //使用list方法查询所有返回list集合188 List
list=query.list();189 190 HibernateUtil.closeSession();191 return list;192 }193 /**194 * 9.查询单条数据195 * @return196 */197 public static Teacher hhqlGetTeacher(String name) {198 Session session=HibernateUtil.getSession();199 //定义hql语句200 String hql="from Teacher where tname=:pname";201 202 203 //创建Query查询接口对象204 Query query=session.createQuery(hql.toString());205 query.setParameter("pname", name);206 207 //使用208 Teacher teacher=(Teacher) query.uniqueResult();209 210 HibernateUtil.closeSession();211 return teacher;212 }213 /**214 * 10. 分页查询215 * @param i216 * @param j217 * @return218 */219 public static List
hqlPage(int pageSize, int pageNo) {220 Session session=HibernateUtil.getSession();221 222 //1.获取中条数223 //定义中条数的hql语句224 String hqlcount="select count(*) from Teacher";225 Query countQuery=session.createQuery(hqlcount);226 227 //uniqueResult()得到总条数228 Integer totalCount=Integer.parseInt(countQuery.uniqueResult().toString());229 System.out.println("总条数:"+totalCount);230 231 //2.计算总页数232 int totalPage=totalCount%pageSize==0?totalCount/pageSize:totalCount/pageSize+1;233 System.out.println("总页数:"+totalPage);234 235 //3.查询的最大记录数(每页查询几条)236 String hql="from Teacher";237 Query query=session.createQuery(hql);238 239 query.setMaxResults(pageSize);240 241 //4.确定查询查询的起点242 query.setFirstResult((pageNo-1)*pageSize);243 244 //5.查询分页数据245 List
list=query.list();246 HibernateUtil.closeSession();247 return list;248 }249 }

 

2.7 在项目的com.test包下创建Test.java类

1 package com.test; 2  3 import java.util.Iterator; 4 import java.util.List; 5  6 import com.dao.TeacherDao; 7 import com.entity.Teacher; 8 import com.util.HibernateUtil; 9 10 public class Test {11 12     public static void main(String[] args) {13 //        System.out.println("--------------1.使用list查询所有-----------");14 //        List
list=TeacherDao.hqlList();15 // for (Teacher teacher : list) {16 // System.out.println(teacher);17 // }18 // System.out.println("--------------2.使用Itertor查询所有-----------");19 // Iterator
it=TeacherDao.hqlItertor();20 // Teacher te=null;21 // while (it.hasNext()) {22 // te=it.next();23 // System.out.println(te);24 // }25 // HibernateUtil.closeSession();26 // 27 // System.out.println("----------3.条件拼接查询-----------");28 // List
iflist=TeacherDao.hqlIf("holly");29 // for (Teacher teacher : iflist) {30 // System.out.println(teacher);31 // }32 // 33 // System.out.println("----------4.条件查询模糊查询:按照参数位置-----------");34 // List
likelist=TeacherDao.hqlLike("holly");35 // for (Teacher teacher : likelist) {36 // System.out.println(teacher);37 // }38 // System.out.println("----------5.条件查询模糊查询:按照名称-----------");39 // List
likeNamelist=TeacherDao.hqlLikeName("holly");40 // for (Teacher teacher : likeNamelist) {41 // System.out.println(teacher);42 // }43 44 // System.out.println("----------6.条件查询绑定任意类型的参数-----------");45 // List
SetParamlist=TeacherDao.hqlSetParam("holly");46 // for (Teacher teacher : SetParamlist) {47 // System.out.println(teacher);48 // }49 // System.out.println("----------7.条件查询绑定任意类型的参数:占位符-----------");50 // List
SetParamXx=TeacherDao.hqlSetParamXx("holly");51 // for (Teacher teacher : SetParamXx) {52 // System.out.println(teacher);53 // }54 System.out.println("----------8.条件动态:命名参数-----------");55 // Teacher te=new Teacher("holly");56 // List
SetProte=TeacherDao.hqlSetProte(te);57 // for (Teacher teacher : SetProte) {58 // System.out.println(teacher);59 // }60 61 System.out.println("------------9.查询单条数据-----------");62 // Teacher teacher=TeacherDao.hhqlGetTeacher("holly");63 // System.out.println(teacher);64 65 System.out.println("---------10.分页查询------------");66 List
list=TeacherDao.hqlPage(2,2);67 System.out.println("页面大小:"+2+",当前页:"+2);68 for (Teacher teacher : list) {69 System.out.println(teacher);70 }71 72 73 74 }75 76 }

2.8  效果自己试试就知道

 

转载于:https://www.cnblogs.com/holly8/p/5745078.html

你可能感兴趣的文章
Codeforces Round #228 (Div. 1)B
查看>>
poj2420A Star not a Tree?(模拟退火)
查看>>
switch case
查看>>
crash
查看>>
ASP.NET MVC 4 (十三) 基于表单的身份验证
查看>>
Charles抓取https请求
查看>>
LAMP环境搭建
查看>>
C语言的变量的内存分配
查看>>
clientcontainerThrift Types
查看>>
链接全局变量再说BSS段的清理
查看>>
hdu 1728 逃离迷宫
查看>>
HTML5与CSS3权威指南之CSS3学习记录
查看>>
docker安装部署
查看>>
AVL树、splay树(伸展树)和红黑树比较
查看>>
多媒体音量条显示异常跳动
查看>>
运算符及题目(2017.1.8)
查看>>
React接入Sentry.js
查看>>
ssh自动分发密匙脚本样板
查看>>
转 小辉_Ray CORS(跨域资源共享)
查看>>
Linux安装postgresql
查看>>