"> <" />
欢迎来到天天文库
浏览记录
ID:37918547
大小:46.50 KB
页数:5页
时间:2019-06-02
《Hibernate关系映射和HQL》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Hibernate一.关系映射1.单表映射:a.publicclassUser{privateIntegerid;privateStringname;get/set}b.xml://配置主键的生成方式2、string">c.hibernate.cfg.xml配置相应数据库和映射,show_sql=true;使console的sql语句可见d.采取junit进行测试:一般通过junit的setUp方法初始化,通过tearDown释放资源,自动加载publicclassClientextendsTestCase{protectedSessionsession;publicClient(Stringname){super(name);}protectedvoidse3、tUp()throwsException{Configurationconfig=newConfiguration().configure();//创建Hibernate配置管理类,默认加载cfg.xml,若改名则用configure(newFile(“src/hib.cfg.xml”));加上路径SessionFactorysessionFactory=config.buildSessionFactory();session=sessionFactory.openSession();}//是ap4、plication和Hibernate交互接口protectedvoidtearDown()throwsException{if(session!=null)session.close();}publicvoidtestCreate(){Useruser=newUser();user.setName("hello");//自动加载Transactiontr=null;//改变数据库数据的操作都要开启一个事物try{tr=session.beginTransaction();session.save5、(user);tr.commit();}catch(HibernateExceptione){//将自由状态变成持久状态e.printStackTrace();}if(tr!=null)tr.rollback();}publicvoidtestRetrieve(){Useruser=(User)session.get(User.class,122);//得到xml中的主键对应的对象assertEquals("hello",user.getName());}//使用断言精确判断,防止空格等因素pub6、licstaticTestsuite(){//junit的静态测试方法TestSuitets=newTestSuite();Clientcl=newClient("testCreate");ts.addTest(cl);returnts;}}e.session的load和get方法的区别:1.对象存在时,load返回实体代理类类型,get返回实体类2.对象不存在时:load抛出异常,get返回null(用于判断)f.实体对象的生命周期1.Transient自由状态:与Hibernate和数据库没有7、任何关系2.Persistent持久状态:纳入了Hibernate的Session实体对象管理的容器,session会复制实体对象的引用并进行脏数据检查,实体对象任何状态的改变最终都会同步到数据库。例如:Transactiontrx=null;trx=session.beginTransaction();Useruser=(User)session.load(User.class,1);user.setName("nihao");trx.commit();//session.update(user8、);就不需要了3.Detached游离状态:(session.close()),与Hibernate和数据库没有任何关系,但是实体对象对应数据库的一条纪录。如:trx=session.beginTransaction();Useruser=newUser();user.setId(61);只要一个主键与数据库唯一标识session.delete(user);//进行脏数据检查trx.commit();//真正执行2.Generator的主键产生方式:a.
2、string">c.hibernate.cfg.xml配置相应数据库和映射,show_sql=true;使console的sql语句可见d.采取junit进行测试:一般通过junit的setUp方法初始化,通过tearDown释放资源,自动加载publicclassClientextendsTestCase{protectedSessionsession;publicClient(Stringname){super(name);}protectedvoidse
3、tUp()throwsException{Configurationconfig=newConfiguration().configure();//创建Hibernate配置管理类,默认加载cfg.xml,若改名则用configure(newFile(“src/hib.cfg.xml”));加上路径SessionFactorysessionFactory=config.buildSessionFactory();session=sessionFactory.openSession();}//是ap
4、plication和Hibernate交互接口protectedvoidtearDown()throwsException{if(session!=null)session.close();}publicvoidtestCreate(){Useruser=newUser();user.setName("hello");//自动加载Transactiontr=null;//改变数据库数据的操作都要开启一个事物try{tr=session.beginTransaction();session.save
5、(user);tr.commit();}catch(HibernateExceptione){//将自由状态变成持久状态e.printStackTrace();}if(tr!=null)tr.rollback();}publicvoidtestRetrieve(){Useruser=(User)session.get(User.class,122);//得到xml中的主键对应的对象assertEquals("hello",user.getName());}//使用断言精确判断,防止空格等因素pub
6、licstaticTestsuite(){//junit的静态测试方法TestSuitets=newTestSuite();Clientcl=newClient("testCreate");ts.addTest(cl);returnts;}}e.session的load和get方法的区别:1.对象存在时,load返回实体代理类类型,get返回实体类2.对象不存在时:load抛出异常,get返回null(用于判断)f.实体对象的生命周期1.Transient自由状态:与Hibernate和数据库没有
7、任何关系2.Persistent持久状态:纳入了Hibernate的Session实体对象管理的容器,session会复制实体对象的引用并进行脏数据检查,实体对象任何状态的改变最终都会同步到数据库。例如:Transactiontrx=null;trx=session.beginTransaction();Useruser=(User)session.load(User.class,1);user.setName("nihao");trx.commit();//session.update(user
8、);就不需要了3.Detached游离状态:(session.close()),与Hibernate和数据库没有任何关系,但是实体对象对应数据库的一条纪录。如:trx=session.beginTransaction();Useruser=newUser();user.setId(61);只要一个主键与数据库唯一标识session.delete(user);//进行脏数据检查trx.commit();//真正执行2.Generator的主键产生方式:a.
此文档下载收益归作者所有