hibernate框架学习之数据查询(qbc)helloworld

架构师小跟班      2022-04-06     555

关键词:

package cn.itcast.h3.query.hql;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projection;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Property;
import org.hibernate.criterion.Restrictions;

import cn.itcast.h3.query.hql.vo.StudentModel;
import cn.itcast.h3.query.hql.vo.TeacherModel;
import cn.itcast.util.HibernateUtil;

//Criteria查询(QBC)
public class CriteriaApp {
    // 简单查询
    void testSimpleCriteria() {
        Session s = HibernateUtil.getSession();
        Criteria c = s.createCriteria(TeacherModel.class);
        List<TeacherModel> queryList = c.list();
        for (TeacherModel tm : queryList) {
            System.out.println(tm);
        }
        s.close();
    }

    // 查询排序
    void testCriteriaOrder() {
        Session s = HibernateUtil.getSession();
        Criteria c = s.createCriteria(StudentModel.class);
        c.addOrder(Order.asc("age"));
        c.addOrder(Order.desc("studentName"));
        List<StudentModel> queryList = c.list();
        for (StudentModel tm : queryList) {
            System.out.println(tm);
        }
        s.close();
    }

    // 按条件查询
    void testCriteriaCondition() {
        Session s = HibernateUtil.getSession();
        Criteria c = s.createCriteria(StudentModel.class);
        // 从上向下,全部默认为并且关系
        // c.add(Restrictions.like("studentName", "%虎%"));
        // c.add(Restrictions.gt("age", 22));
        // 使用关系描述条件
        // c.add(Restrictions.or(Restrictions.like("studentName", "%虎%"),
        // Restrictions.lt("age", 22)));
        // c.add(
        // Restrictions.and(
        // Restrictions.eq("aa", 123),
        // Restrictions.and(
        // Restrictions.lt("aa", 232),
        // Restrictions.eq("", 123)
        // )
        // )
        // );

        List<StudentModel> queryList = c.list();
        for (StudentModel tm : queryList) {
            System.out.println(tm);
        }
        s.close();
    }

    // 链式风格
    void testCriteriaLink() {
        Session s = HibernateUtil.getSession();
        Criteria c = s.createCriteria(StudentModel.class);
        c.add(Restrictions.like("studentName", "%虎%")).add(    Restrictions.gt("age", 22));
        List<StudentModel> queryList = c.list();
        for (StudentModel tm : queryList) {
            System.out.println(tm);
        }
        s.close();
    }
    // 投影风格
    void testCriteriaShadow() {
        Session s = HibernateUtil.getSession();
        Criteria c = s.createCriteria(StudentModel.class);
//        投影单个字段
//        c.setProjection(Property.forName("age"));
//        List<Integer> queryList = c.list();
//        for (Integer age : queryList) {
//            System.out.println(age);
//        }
//        投影多个字段
        c.setProjection(
            Projections.projectionList()
                .add(Property.forName("studentName"))
                .add(Property.forName("age"))
            );
        List<Object[]> queryList =c.list();
        for(Object[] objs:queryList){
            for(Object obj:objs){
                System.out.println(obj);
            }
            System.out.println("----------------");
        }
        s.close();
    }
    //多表关联查询
    void testMulQuery(){
        Session s = HibernateUtil.getSession();
        Criteria c = s.createCriteria(StudentModel.class);
        c.createAlias("teacher", "t");
        c.add(Restrictions.eq("t.teacherName", "李若亮"));
        List<StudentModel> queryList = c.list();
        for (StudentModel tm : queryList) {
            System.out.println(tm);
        }
        s.close();
    }
    //离线查询DetachedCriteria
    void testDetachedCriteria(){
        DetachedCriteria dc = DetachedCriteria.forClass(StudentModel.class);
        dc.createAlias("teacher", "t");
        dc.add(Restrictions.eq("t.teacherName", "雅典娜"));
        //..一路传递到数据层
        
        Session s = HibernateUtil.getSession();
        Criteria c = dc.getExecutableCriteria(s);
        List<StudentModel> queryList = c.list();
        for (StudentModel tm : queryList) {
            System.out.println(tm);
        }
        s.close();
    }
    
    public static void main(String[] args) {
        new CriteriaApp().testDetachedCriteria();
    }
}

 

hibernate框架学习之数据查询(hql)

lHibernate共提供5种查询方式?OID数据查询方式?HQL数据查询方式?QBC数据查询方式?本地SQL查询方式?OGN数据查询方式OID数据查询方式l前提:已经获取到了对象的OIDl查询:基于OID,使用get/load方法查询对应的数据l作用:使用OID获取对应... 查看详情

hibernate框架学习之增删改查helloworld

插入数据删除数据修改数据查询单条数据查询多条数据HelloWorldApp.javapackagecn.itcast.h3.helloworld;importorg.hibernate.Session;importorg.hibernate.SessionFactory;importorg.hibernate.Transaction;importorg.hibernate.cfg.Configur 查看详情

hibernate框架学习之使用sqlquery查询数据

