Hibernate--HQL语句
2017-07-28 14:55
330 查看
Hibernate--HQL语句
1、HQL是什么?
HQL----->Hibernate Query Language(hql查询语言),是对get()/load()方法的补充。我们都知道,session.get()或者load() 方法时根据表的id来查询表的所有信息的。如果想要实现复杂的查询,我们需要使用hql语句来实现。
HQL(Hibernate Query Language)提供更加丰富灵活、更为强大的查询能力;
HQL更接近SQL语句查询语法;
[select/delete/update…][from…][where…][group by…][having…][order by…]
2、具体的实例如下:
(1)自己新建一个Java工程,添加hibernate3.3支持,连接test数据库
(2)在src下新建com.etc.dao包,在包下新建User.java类:
(3)在com.etc.dao下新建User.hbm.xml映射文件:
(4)修改hibernate.cfg.xml配置文件:
(5)在工程下新建test文件夹,在文件夹下新建com.etc.dao包,在包下新建UserDAOTest.java测试类:
(7)继续在UserDAOTest.java类中写方法,执行相应的hql查询语句:
1、HQL是什么?
HQL----->Hibernate Query Language(hql查询语言),是对get()/load()方法的补充。我们都知道,session.get()或者load() 方法时根据表的id来查询表的所有信息的。如果想要实现复杂的查询,我们需要使用hql语句来实现。
HQL(Hibernate Query Language)提供更加丰富灵活、更为强大的查询能力;
HQL更接近SQL语句查询语法;
[select/delete/update…][from…][where…][group by…][having…][order by…]
2、具体的实例如下:
(1)自己新建一个Java工程,添加hibernate3.3支持,连接test数据库
(2)在src下新建com.etc.dao包,在包下新建User.java类:
package com.etc.dao; public class User { private int id; private String username; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } @Override public String toString() { return "User [id=" + id + ", username=" + username + "]"; } }
(3)在com.etc.dao下新建User.hbm.xml映射文件:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.etc.dao.User" table="t_user" catalog="test"> <id name="id" type="java.lang.Integer"> <column name="user_id"/> <generator class="native"/> </id> <property name="username" type="java.lang.String"> <column name="user_name"/> </property> </class> </hibernate-mapping>
(4)修改hibernate.cfg.xml配置文件:
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <!-- Generated by MyEclipse Hibernate Tools. --> <hibernate-configuration> <session-factory> <property name="show_sql">true</property> <property name="format_sql">true</property> <!-- <property name="hbm2ddl.auto">create</property> --> <property name="current_session_context_class">thread</property> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <property name="connection.url">jdbc:mysql://localhost:3306/test</property> <property name="connection.username">root</property> <property name="connection.password">root</property> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="myeclipse.connection.profile">com.mysql.jdbc.Driver</property> <mapping resource="com/etc/dao/User.hbm.xml"/> </session-factory> </hibernate-configuration>
(5)在工程下新建test文件夹,在文件夹下新建com.etc.dao包,在包下新建UserDAOTest.java测试类:
package com.etc.dao; import java.util.List; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.junit.Test; public class UserDAOTest { @Test public void testCreate(){ SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); Session session = sessionFactory.getCurrentSession(); session.beginTransaction( c162 ); for(int i=0;i<5;i++){ User user = new User(); user.setUsername("zoey"+i); session.save(user); } session.getTransaction().commit(); } }(6)去掉hibernate.cfg.xml中的hbm2ddl注释,执行testCreate()方法,在数据库中自动创建相应的表t_user,并且自动插入5条数据。
(7)继续在UserDAOTest.java类中写方法,执行相应的hql查询语句:
package com.etc.dao; import java.util.List; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.junit.Test; public class UserDAOTest { /** * Description:自动创建t_user表,并且向表中插入5条数据 * @author zoey * @date 2017年7月28日 */ @Test public void testCreate(){ SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); Session session = sessionFactory.getCurrentSession(); session.beginTransaction(); for(int i=0;i<5;i++){ User user = new User(); user.setUsername("zoey"+i); session.save(user); } session.getTransaction().commit(); } /** * Description:常用的hql查询语句 * @author zoey * @date 2017年7月28日 */ @Test public void testRetrieve(){ SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); Session session = sessionFactory.getCurrentSession(); session.beginTransaction(); System.out.println("------普通查询-----------"); String hql1 = "from User"; List<User> userList1 = (List<User>) session.createQuery(hql1).list(); for(User user:userList1){ System.out.println(user); } System.out.println("------条件查询 where-----------"); String hql2 = "from User where username = 'zoey1'"; List<User> userList2 = (List<User>) session.createQuery(hql2).list(); for(User user:userList2){ System.out.println(user); } System.out.println("------模糊查询 like 模糊查询 %模糊匹配 _匹配一个-----------"); String hql3 = "from User where username like '_oey1'"; List<User> userList3 = (List<User>) session.createQuery(hql3).list(); for(User user:userList3){ System.out.println(user); } System.out.println("------类的别名-----------"); String hql4 = "from User u where u.username = 'zoey2'"; List<User> userList4 = (List<User>) session.createQuery(hql4).list(); for(User user:userList4){ System.out.println(user); } //单个属性查询,得到String的list集合 System.out.println("------多个属性查询,得到一个数组-----------"); String hql5 = "select username from User"; List<String> usernameList = (List<String>)session.createQuery(hql5).list(); for(String s:usernameList){ System.out.println(s); } System.out.println("------多个属性查询,得到一个数组-----------"); String hql6 = "select id,username from User"; List<Object[]> objectList = session.createQuery(hql6).list(); for(Object[] object:objectList){ System.out.println(object[0]+","+object[1]); } System.out.println("------多个属性查询,使用面对对象的方式,自己封装对象:将User的值存到MyUser中,使之初始化(比较有用)-----------"); String hql7 = "select new com.etc.dao.MyUser(id,username) from User"; List<MyUser> userList5 = session.createQuery(hql7).list(); for(MyUser user:userList5){ System.out.println("MyUser:"+user.getName()); } System.out.println("------select语句,创建一个list-----------"); String hql8 = "select new list(id,username) from User"; List<List> list = session.createQuery(hql8).list(); for(List l:list){ System.out.println(l.get(0)); } System.out.println("------函数查询:count(*),count(1)会报错-----------"); String hql9 = "select count(*) from User"; Long count = (Long) session.createQuery(hql9).uniqueResult();//返回的必须是Long类型 System.out.println(count); System.out.println("------update 更新-----------"); String hql10 = "update User set username = 'lan' where id = '1'"; Query query = session.createQuery(hql10); int num = query.executeUpdate(); if(num == 1){ System.out.println("更新成功"); } System.out.println("------delete 删除-----------"); String hql11 = "delete from User where id = '5'"; Query query2 = session.createQuery(hql11); int num2 = query2.executeUpdate(); if(num2 == 1){ System.out.println("删除成功"); } System.out.println("------排序-----------"); String hql12 = "from User order by id desc"; List<User> list3 = session.createQuery(hql12).list(); for(User u:list3){ System.out.println(u); } System.out.println("-------分组---------"); String hql13 = "from User group by id"; List<User> list4 = session.createQuery(hql13).list(); for(User u:list4){ System.out.println(u); } session.getTransaction().commit(); } /** * Description:使用hql查询 * MySQL分页使用limit关键字 * select * from t_user limit 0,3;//从下标0开始,显示3条记录 * Oracle分页使用rownum关键字 * Hql分页使用setFirstResult()、setMaxResults()方法,指定开始的下标、展示记录总数的下标 * @author zoey * @date 2017年7月28日 */ @Test public void testHql(){ SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); Session session = sessionFactory.getCurrentSession(); session.beginTransaction(); String hql = "from User"; List<User> userList = session.createQuery(hql).setFirstResult(0).setMaxResults(3).list(); for(User user:userList){ System.out.println(user); } session.getTransaction().commit(); } }(8)MyUser.java类如下:
package com.etc.dao; public class MyUser { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public MyUser(int id, String name) { super(); this.id = id; this.name = name; } }
相关文章推荐
- 心得11-hibernate.的HQL语句
- Hibernate HQL like 语句的用法
- 【Hibernate 6】常用的hql语句以及N+1问题
- Hibernate中的三种查询语句(hql,sql,qbc)
- [Hibernate框架]Hql语句in中带参数的写法
- hibernate根据条件动态组装sql/hql语句(仿ibatis动态查询语句功
- hibernate使用createQuery(hql)语句仅查询部分字段,应如何获得数据
- hql not mapped hibernate语句查询错误
- hibernate HQL 语句 只查询对象里面的某些属性
- hibernate如何使用hql语句查询时间区间段
- Hibernate中HQL语句查询指定字段值报错:ClassCastException: [java.lang.Object; cannot be cast to bean.PersonStatic
- hibernate 中HQL语句查询学习笔记一
- Exception:hibernate HQL不充分支持 case when语句?
- hibernate的hql查询语句总结
- hibernate -- HQL语句总结
- hibernate 执行hql语句出现数据默认值错误
- 心得11-hibernate.的HQL语句
- 【Hibernate 6】常用的hql语句以及N+1问题
- hibernate HQL语句
- hibernate的hql查询语句总结