//HQL查询
// auto-import要设置true,如果是false,写HQL时要指定类的全名
//查询全部列
Query query = session.createQuery("from Dept");
System.out.println(query.list()); //查询指定列
Query query = session.createQuery("select d.depId,d.depName from Dept d");
System.out.println(query.list()); //查询指定列,并封装为对象,必须提供带参数的构造器
Query query = session.createQuery("select new Dept(d.depId,d.depName) from Dept d");
System.out.println(query.list()); //条件查询 一个条件、多个条件、and or between 模糊查询
Query query = session.createQuery("from Dept d where depName=?");
query.setString(0,"人事部");
query.setParameter(0,"人事部");
//条件查询,命名参数
Query query = session.createQuery("from Dept d where depId =:myid and depName=:name");
query.setParameter("myid",1);
query.setParameter("name","人事部");
//条件查询,between and查询
Query query = session.createQuery("from Dept d where depId between ? and ?");
query.setParameter(0,1);
query.setParameter(1,5);
//模糊查询
Query query = session.createQuery("from Dept d where depName like ?");
query.setParameter(0,"%部%");
System.out.println(query.list()); //集合函数统计,不支持count(1),uniqueResult()返回结果的第一行第一列中的值
Query query = session.createQuery("select count(*) from Dept");
System.out.println(query.uniqueResult()); //分组查询,查询employ表,统计每个部门的人数
Query query = session.createQuery("select e.dept, count(*) from Employee e group by e.dept");
//统计部门人数大于1的部门
Query query = session.createQuery("select e.dept, count(*) from Employee e group by e.dept having count(*) >1");
System.out.println(query.list()); //连接查询,内连接、左外连接、右外连接
//内连接,映射已经配置好了关系,关联的时候直接写对象的属性即可
//返回员工和部门组成的对象数组,写在前面的元素在结果集中也在前面
// SELECT e.empName, e.salary, d.deptName FROM t_employee e INNER JOIN t_dept d ON d.depId = e.dept_id
Query query = session.createQuery("select e.empName,e.salary,e.dept.depName from Employee e inner join e.dept");
List<Object[]> list = query.list();
for(int i=0;i<list.size();i++){
Object[] obj = list.get(i);
Employee employee = (Employee) obj[0];
Dept dept = (Dept) obj[1];
System.out.println(employee);
System.out.println(dept);
}
System.out.println(query.list());
//左外连接
// SELECT e.empName, e.salary, d.deptName FROM t_employee e LEFT JOIN t_dept d ON d.depId = e.dept_id
Query query = session.createQuery(" from Employee e left join e.dept");
List<Object[]> list = query.list();
for(int i=0;i<list.size();i++){
Object[] obj = list.get(i);
Employee employee = (Employee) obj[0];
Dept dept = (Dept) obj[1];
System.out.println(employee);
System.out.println(dept);
}//迫切内连接,将右表的对象填充到左表当中
Query query = session.createQuery("from Dept d inner join fetch d.emps");

将HQL查询语句放到映射文件中:

    <query name="getDept">
from Dept d where depName=?
</query>
<query name="getDept2">
<![CDATA[
from Dept d where depId < ?
]]>
</query>

使用查询语句

        Query query = session.getNamedQuery("getDept");
query.setParameter(0,"人事部");
Query query = session.getNamedQuery("getDept2");
query.setParameter(0, 4);
System.out.println(query.list());

使用c3p0连接池

<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration>
<!-- 通常,一个session-factory节点代表一个数据库 -->
<session-factory> <!-- 1. 数据库连接配置 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///test</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">juaner767</property>
<!-- 【连接池配置】 -->
<!--
数据库方法配置, hibernate在运行的时候,会根据不同的方言生成符合当前数据库语法的sql
-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property> <!-- 2. 其他相关配置 -->
<!-- 2.1 显示hibernate在运行时候执行的sql语句 -->
<property name="hibernate.show_sql">true</property>
<!-- 2.2 格式化sql
<property name="hibernate.format_sql">true</property> -->
<!-- 2.3 自动建表 -->
<property name="hibernate.hbm2ddl.auto">update</property> <!-- 配置连接驱动管理类 -->
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<!-- 配置连接池参数信息 -->
<property name="hibernate.c3p0.min_size">2</property>
<property name="hibernate.c3p0.max_size">4</property>
<property name="hibernate.c3p0.timeout">5000</property>
<property name="hibernate.c3p0.max_statements">10</property>
<property name="hibernate.c3p0.idle_test_period">30000</property>
<property name="hibernate.c3p0.acquire_increment">2</property> <!-- 3. 加载所有映射 -->
<mapping resource="com/juaner/hibernate/address/User.hbm.xml"/>
<!--<mapping resource="com/juaner/hibernate/department/Dept.hbm.xml"/>-->
<!--<mapping resource="com/juaner/hibernate/department/Employee.hbm.xml"/>-->
<!--<mapping resource="com/juaner/hibernate/project/Developer.hbm.xml"/>-->
<!--<mapping resource="com/juaner/hibernate/project/Project.hbm.xml"/>-->
<!--<mapping resource="com/juaner/hibernate/extendMap/Animal.hbm.xml"/>-->
</session-factory>
</hibernate-configuration>