SQLQuery对象的获取  Hibernate支持使用原生SQL语句进行查询,通过session对象获得SQLQuery对象进行,需要传入SQL语句  SQLQuerycreateSQLQuery(StringsqlStr)  SQLQueryquery=session.createSQLQuery(“select*fromtbl_user");sqlStr是满足SQL语法规则的字符... 查看详情

hibernate框架学习之数据查询(hql)helloworld

packagecn.itcast.h3.hql;importjava.util.List;importorg.hibernate.Query;importorg.hibernate.Session;importcn.itcast.h3.hql.vo.StudentModel;importcn.itcast.h3.hql.vo.TeacherModel;importcn.itcast.h3.util 查看详情

hibernate框架学习之多表查询helloworld

packagecn.itcast.h3.hql;importjava.util.List;importorg.hibernate.Query;importorg.hibernate.Session;importcn.itcast.h3.hql.vo.StudentModel;importcn.itcast.h3.hql.vo.TeacherModel;importcn.itcast.h3.util 查看详情

hibernate框架学习之数据模型-pojo

Hibernate数据模型用于封装数据,开发时候需要遵从如下规范:1)提供公共无参的构造方法(可使用自动生成的)如果使用投影技术,一定要显式声明公共无参的构造方法2)提供一个标识属性,作为对象的主键,映射数据库表主键... 查看详情

hibernate框架学习之持久化对象oid

...相同2)Java语言中使用对象的内存地址区分对象是否相同3)Hibernate中使用OID区分对象是否相同Hibernate认为每一个不同的对象应该具有一个唯一的标识,称这个标识为OID;为了使数据模型与数据库表一样使用主键来进行数据的区分,... 查看详情

hibernate框架学习之核心api

...SessionTransactionQueryCriteriaConfigurationConfiguration对象用于封装Hibernate的配置信息,在Hibernate框架启动后,需要装载对应的配置文件。Hibernate的配置文件有两种格式hibernate.properties文件(早期格式)hibernate.cfg.xml文件( 查看详情

java学习之hibernate框架使用

Java学习之Hibernate框架使用0x00前言以我看来Hibernate的使用频率其实还是比较可观的,但都说Hibernate比较笨重,这里来学习一波,做个简单记录。0x01使用流程流程1、导⼊相关依赖2、创建Hibernate配置⽂件3、创建实体类4、创建实体... 查看详情

hibernate框架学习之核心配置文件

hibernate.cfg.xml<?xmlversion=‘1.0‘encoding=‘utf-8‘?><!DOCTYPEhibernate-configurationPUBLIC"-//Hibernate/HibernateConfigurationDTD3.0//EN""http://www.hibernate.org/dtd/hibernate-configuration 查看详情

hibernate框架学习之主键生成策略generator

1)手工控制assigned(不限制类型)2)数据库自动生成uuid(字符串类型)increment(整型数值类型)identity(整型数值类型)sequence(整型数值类型)native(整型数值类型)assigned策略是由程序员手工控制输入数据模型OID的一种id生成策略assigned策略不... 查看详情

hibernate框架学习之对象状态

Hibernate对象共有三种状态瞬时状态:瞬时对象持久化状态:持久化对象托管状态:托管对象瞬时对象(TransientObject),简称TO瞬时对象指的是应用程序创建出来的对象,并且未受到Hibernate控制,一旦Hibernate控制了该对象,具有了OID... 查看详情

hibernate框架学习之对象状态

lHibernate对象共有三种状态?瞬时状态:瞬时对象?持久化状态:持久化对象?托管状态:托管对象l瞬时对象(TransientObject),简称TOl瞬时对象指的是应用程序创建出来的对象,并且未受到Hibernate控制,一旦Hibernate控制了该对象,具有... 查看详情

小白学习之hibernate学习总结

一、关于hibernate1. hibernate是什么?   Hibernate是使用在三层架构中的dao层的一个轻量级框架,与JDBC和myBatis是类似的技术,它也是基于ORM(对象关系映射:数据表中的字段和实体类中的属性一一对应)设计的,其实就... 查看详情

hibernate查询方式(hql/qbc/qbe)汇总

...库持久化层所做出的贡献有目共睹。  它所提供的数据查询方式也越来越丰富,从SQL到自创的HQL,再到面向对象的标准化查询。  虽然查询方式有点眼花缭乱,配置使用起来也稍微有点复杂。  但是丝毫掩盖... 查看详情

hibernate学习之hql与sql

Hibernate中查询:    createQuery(StringqlString)使用的是HQL语句;    createNativeQuery(StringsqlString)使用的是SQL语句; 关系HQL与SQL区别:    HQL查询:Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式... 查看详情

hibernate怎么用查询

刚开始学HIBERNATE不懂1:hibernate数据查询方式:有HQL方式,QBC方式,原生SQL方式。HQL适合静态查询,QBC则适合较多的动态查询。A:HQL方式,支持条件查询,连接查询,分页查询,分组查询,内置函数和自定义函数查询(SUN(),MIN(),M... 查看详情

hibernate学习之单向多对一映射

?版权声明:本文为博主原创文章,转载请注明出处说明:该实例是通过映射文件和注解两种方式实现的。可根据自己的需要选择合适的方式实例:1.项目结构2.pom.xml<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/200... 查看详情