hibernate 中HQL查询

由于比较简单,在此处只写一些HQL语言。

表关系,多对一。

CREATE TABLE `user` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
   `uname` varchar(255) ,
   PRIMARY KEY (`id`)
 ) 
CREATE TABLE `idcard` (
   `id` INT(11) PRIMARY KEY NOT NULL AUTO_INCREMENT,
   `addr` VARCHAR(255),
   `uid` INT(11) ,
   FOREIGN KEY (`uid`) REFERENCES `user` (`id`)
 )

其中每张表都有对应的类,分别是User,IdCard

1 查询全部

Query q = session.createQuery("from User");
List list = q.list();

2 查询指定列

Query q = session.createQuery("select u.uname, u.id from User u");

3 条件查询,and,or,between,模糊查询

Query q = session.createQuery("from User u where u.id between ? and ?");
q.setParameter(0, 2);
q.setParameter(1, 4);

4 聚合函数,count;分组,group by

Query q = session.createQuery("select i.iaddr,count(*) from User u, IdCard i where u.id=i.id group by i.iaddr ");
List list = q.list();

5 分页查询

Query q = session.createQuery("from User");
q.setFirstResult(2);
q.setMaxResults(3);

6 获取总记录数

方法一:使用聚合函数COUNT(*)

Query q = session.createQuery("select count(*) from User");
Long result = (Long) q.uniqueResult();

方法二:使用scroll(),首先滚动到最后,然后获取索引值

Query q = session.createQuery("from User");
        
ScrollableResults scrollResult = q.scroll();  //得到滚动的结果集
scrollResult.last();                          //滚动到最后一行
int result = scrollResult.getRowNumber() + 1; //获取当前值的索引值,因为是从0开始的,所以需要加1

7 hibernate对数据库连接C3P0连接池的支持,配置参数,可以到hibrenate.properties文件中找到

hibernate.cfg.xml配置文件如下

    <property name="hibernate.connection.driver_class">org.hibernate.connection.C3P0ConnectionProvider</property>
       <property name="hibernate.c3p0.min_size">2</property>
       <property name="hibernate.c3p0.max_size">10</property>
       <property name="hibernate.c3p0.max_statements">10</property>
       <property name="hibernate.c3p0.timeout">60</property>
       <property name="hibernate.c3p0.idle_test_period">10000</property>
       <property name="hibernate.c3p0.acquire_increment">3</property>

在mysql中使用如下语句可以查看连接

SHOW PROCESSLIST;
原文地址:https://www.cnblogs.com/zhaopengcheng/p/6781687.html