HQL查询及Hibernate对c3p0连接池的支持的更多相关文章

  1. Hibernate配置C3P0连接池

    引入C3PO包 在hibernate.cfg.xml文件中配置 <!-- 数据库连接池的使用 --> <!-- 选择使用C3P0连接池 --> <property nam ...

  2. Hibernate -- 配置c3p0连接池, 事务隔离级别, 管理session

    知识点1:配置c3p0连接池(了解) * 引入c3p0-0.9.1.jar * 在hibernate.cfg.xml文件中增加如下配置 <!-- C3P0连接池设定--> <!-- ...

  3. (30)java web的hibernate使用-c3p0连接池配置

    hibernate支持c3p0连接池 需要导入c3p0的jar包 <!-- 配置连接驱动管理类 --> <property name="hibernate.connecti ...

  4. Hibernate 配置C3P0 连接池

    第一步在hibernate.cfg.xml配置 <!-- 连接池 --> <property name="hibernate.connection.provider_cla ...

  5. Hibernate的查询,二级缓存,连接池

    Hibernate的查询,二级缓存,连接池 1.Hibernate查询数据 Hibernate中的查询方法有5中: 1.1.Get/Load主键查询 使用get或者load方法来查询,两者之间的区别在 ...

  6. hibernate对连接池的支持和HQL查询

    hibernate对连接池的支持 连接池, 作用: 管理连接:提升连接的利用效率! 常用的连接池: C3P0连接池 Hibernate 自带的也有一个连接池,且对C3P0连接池也有支持! 只维护一个连 ...

  7. hibernate 查询、二级缓存、连接池

    hibernate 查询.二级缓存.连接池 查询: 1) 主键查询 Dept dept =  (Dept) session.get(Dept.class, 12); Dept dept =  (Dep ...

  8. C3P0连接池在hibernate和spring中的配置

    首先为什么要使用连接池及为什么要选择C3P0连接池,这里就不多说了,目前C3P0连接池还是比较方便.比较稳定的连接池,能与spring.hibernate等开源框架进行整合. 一.hibernate中 ...

  9. Hibernate的配置中,c3p0连接池相关配置

    一.配置c3p0 1.导入 hibernate-c3po连接池包,Maven地址是:http://mvnrepository.com/artifact/org.hibernate/hibernate- ...

随机推荐

  1. eclipse xml 注释快捷键

    注释:CTRL + SHIFT + / 撤销注释:CTRL + SHIFT + \

  2. The specified child already has a parent错误

    10-05 23:39:48.187: E/AndroidRuntime(12854): Caused by: java.lang.IllegalStateException: The specifi ...

  3. Kafka 消息存储及检索(作者:杜亦舒)

    Kafka 消息存储及检索 原创 2016-02-29 杜亦舒 性能与架构 Kafka是一个分布式的消息队列系统,消息存储在集群服务器的硬盘Kafka中可以创建多个消息队列,称为topic,消息的生产 ...

  4. 最大似然估计(Maximum Likelihood,ML)

    先不要想其他的,首先要在大脑里形成概念! 最大似然估计是什么意思?呵呵,完全不懂字面意思,似然是个啥啊?其实似然是likelihood的文言翻译,就是可能性的意思,所以Maximum Likeliho ...

  5. JSP Filter

    Servlet过滤器方法 一个过滤器就是一个Java类,它实现了javax.servlet.Filter 接口.javax.servlet.Filter接口定义了三个方法: 序号 方法 &描述 ...

  6. js将long日期格式转换为标准日期格式

    <script language="javascript"> //扩展Date的format方法 Date.prototype.format = function (f ...

  7. java对于文件传输时---编码格式的一些设置方法

    - ----转 读文件: BufferedReader 从字符输入流中读取文本,缓冲各个字符,从而提供字符.数组和行的高效读取. 可以指定缓冲区的大小,或者可使用默认的大小.大多数情况下,默认值就足够 ...

  8. c++表达式的一些小小的注意事项

    3+12>>1 = 7; 12>>1+3 =0; 3+(12>>1)=9;

  9. 在进程View时的四个构造函数详解

    public View(Context context):源代码中的解释如下:在Code中实例化一个View就会调用第一个构造函数 /** * Simple constructor to use wh ...

  10. Codeforces Round #308 (Div. 2)----C. Vanya and Scales

    C. Vanya and Scales time limit per test 1 second memory limit per test 256 megabytes input standard ...