zoukankan      html  css  js  c++  java
  • hibernate


    cascade:save-update,delete / all影响关联外键的表
    inverse默认false 主表单向调整 会主动更新关联外键的数据   true需要双向赋值

    order-by:列名 asc排序 也可以在javabean的映射文件中set标签添加属性

        
    lazy类级默认为true延迟加载   设置为false表示立即加载
    lazy一对多多对多 extra加强延迟加载 集合长度
    lazy多对一默认为proxy 代理延迟加载
        no-proxy 无代理延迟加载
            设置为false表示立即加载
    session关闭报错--->
    Hibernate.initialize(对象) 初始化对象   有关联访问的需求


    浏览器->服务器->web应用->Servlet->事务biz->dao->db数据库
    db数据库->dao->biz->Servlet->jsp->服务器运行完后产生html->浏览器


    多对多关联关系 inverse属性一个false一个true  大部分主表false分表true
    项目表 pid pname
    雇员表 eid ename
    关系表 pid eid
    项目表的映射文件
    set集合 标签属性 name=集合 cascade (1)table="关系表"
        (2)key 字段=关系表项目外键
        many-to-many 类=雇员类 (3)字段=关系表雇员外键

    雇员表的映射文件
    set集合 标签属性 name=集合 (1)table="关系表"
        (2)key 字段=关系表雇员外键
        many-to-many 类=项目类 (3)字段=关系表项目外键





    左连接 left join
    from dept d left join d.emps e order by d.deptno
    d.emps是部门javaBean里的雇员对象集合 通过映射这样写hql语句 找关联的集合
    返回值List<Object[]> result  
    数组里两个对象result[0],result[1]
    object[]==> [部门,雇员]

    迫切左连接 left join fetch
    from dept d left join fetch d.emps e order by d.deptno
    返回值List<Dept> dept
    把查询到的雇员放进了dept对象的雇员集合里

    左外连接是左表全 右表补
    右外连接是左表补 右表全
    内连接两表必须匹配

    没有迫切右外连接
    返回值左表为主的对象集合 不会出现集合对象为null后被右表赋值


    hql=select e from Emp e join e.dept d where d.dname=?
    hql=select e from Emp e,Dept d where d=e.dept and d.dname=?

    hql=from Emp e where e.dept.dname=:dname //隐式内连接
    hql=select e.empno,e.ename,e.dept.dname from Emp e where ... ;


    命名查询
    配置文件中
    <query name="findEmpByJob">
       <![CDATA[
        from Emp e where e.job=:job
       ]]>
    </query>
    Dao层
    getSession().getNamedQuery("findEmpByJob").setParameter("job",arg).list();


    注解部分===================================================================>


    @Entity   把一个类声明为持久化类  通用
    //@org.hibernate.annotations.Entity(dynamicUpdate=true)     添加动态更新

    @Table(name="sys_user")     映射到指定数据库中的表

    @Proxy(lazy=true)          true懒加载  false立刻加载   

    主键
    get方法上面添加@Id
    自增@GeneratedValue(strategy=?)
    (oracle的序列
    自增@GeneratedValue(strategy=sequence,generator="seq")
    @SequenceGenerator(name="seq",sequenceName="数据库中的序列名SEQ_ID",allocationSize=3)
    //allocationSize数值影响序列,主键+3增长)
    @Column(name="")
    属性          get方法上面添加 规范


    临时属性 和数据库无关的属性    注解后不会进行映射
    get方法上添加@Transient

    @OneToMany(cascade=

    {CascadeType.ALL},fetch=LAZY,targetEntity=House.class,mappedBy="users")
    //mappedBy="users"类似invers

    @ManytoOne(fetch=lazy,targetEntity=User.class)
    @joinColumn(name=多对一关联字段user_id)

    多对多,   proemp为关系表 pro项目表 emp雇员表   关系表中只有项目表主键id和雇员表主键id

    以下是项目表的持久类

    @ManytoMany(cascade=cascadeType.all , fetch=fetchType=lazy)

    @joinTable(name="关系表" ,

    joinColumns={ @joinColumns(name="在关系表中的项目表主键") } ,

    inverseJoinColumns={@joinColumn(name="在关系表中雇员主键")} )


    注解命名查询  写在javaBean里面
    @NamedQuery(name="sql名字" query="sql语句")


    开启二级缓存========================================================>  jar:commons-logging  ,   ehcache
    cache.use_second_level_cache=====true
    propertie=====cache.provider_class    value======org.hibernate.cache.EhCacheProvider


    持久化类的配置文件中
    <cache usage="read-only"/> //只读 效率高
    nonstrict-read-write      //适用于低频率变化的数据,极少被修改,允许偶尔脏读
    read-write                //经常读少改,防止脏读
    transactional             //支持事务,效率低,事务隔离级别高,防止脏读和不可重复读

    二级缓存的命名查询
    在配置文件中添加property name=cache.use_query_cache  = true
    语句中查询session.createquery("from tableName").setCacheable(true).list();


    离线查询  DetachedCriteria ==========================================================================

    (1)DAO层的离线查询,首先传入参数DetachedCriteria对象.getExecutableCriteria(HibernateSessionFactory.getSession()).list()

    (2)业务层

                DetachedCriteria detachedCriteria=DetachedCriteria.forClass(House.class,"h")
                                .createAlias("h.user", "u")                      
                                .add(Restrictions.eq("u.uid", 3))                   //设置条件  uid等于3的数据
                                .add(Restrictions.ilike("h.contents", "333",MatchMode.ANYWHERE))   //MatchMode类型设置关键字的用法 此处设置333出现在任何下标                                    ilike()方法不区分大小写  anywhere=任意位置 start=以这个关键字开头的 end=关键字结束
          //                      .getExecutableCriteria(HibernateSessionFactory.getSession()).list();

       List list=dao.findHouse(detachedCriteria);
    (3)测试            for(Object obj:list){
                        House h=(House)obj;
                        System.out.println(h.gethMid()+h.getContents());
                    }
             

    离线子查询   DetachedCriteria对象为基础的第二次查询
    //            DetachedCriteria priceAvg=DetachedCriteria.forClass(House.class)
    //                                        .setProjection(Property.forName("price").avg());
    //            HibernateSessionFactory.getSession().createCriteria(House.class).
    //                                        add(Property.forName("price").gt(priceAvg)).list();

    //三表连接查询

     DetachedCriteria.forClass(District.class,"d")                  //主表区district 别名d
                                .createAlias("d.streets","s",CriteriaSpecification.LEFT_JOIN)     //持久类d表中的streets街道对象的集合 别名s 左连接
                                .createAlias("s.houses","h",CriteriaSpecification.LEFT_JOIN)    //持久类s表中的houses房屋对象的集合 别名h 左连接
                                .setProjection(Projections.projectionList()           //设置投影   投影集合
                                        .add(Property.forName("h.price").avg().as("priceAvg"))          //添加条件 房屋表中的租金平均值 字段别名priceAvg
                                        .add(Property.forName("d.dname").group())          //添加条件  按区表的地区名字段分组查询
                                ).addOrder(Order.asc("priceAvg"));              //设置投影集合的排序方式  按房屋表的租金升序排列
               


               

  • 相关阅读:
    毕设问题02-index.jsp跳转html问题
    毕设问题01-html中引入公共部分代码
    毕设开篇
    object和大括号自定义对象
    数组js
    function 方法的使用
    JavaScript01
    CSS属性
    听说不能改日期了
    获取时间
  • 原文地址:https://www.cnblogs.com/m97i/p/7407407.html
Copyright © 2011-2022 走看看