hibernate学习

一。  (级联)关系

    1)。cascade 及联
            all: 所有情况下均进行关联操作,即save-update和delete。
           none: 所有情况下均不进行关联操作。这是默认值。 
           save-update: 在执行save/update/saveOrUpdate时进行关联操作。 
           delete: 在执行delete 时进行关联操作。
           all-delete-orphan: 当一个节点在对象图中成为孤儿节点时,删除该节点
    
    2)。inverse 。 反转控制
    
        inverse的值是boolean值,也就是能设置为true或false。 
        如果一方的映射文件中设置为true,说明在映射关系(一对多,多对多等)中让对方来维护关系。
        如果为false,就自己来维护关系。默认值是true。 
        并且这属性只能在一端设置。比如一对多,这个一端。也就是在有set集合的这方设置。
    
        维护级联的关系,也就是说如果如果让对方维护关系,
        则自己方的级联将会失效,对方设置的级联有用,
        如果自己维护关系,则自己方的级联会有用,但是对方设置的级联就会失效。
    
    3)。注意
        3.1、inverse的权限在cascade之上,意思就是cascade是否有用,还得看inverse这个属性
        
        3.2、inverse的作用:在映射关系中,让其中一方去维护关系,好处就是能提高性能,不用重复维护。维护两种关系,看下
        
            3.2.1 控制级联关系是否有效
                cascade是否有效,就得看inserve的值,如果是自己方来维护关系,那么cascade就有效,反之无效
            3.2.2 控制外键关系
                这个就得通过让自己拥有对方的实例引用(可能是set,也可能就是单个存储对象的变量),这样才具备控制外键关系的能力,然后看inserve的值,
        
            3.3、inverse只能在一的一方设置,并且默认值是true,也就是说,不设置inverse时,默认是让多的一方去维护关系,这种一般是在双向、外键关系中才设置inverse的值,如果是单向的,就只有一方有维护关系的权利。
        
            3.4、在以后的代码中,先要搞清楚关系,才能写出性能最好的代码。通过学习这两个属性,在测试代码中,就不必那么麻烦了,只需要考虑维护关系的一方,另一方就会自动保存了。

二: query对象。  hql

    它是一个面向对象的Hibernate Query表示。 Query的对象可以通过Session接口调用createQuery()方法。
    查询接口提供了很多方法。下面给出了一些最常用的方法:
    
    public int executeUpdate() 用于执行更新或删除查询。
    public List list() 将关系的结果作为列表返回。
    public Query setFirstResult(int rowno) 指定从哪里检索记录的行号。
    public Query setMaxResult(int rowno) 指定从关系(表)中检索记录的行号。
    public Query setParameter(int position, Object value) 它将该值设置为JDBC样式查询参数。
    public Query setParameter(String name, Object value) 它将该值设置为命名查询参数。
        
    2.1 查所有
        Query query=session.createQuery("from Person");
        List list=query.list();
    
    2.2 分页查
        Query query=session.createQuery("from Person");  
        query.setFirstResult(5);  
        query.setMaxResult(10);  
        List list=query.list();

    2.3 更新
        Query q=session.createQuery("update Person set name=:n where id=:i");  
        q.setParameter("n","jack");  
        q.setParameter("i",111);  
        
        int status=q.executeUpdate();
        System.out.println(status);
    
    2.4 删除
        Query query=session.createQuery("delete from Person where id=100");  
    
    2.5 通过HQL调用avg(),min(),max(),count()等聚合函数。
        Query q=session.createQuery("select sum(age) from Person");  
        List<Integer> list=q.list();  
        System.out.println(list.get(0));
    
        Query q=session.createQuery("select max(age) from Person");
    
三 Criteria对象。
        Criteria接口提供了许多方法来指定条件。 
        可以通过调用Session接口的createCriteria()方法获得Criteria对象。

    常用的Criteria接口方法如下:
        public Criteria add(Criterion c) 用于添加限制(条件)。
        public Criteria addOrder(Order o) 指定排序顺序。
        public Criteria setFirstResult(int firstResult) 指定要检索的第一个记录数。
        public Criteria setMaxResult(int totalResult) 指定要检索的记录总数。
        public List list() 返回包含对象的列表。
        public Criteria setProjection(Projection projection) 指定投影。

    Crietria c=session.createCriteria(Emp.class);
    List list=c.list();
    分页查
    Crietria c=session.createCriteria(Emp.class);  
    c.setFirstResult(10);  
    c.setMaxResult(20);  
    List list=c.list();


    Restrictions类提供可用作标准的方法。 常用的Restrictions类方法如下:
    
    public static SimpleExpression lt(String propertyName,Object value) 将给定属性的约束设置为小于约束。
    public static SimpleExpression le(String propertyName,Object value) 设置给定属性的小于或等于约束。
    public static SimpleExpression gt(String propertyName,Object value) 设置给定属性的大于约束。
    public static SimpleExpression ge(String propertyName,Object value) 设置给定属性的大于或等于约束。
    public static SimpleExpression ne(String propertyName,Object value) 对给定的属性设置不相于约束。
    public static SimpleExpression eq(String propertyName,Object value) 设置约束与给定属性相等。
    public static Criterion between(String propertyName, Object low, Object high) 设置约束之间范围。
    public static SimpleExpression like(String propertyName, Object value) 将类似的约束设置为给定的属性。

    Crietria c=session.createCriteria(Person.class);  
    c.add(Restrictions.gt("age",20));
    List list=c.list();
    
    Order类代表排序顺序。常用的 类方法如下:
    public static Order asc(String propertyName) 适用于给定属性的基础上,按升序排列。
    public static Order desc(String propertyName) 适用于给定属性的基础上,按降序排列。
    
    //排序
    Crietria c=session.createCriteria(Person.class);  
    c.addOrder(Order.asc("age"));  
    List list=c.list();


// 瞬态, 游离态 , 持久态 , 

三  注解
    https://www.cnblogs.com/zzmb/p/7733677.html

    @Entity注释将此类标记为实体。
    @Table注释指定要保留此实体的数据的表名。 如果不使用@Table注释,hibernate将使用类名作为表名称bydefault。
    @Id注释标记此实体的标识符。
    @Column注释指定此属性或字段的列的详细信息。如果未指定@Column注释,则属性名称将用作列名称bydefault。    
    
四  缓存
    Session对象保存第一级缓存数据,第一级缓存默认情况下启用。 第一级缓存数据将不可用于整个应用程序。这是因为应用程序可以使用很多会话(Session)对象。
    SessionFactory对象保存二级缓存数据。 存储在第二级缓存中的数据将可用于整个应用程序。 但是我们需要明确地启用它,这是第二级缓存默认情况下不启用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值