dynamic-insert="true" 如果插入的值不為空 他才會把他列入插入語句中 (作用:節(jié)約資源)
<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 當對象沒有被修改的時候 他不會執(zhí)行update 語句 select-before-update=true 可以避免update 盲目的觸發(fā)一個觸發(fā)器
saveOrUpdate 如果是臨時對象就用save 如果是游離對象才建議用saveOrUpdate 如果傳遞進來的是持久化狀態(tài) 就直接返回
他會自動判斷是游離狀態(tài)還是臨時狀態(tài) 如果oid=null version=null等.那就是臨時狀態(tài).
hibernate與觸發(fā)器 協同工作 .. 假如save 一個數據 會觸發(fā)一個觸發(fā)器 那就會導致 session緩存的內容和數據庫的內容不協調(不一樣)
解決方法 : 在save后 調用flush()清除緩存 然后調用refresh() 重新到數據庫當中加載剛才被保存的xxxx對象
select-before-update=true 可以避免update 盲目的觸發(fā)一個觸發(fā)器
<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:
映射一對多雙向自身關系
//創(chuàng)建食物類.對象
Categories foodCategory=new Categories(null,"food",new HashSet());
//創(chuàng)建水果類.對象
Categories fruitCategory=new Categories(null,"fruit",new HashSet());
//創(chuàng)建蔬菜類 對象
Categories vegetableCategory=new Categories(null,"vegetable",new HashSet());
//創(chuàng)建蘋果 對象
Categories appleCategory=new Categories(null,"apple",new HashSet());
//創(chuàng)建橘子對象
Categories orangeCategory=new Categories(null,"Orange",new HashSet());
//創(chuàng)建西紅柿 對象
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 查詢
//創(chuàng)建一個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");