由于比较简单,在此处只写一些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;