zoukankan      html  css  js  c++  java
  • Hibernate中的HQL查询与缓存机制

    HQL:完全面向对象查询

    SQL的执行顺序:

    1.From

    2.Where 过滤基础数据

    wherehaving的区别:1.顺序不同 2.where过滤基础数据 3. 过滤聚合函数

    3.Group by

    4.Select

    5.Having

    6.Order by

     

    使用Hibernate查询时,使用hibernate的一个接口query

    Hql面向对象的查询语句,所以跟的是类名

    Query query = session.createQuery(“select id,name,stu.cla.name from Student”);

    List<Object[]>  list  = query.list();

    For(Object[]  obj :  list){

    ........打印等

    Obj[0] = id;  Obj[1] = name;  Obj[2] = stu.cla.name ;

    }

    查询后的数据存在一个Object数组里面

    ---------------------------------------------------------------------------------------------------------------------------------

    list得到查询

    List<List> list = = session.createQuery(“select new List(id,name,stu.cla.name) from Student”).list();

    For(List list1 : list){

    System.out.print(list1.get(0) + list1.get(1));

    }

    ---------------------------------------------------------------------------------------------------------------------------------

    Java对象查询 需要一个带参数的构造函数

    创建一个中间类,包括所需要的属性等  new 对象:包名.类名

    List<MyData> list = session.createQuery(“select new com.lovo.my.MyData(id,name,classname) from MyData”).list();

    For(MyData data: list){

    System.out.print(data.id + “  ”  + data.name + “  ”  + data.classname);

    }

    ---------------------------------------------------------------------------------------------------------------------------------

    Map得到查询

    List<Map> list = = session.createQuery(“select new map(name as stuname,stu.cla.name as claname) from Student”).list();

    For(Map map : list){

    System.out.print(map.get(“stuname”) +” ” + map.get(“classname”));

    }

    ---------------------------------------------------------------------------------------------------------------------------------

    知道查询的结构是一个对象,获得一个结果集

    Student stu = (Student)session.createQuery(“from Student where id=2”).uniqueResult();

    (懒加载)有关联时:      当清除session,会报懒加载错误

    System.out.print(stu.getName()+” ” + stu.getCla().getName());

    开启懒加载:1.配置中设置 lazy=”false” 2.session关闭前,初始化 hibernate.initialize()

    内连接:匹配才连接,不匹配不连接,会导致数据的丢失

    Dto:数据持久化

     

    单例模式:例如:private HibernateUtil(){}  不能new

    Hibernate占位符:1.id= :id(命名参数) 2.id=?

     

    Group by 投影有限制:1.group by之后的能投影 2.聚合函数

    Round(需要取整的函数,保留几位小数)

    IfNull(判断的数据,0);---如果数据为空,则用0代替

     

    HQL中只能在Where /  select 中使用子查询

     

    用本地SQL/HQL语句:

    Select name from t_student;     Select id from t_student;

    返回一列数据:string接受    用Integer接受

     

    session.createSQLQuery(Select * from t_student).addScalar(“name”).list();  

    SQL语句中有标量,*则没有效果

    session.createSQLQuery(Select * from t_student).addEnitity(Student.class).list();

    把查询到的所有数据存储到Student对象中  

     

    Hibernate就是对JDBC的封装 :对数据库访问效率的降低和性能的下降(针对这个生成了缓存 ---- 内存中)   位于数据库和数据库访问层中

     

    一级缓存:Session 缓存

    Session.clear();-----清除session,缓存中的所有数据全部清除

     

    lazy(懒加载)有懒加载:

    1.需要什么数据则发送什么SQL语句

    2.关闭懒加载:把所有的关联表全部用一条SQL语句连接,对象过多保存在内存中

    3.关闭session,懒加载也关闭

    4.默认懒加载开启

     

    抓取策略:

    Session关闭后,立即抓取数据-----把所有的数据抓取到数据库中

    From Student stu left join fetch stu,myclass where stu.id = 1;

     

    二级缓存:用第三方jarsessionFactory级别

    hibernate配置下:

    <!--查询缓存-->

    <property name="cache.use_query_cache">true</property>

    <!--开启二级缓存-->

    <property name="cache.use_second_level_cache">true</property>

    <!--配置echche的实现类-->

    <property name="cache.region.factory_class">

    org.hibernate.cache.EhCacheRegionFactory

    </property>

     

    Hibernate悲观和乐观锁:控制数据在操作时,不会被外界所破坏

    悲观锁:锁表的状态 setLockMode(对象,LockMode.UPGPADE)  依赖数据库的锁表机制,t提交后才释放

    乐观锁:主要采用版本的形式

    配置:

    1.创建类时,添加一个属性version int

    2.Version必须配置在id的后面  <version name=”version” column=”version”></version>

     

    Gson gson = new Gson();

    String list = gson.toJson();

     

    打成jar:

    1.file--export

    2.输入jar --- jarfile

    3.选择想要打的jar包  写入jar包名称 选择保存路径

  • 相关阅读:
    poj 1837 Balance
    poj 3009 Curling 2.0
    vagrant up 无法加载映像目录
    liunx 查看php 安装的扩展
    树莓派 添加超级管理员身份
    Sublime text追踪函数插件:ctags[转载]
    手动安装m4, autoconf, automake, libtool
    nginx: [error] invalid PID number "" in "/usr/local/nginx/logs/nginx.pid"
    如何将编码转为自己想要的编码 -- gbk utf-8
    laravel 增删修改
  • 原文地址:https://www.cnblogs.com/z1234/p/6194621.html
Copyright © 2011-2022 走看看