1. Query查询
* Hql语句语法:
查询:from 类名
1. 查询所有数据:
Session session;
@Before
public void startUp() {
Configuration configure = new Configuration().configure("hibernate.cfg.xml");
SessionFactory sf = configure.buildSessionFactory();
session = sf.openSession();
}
// 查询所有的新闻信息
@Test
public void getAllNews() {
String hql = " from News ";
// 得到一个query对象
Query q = session.createQuery(hql);
List<News> list = q.list();
System.out.println(list);
session.close();
}
2. 查询某些列:默认是将查询结果集中每一条数据的多列值放到一个数组里。
@Test
public void getAllNews1() {
String hql = " select nid,title from News ";
// 得到一个query对象
Query q = session.createQuery(hql);
List<Object[]> list = q.list();
System.out.println(list.get(0)[0]);
session.close();
}
3. 在查询局部的某些列时也可以直接将查询结果集中每一条数据的多列值赋值到一个对象里,这时需要用到类型的有参构造方法
// 查询局部几列
@Test
public void getAllNews2() {
// 得到一个query对象
// 在实体类中创建 包括 nid,title的构造方法
String hql = "select new News(nid,title) from News ";
Query q = session.createQuery(hql);
List<News> list = q.list();
System.out.println(list.get(0).getTitle());
for (News news : list) {
System.out.println(news);
}
session.close();
}
4. 占位符:?或者 :变量名
// 通过hql实现主键查询
@Test
public void getAllNews3() {
String hql = " from News where nid=10 ";
// 得到一个query对象
Query q = session.createQuery(hql);
News news = (News) q.uniqueResult();
System.out.println(news);
session.close();
}
// 占位符的使用
@Test
public void getAllNews4() {
String hql = " from News where nid=? ";
// 得到一个query对象
Query q = session.createQuery(hql);
// 为占位符设置值,参数一位占位符的下标,参数二是占位符的值
q.setParameter(0, 10);
News news = (News) q.uniqueResult();
System.out.println(news);
session.close();
}
// 占位符的使用
@Test
public void getAllNews5() {
String hql = " from News where nid=:id ";
// 得到一个query对象
Query q = session.createQuery(hql);
// 为占位符设置值,参数一位占位符对应变量名,参数二是占位符的值
q.setParameter("id", 10);
News news = (News) q.uniqueResult();
System.out.println(news);
session.close();
}
5. Hql实现删除
@Test
public void delNews() {
String hql = " delete from News where nid=:id ";
// 得到一个query对象
Query q = session.createQuery(hql);
// 为占位符设置值,参数一位占位符对应变量名,参数二是占位符的值
q.setParameter("id", 10);
q.executeUpdate();
session.beginTransaction().commit();
//session.getTransaction().commit();
//两种提交方法,提交没有区别
session.close();
}
6. Hql实现更新
@Test
public void updByHql() {
// 得到一个query对象
String hql = "update News set title=:t where nid=:id";
Query q = session.createQuery(hql);
q.setParameter("t", "狭义");
q.setParameter("id", 9);
q.executeUpdate();
session.beginTransaction().commit();
session.close();
}
2. Criteria查询
* 该查询方式主要是通过调用函数来完成根据某些限定条件查询
1. 查询所有数据(无限定条件)
@Test
public void Criteria1() {
Criteria cc = session.createCriteria(News.class);
List<News> list = cc.list();
for (News news : list) {
System.out.println(news);
}
}
2. 根据限定条件查询(ideq,eq,like,in)
@Test
public void Criteria2() {
Criteria cc = session.createCriteria(News.class);
//拼接限定条件:ideq,eq,like,in
cc.add(Restrictions.in("nid", 1,3,4,5));
cc.add(Restrictions.like("title", "%高兴%"));
List<News> list = cc.list();
for (News news : list) {
System.out.println(news);
}
session.close();
}