Java蜘蛛人 欢迎大家

欢迎大家 来到我的blog , 如果我身边的朋友 有什么不懂可以直接来问我 我会细心的帮助你的. 如果网络上的朋友有什么不懂的 可以加我Java蜘蛛人 QQ48187537
posts - 54, comments - 192, trackbacks - 0, articles - 1

dynamic-insert="true" 如果插入的值不为空 他才会把他列入插入语句中  (作用:节约资源)


<hibernate-mapping package="mypack"> <class>元素中定义的类来自mypack包

 

<property name="sex" access="field"/> 不会直接调用age的set,get方法. 避免get,set方法里的逻辑值.

 


<class name="xxx.xxx" table="xxxx" select-before-update=true> 如果设置成true  如果不经常修改java 对象的属性 就设为true   当对象没有被修改的时候 他不会执行update 语句  select-before-update=true 可以避免update 盲目的触发一个触发器

 

saveOrUpdate 如果是临时对象就用save  如果是游离对象才建议用saveOrUpdate 如果传递进来的是持久化状态  就直接返回
他会自动判断是游离状态还是临时状态  如果oid=null version=null等.那就是临时状态.

 

hibernate与触发器 协同工作 ..  假如save 一个数据 会触发一个触发器 那就会导致 session缓存的内容和数据库的内容不协调(不一样)
 解决方法 : 在save后 调用flush()清除缓存 然后调用refresh() 重新到数据库当中加载刚才被保存的xxxx对象
select-before-update=true 可以避免update 盲目的触发一个触发器

<set batch-size="3">  批量查询  3句查询语句 一起初始化..

映射 一对多的关联

需要在 xxx.hbm.xml里添加

<many-to-one
name="customer"  //用户表的实例
columb="CUSTOMER_ID"
class="mypack.Customer"
cascade="save-update"  保存或者更新customer的临时对象
not-null="true"
/>

  //建立用户表和订单表外键的映射

//例子在HibernateDemo16:

映射一对多双向自身关系

  //创建食物类.对象
  Categories foodCategory=new Categories(null,"food",new HashSet());
  //创建水果类.对象
  Categories fruitCategory=new Categories(null,"fruit",new HashSet());
  //创建蔬菜类 对象
  Categories vegetableCategory=new Categories(null,"vegetable",new HashSet());
  //创建苹果 对象
  Categories appleCategory=new Categories(null,"apple",new HashSet());
  //创建橘子对象
  Categories orangeCategory=new Categories(null,"Orange",new HashSet());
  //创建西红柿 对象
  Categories tomatoCategory=new Categories(null,"tomato",new HashSet());
  
  
  //建立食物类.和水果类的关系
     foodCategory.getCategorieses().add(fruitCategory);
     fruitCategory.setCategories(foodCategory);
    
     //建立食物跟蔬菜关系
     foodCategory.getCategorieses().add(vegetableCategory);
     vegetableCategory.setCategories(foodCategory);
    
     //建立水果和苹果的关系
     fruitCategory.getCategorieses().add(appleCategory);
     appleCategory.setCategories(fruitCategory);
    
     //建立水果和橘子的关系
     fruitCategory.getCategorieses().add(orangeCategory);
     orangeCategory.setCategories(fruitCategory);
    
     //建立西红柿跟水果的关系
     fruitCategory.getCategorieses().add(tomatoCategory);
     tomatoCategory.setCategories(fruitCategory);
    
    //建立蔬菜和西红柿的关系
     tomatoCategory.setCategories(vegetableCategory);
     vegetableCategory.getCategorieses().add(tomatoCategory);
    
     fruitCategory.getCategorieses().remove(tomatoCategory);
    
       Session session=HBF.getSession();
       session.save(foodCategory);
       session.beginTransaction().commit();
       session.close();

 

 

 


//例子在HibernateDemo14:

  //双向修改
  Pp pp1=new Pp();
  pp1.setPname("aaaaaa");
  pp1.setCid(new Long(27));
  Catelog cla=new Catelog();
  cla.setCname("bbbbb");
  cla.setId(new Long(16));
     pp1.setCatelog(cla);

 


  
//单项修改
//  Catelog cla=new Catelog();
//  cla.setCname("1111111111");
//  cla.setId(new Long(16));
//   dao.session.saveOrUpdate(cla);
  
     CPDAO dao=new CPDAO();
      dao.session.update(pp1);
     dao.session.beginTransaction().commit();
     dao.closeSession();

 

 

//例子在HibernateDemo14:
查询:
  String sql="from Catelog c where c.id=2";
     Query q=dao.session.createQuery(sql);
    
     Catelog cla=  (Catelog)q.uniqueResult();
    
      Set<Pp> set= cla.getPps();
     
     Iterator<Pp> it = set.iterator();
     while(it.hasNext())
     {
      Pp p=it.next();
      System.out.println(p.getPname()+"   "+p.getCid());
     }

 

     
//例子在HibernateDemo14:

 //从表查询
     String sql="from Pp p where p.catelog.id=16";
     Query q=dao.session.createQuery(sql);
    
     List<Pp> list = q.list();
    
    for(Iterator<Pp> it = list.iterator();it.hasNext();)
    {
     Pp p=it.next();
     System.out.println(p.getCatelog().getCname()+"     "+p.getPname());
    }
    
     dao.session.close();
 }

 


HQL 查询

 public List QueryName(String name)
 {
  return session.createQuery("from Ord as c where Ord_number=:sname")
 .setString("sname",name).list(); 
 }

  然后  List  list=dao.QueryName("b");


QBC 查询
 //创建一个Criteria 对象  然后把Ord 加载进去
    Criteria criteria=dao.session.createCriteria(Ord.class);
    Criterion criterion1=Expression.like("ord_number","T%");
   
   
    criteria.add(criterion1);
   
    List result=criteria.list();
      

QBE  查询

 

      Ord entity=new Ord();
      entity.setOrdNumber("Linda_Ord001");
    Criteria criteria=dao.session.createCriteria(Ord.class);
   
    Criterion criterion=Example.create(entity);
   
    criteria.add(criterion);
   
    List result=criteria.list();

 

HQL 排序
 Query q=dao.session.createQuery("from Ord as o order by ord_number");


只有注册用户登录后才能发表评论。


网站导航: