zoukankan      html  css  js  c++  java
  • HQL查询及Hibernate对c3p0连接池的支持

            //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>
  • 相关阅读:
    构建Python+Selenium2自动化测试环境<一>
    C学习笔记(七)C控制语句:分支和跳转
    C学习笔记(三)数据和C
    C学习笔记(四)格式化输入输出
    C学习笔记(二)C语言概述
    C学习笔记(一)概览
    C学习笔记(五)运算符、表达式和语句
    C学习笔记(六)C控制语句:循环
    投资者关系(IR)简介
    云计算平台简介(App Engine)
  • 原文地址:https://www.cnblogs.com/juaner767/p/5575097.html
Copyright © 2011-2022 走看看