hibernate第二天

来源:互联网 发布:淘宝百信大药房旗舰店 编辑:程序博客网 时间:2024/05/31 13:16

hibernate编写:
1 导入jar包:
 hibernate3.jar
 commons-logging.jar
 commons-collection.jar
 dom4j.jar
 log4j.jar
 ehcache.jar
 antlr.jar
 cglib.jar
2 创建sql脚本,以及表对应的实体类
3 编写src/hibernate.cfg.xml
 数据库连接信息
  connection.url
  connection.driverClass
  connection.username
  connection.password
 数据库方言
  dialect
 映射文件路径
  <mapping resource="/">
 额外属性配置
  show_sql=true
4 编写具体的映射文件信息
 <class name="" table="">
  <id  name="" column="">
  </id>
  <property name="" column=""/>
 </class>
5 编写具体操作类
 //创建配置类对象,其configure方法,是读取src/hibernate.cfg.xml文件的内容
 Configuration cfg = new Configuration().configure();
 //由配置类对象,封装配置文件中的核心配置信息为SessionFactory
 SessionFactory sf = cfg.buildSessionFactory();
 //由工厂获取session产品,session为了维护一系列业务相关操作
 Session session = sf.openSession();
 //创建当前事务对象,为了事务的原子性
 Transaction tx = session.beginTransaction();

 //通过session对象,持久化操作
 session.***();

 //控制事务的提交
 tx.commit();

 

session的方法:
 save(Object o)   --临时对象《内存信息-存入-》DB》
  要求o对象没有主键。
 update(Obejct o)  --持久化对象《内存信息-更新-》DB》
  要求o对象必须包含主键值(必须数据库中存在的)
  同时o对象的其他属性,如果需要修改的,则为新值
  不需要修改的,则必须和数据库的原有字段值一样
 delete(Object o)  --持久化对象《内存信息-删除-》DB》
  要求对象必须包含主键值(必须数据库中存在的)
  其他属性,可指定也可不指定
 createQuery(String hql)
  查询所有:from 类名
  查询某几条信息: from 类名 where 属性名=值

 

hibernate id生成策略:
1 assigned
要求程序员在save方法调用之前,手动对需要持久化的对象赋主键值
 <id name="pid" column="pid">
  <generator class="assigned"></generator>
 </id>
 《===》
 <id name="pid" column="pid">
 </id>


一对一主键共享:
1 实体类必须是双向关联
public class Boss{
 private Company c;
}
public class Company{
 private Boss b;
}
2 映射文件中也必须是双向关联
<class name="Boss">
 ...
 <one-to-one name="c" cascade="all">
</class>
<class name="company">
 ...
 <one-to-one name="b">
</class>
3 在测试类中传递参数时,必须也建立双向关联
public class test{
 void testAdd(){
  Boss b = new Boss();
  Comapany c = new Company(...);
  b.setCompany(c);
  c.setBoss(b);
  ....
 }
}

 


select boss0_.bid as bid2_, boss0_.bossName as bossName0_2_, boss0_.birthday as birthday0_2_, company1_.cid as cid0_, company1_.cname as cname1_0_, company1_.caddress as caddress1_0_, boss2_.bid as bid1_, boss2_.bossName as bossName0_1_, boss2_.birthday as birthday0_1_ from boss_pk boss0_ left outer join company_pk company1_ on boss0_.bid=company1_.cid left outer join boss_pk boss2_ on company1_.cid=boss2_.bid where boss0_.bid=?

原创粉丝点击