1.Query:他是一种比较面向对象的查询方式,query查询也叫做hql查询(hibernate query language),使用query查询,需要接受一个
hql语句进行查询
查询全部,分页查询,统计查询,条件查询,排序查询,投影查询
sql:查询的是数据表和表中的字段
hql:查询的是实体类和类中的属性
* sql 和 hql 的语法极其类似
代码演示:
1.建库;
2.导入jar包(required/log4j/mysqlconnector)
2.建实体类(注意持久化类的编写规则);
3.编制映射关系文件(Linkman.hbm.xml);
4.编制核心配置文件(hibernate.cfg.xml);
5.编写工具类(HibernateUtils.java),增加getCurrentSession方法;
6.编写测试代码;
----------------------------------------------
5.编写工具类(HibernateUtils.java),增加getCurrentSession方法;
1 package utils; 2 3 import org.hibernate.Session; 4 import org.hibernate.SessionFactory; 5 import org.hibernate.cfg.Configuration; 6 7 public class HibernateUtils { 8 private static SessionFactory factory; 9 10 static { 11 // 加载配置文件 12 Configuration cfg = new Configuration(); 13 cfg.configure(); 14 // 构建sessionFactory 15 factory = cfg.buildSessionFactory(); 16 } 17 18 public static Session getSession() { 19 return factory.openSession(); 20 } 21 22 // 获取与当前线程绑定的session 23 public static Session getCurrentSession() { 24 return factory.getCurrentSession(); 25 } 26 27 } 28
6.编写测试代码;
1 package demo; 2 3 import java.util.List; 4 5 import org.hibernate.Query; 6 import org.hibernate.Session; 7 import org.hibernate.Transaction; 8 import org.junit.Test; 9 10 import utils.HibernateUtils; 11 12 //hql查询数据库 13 public class Demo02 { 14 @Test 15 // 查询全部 16 // sql:select * from cst_linkman 17 // hql:from Linkman 18 public void findAll() { 19 // 获取session 20 Session cs = HibernateUtils.getCurrentSession(); 21 // 开启事务,并返回事务对象 22 Transaction tx = cs.beginTransaction(); 23 // hql语句 24 String hql = "from Linkman"; 25 // 执行hql语句,并获取query对象 26 Query query = cs.createQuery(hql); 27 // 获取结果集,并输出 28 List list = query.list(); 29 for (Object object : list) { 30 System.out.println(object); 31 } 32 // 提交事务 33 tx.commit(); 34 } 35 36 // 条件查询 37 // sql:select * from csl_linkman where id=3; 38 // hql:from Linkman where id=3 39 @Test 40 public void findWithCondition() { 41 // 获取当前线程session 42 Session cs = HibernateUtils.getCurrentSession(); 43 // 开启事务,返回事务对象 44 Transaction tx = cs.beginTransaction(); 45 // 执行hql,并返回query对象 46 Query query = cs.createQuery("from Linkman where lkmId=?"); 47 // 为占位符赋值,从左往右,第1个?为0,第2个为1.... 48 query.setParameter(0, 3L); 49 // 获取结果集并输出 50 Object obj = query.uniqueResult(); 51 System.out.println(obj); 52 // 提交事务 53 tx.commit(); 54 } 55 56 // 具名查询 57 @Test 58 public void findWithConditionOther() { 59 // 获取当前线程session 60 Session cs = HibernateUtils.getCurrentSession(); 61 // 开启事务,返回事务对象 62 Transaction tx = cs.beginTransaction(); 63 // 编写hql语句 64 String hql = "from Linkman where lkmName like :lkmName"; 65 // 执行hql,并返回query对象 66 Query query = cs.createQuery(hql); 67 // 为占位符赋值,具名方式 68 query.setString("lkmName", "R%"); 69 // 获取结果集 70 Object obj = query.uniqueResult(); 71 // 输出 72 System.out.println(obj); 73 // 提交事务 74 tx.commit(); 75 } 76 77 // 分页查询 78 @Test 79 public void findWithPage() { 80 // 获取当前线程session 81 Session cs = HibernateUtils.getCurrentSession(); 82 // 开启事务,并返回事务对象 83 Transaction tx = cs.beginTransaction(); 84 // 编写hql 85 String hql = "from Linkman"; 86 // 执行hql并返回query对象 87 Query query = cs.createQuery(hql); 88 // 为占位符赋值 89 query.setFirstResult(0); 90 query.setMaxResults(2); 91 // 获取结果集 92 List list = query.list(); 93 for (Object object : list) { 94 System.out.println(object); 95 } 96 // 提交事务 97 tx.commit(); 98 } 99 100 // 排序查询-id倒序 101 @Test 102 public void findByOrder() { 103 // 获取当前线程session 104 Session cs = HibernateUtils.getCurrentSession(); 105 // 开启事务,并返回事务对象 106 Transaction tx = cs.beginTransaction(); 107 // 编写hql 108 String hql = "from Linkman order by lkmId desc"; 109 // 执行并返回query对象 110 Query query = cs.createQuery(hql); 111 // 获取结果集 112 List list = query.list(); 113 for (Object object : list) { 114 System.out.println(object); 115 } 116 // 提交事务 117 tx.commit(); 118 } 119 120 // 统计查询 121 @Test 122 public void findWithCount() { 123 // 获取当前线程session 124 Session cs = HibernateUtils.getCurrentSession(); 125 // 开启事务,并返回事务对象 126 Transaction tx = cs.beginTransaction(); 127 // 编写hql 128 String hql = "select count(lkmId) from Linkman"; 129 // 执行并返回query对象 130 Query query = cs.createQuery(hql); 131 // 获取结果集,并输出 132 Object obj = query.uniqueResult(); 133 System.out.println(obj); 134 // 提交事务 135 tx.commit(); 136 } 137 138 // 投影查询 139 @Test 140 public void findProjection() { 141 // 获取当前线程session 142 Session cs = HibernateUtils.getCurrentSession(); 143 // 开启事务,并返回事务对象 144 Transaction tx = cs.beginTransaction(); 145 // 编写hql 146 String hql = "select new Linkman(lkmId,lkmName) from Linkman"; 147 // 执行hql并返回query对象 148 Query query = cs.createQuery(hql); 149 // 获取结果集并输出 150 List list = query.list(); 151 for (Object object : list) { 152 System.out.println(object); 153 } 154 // 提交事务 155 tx.commit(); 156 } 157 } 158