




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Hibernate一.关系映射1.单表映射:a.public class User private Integer id; private String name; get/setb.xml: /配置主键的生成方式 c. hibernate.cfg.xml配置相应数据库和映射, show_sql=true;使console的sql语句可见d.采取junit进行测试:一般通过junit的setUp方法初始化,通过tearDown释放资源,自动加载public class Client extends TestCase protected Session session; public Client(String name) super(name); protected void setUp() throws Exception Configuration config=new Configuration().configure();/创建Hibernate配置管理类,默认加载cfg.xml,若改名则用configure(new File(“src/hib.cfg.xml”);加上路径SessionFactory sessionFactory =config.buildSessionFactory();session= sessionFactory.openSession(); /是application和Hibernate交互接口 protected void tearDown() throws Exception if(session!=null) session.close(); public void testCreate()User user=new User();user.setName(hello);/自动加载 Transaction tr=null;/改变数据库数据的操作都要开启一个事物 try tr=session.beginTransaction(); session.save(user); mit(); catch(HibernateException e) /将自由状态变成持久状态e.printStackTrace(); if(tr!=null) tr.rollback(); public void testRetrieve() User user=(User)session.get(User.class, 122);/得到xml中的主键对应的对象 assertEquals(hello, user.getName();/使用断言精确判断,防止空格等因素public static Test suite() /junit的静态测试方法 TestSuite ts=new TestSuite(); Client cl=new Client(testCreate); ts.addTest(cl); return ts; e.session的load和get方法的区别:1.对象存在时,load返回实体代理类类型,get返回实体类 2对象不存在时:load抛出异常,get返回null(用于判断)f.实体对象的生命周期 1Transient自由状态:与Hibernate和数据库没有任何关系 2Persistent持久状态:纳入了Hibernate的Session实体对象管理的容器,session会复制实体对象的引用并进行脏数据检查,实体对象任何状态的改变最终都会同步到数据库。例如:Transaction trx=null; trx=session.beginTransaction(); User user=(User)session.load(User.class, 1); user.setName(nihao); mit();/ session.update(user);就不需要了 3Detached游离状态:(session.close(),与Hibernate和数据库没有任何关系,但是实体对象对应数据库的一条纪录。如:trx=session.beginTransaction();User user=new User(); user.setId(61);只要一个主键与数据库唯一标识 session.delete(user);/进行脏数据检查 mit(); /真正执行2Generator的主键产生方式: a. 由应用逻辑产生:*.setId(number); b.hilo:通过hi/lo(hign/low)算法产生 c.seqhilo:适合oracle没有自动增长只有序列,主键历史状态保存在sequence中 d.increment:按照数值顺序增长,由Hibernate维护,效率很高 e.identity:采用数据库提供的主键生成机制,并发性不好 f.sequence:支持oracle这种数据库 g.native:根据数据库适配器自动采用identity,hilo,sequence中的一种 h.uuid:由Hibernate基于128位唯一算法生成32位字符串作为主键,适合所有数据库,并发好 i:foreign:使用外部表的字段作为主键3.一对一通过主键关联(one to one)(数据库中将两个表id为主键并建立外联,只一表自动增长) a.public class User1 private Integer id; private String name; private Passport passport; .getter/setter /将passport最为成员属性 b.public class Passport private Integer id; private String serial; private User1 user; .getter/setter /将user作为成员属性 c. / type可以省略,由Hib匹配 /cascade主控方设置级联同步更新,delete,sava-update,none d. /主键有外表产生 user /值来自user成员属性 e.要想实现级联操作,要让级联双发都知道对方的存在:passport.setUser(user); user.setPassport(passport);tr=session.beginTransaction();session.save(user); mit();/才会起作用4.通过外键关联:many to one(环境:很多个人在一个组中且fk:user.group_id-group.id) a. public class Group private Integer id; private String name; b. public class User2 private Integer id; private String name;private Group group; .getter/setter; c. d. /关系由many端进行维护 e.关联双方:Group group=new Group(); group.setId(1); User2 user=new User2(); user.setName(hello); user.setGroup(group); /session.save()才行5.ont to many:(环境:一个人有多个地址,fk:address.user_iduser.id) a. public class MyUser private Integer id; private String name; private Set addresses; /对应多个值采用集合形式 b. public class Address private Integer id; private String address;private MyUser user; c. /必须通过外表的外键建立的关联 Inverse=”true”进行反转,由many端来维护关联 d. e.使用时要设置关联:MyUser user=new MyUser();user.setName(“hello”); Set addresses=new HashSet(); Address add1=new Address();add1.setZipcode(“241000”); add1.setUser(user); addresses.add(add1); user.setAddresses(addresses);二.HQL:特点:语法类似sql,使用面向对象的封装,直接返回对象或对象数组1查询整个实体对象(不加select)String hql=from com.mypack.User4; Query query=session.createQuery(hql); List lists=query.list(); for(int i=0;i lists.size();i+)User4 user=(User4)lists.get(i); System.out.println(user.getId(); 或者: for(Iterator iter=users.iterator();iter.hasNext();) User4 user=(User4)iter.next(); 2.查询单个属性(返回单个属性类型): hql=select from User4 u; query=session.createQuery(hql); List names=query.list();/执行查询 for(int i=0;inames.size();i+) String name=(String)names.get(i); 3.1查询多个属性返回对象数组的集合: hql=select ,u.age from User4 u; query=session.createQuery(hql); List names=query.list();/一步步转型 for(int i=0;inames.size();i+) Object object=(Object)names.get(i); String name=(String)object0; Integer age=(Integer)object1;3.2也可以将多个属性用单个属性替代: hql=select new User4(,u.age) from User4 u; query=session.createQuery(hql); List names=query.list(); for(int i=0;inames.size();i+) User4 user=(User4)names.get(i); 注:需要在User4中添加User4(name,age)构造函数,同时添加无参构造函数防止影响其他代码4.聚合函数也可以使用: hql=select count(*) from User4 u; query=session.createQuery(hql); int count=(Integer)query.list().get(0); System.out.println(count); 当确定只有唯一的一个结果: int count=(Integer)query.uniqueResult(); 代替5.更新(需要加上Transaction): Transaction tr=session.beginTransaction(); hql=update User4 u set =liming; query=session.createQuery(hql); query.executeUpdate(); mit();6.删除操作: Transaction tr2=session.beginTransaction(); hql=delete from User4 u where u.id=81; query=session.createQuery(hql); query.executeUpdate(); mit();7.1.?查询绑定: hql=from User4 u where =?;query=session.createQuery(hql); query.setString(0, lm); List user= query.list();7.2.引用占位符:查询绑定: hql=from User4 u where =:name and u.id=:id; query=session.createQuery(hql); query.setInteger(id, 84); query.setParameter(name, lm);推荐使用 List user1= query.list(); assertEquals(8, user1.size();8.分页查询功能: hql=from User4 u order by u.id; que
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 房屋旁空地租赁合同范本
- 2025版人工智能医疗诊断系统反诉答辩状合同
- 2025版酒店物业费代收代缴服务合同
- 2025房地产拍卖项目代理服务及佣金分成合同
- 2025导游劳动合同-定制旅游线路导游协议
- 2025版木材砍伐与运输一体化服务合同
- 字体设计及运营合同范本
- 幼儿园大厨聘用合同范本
- 专利权转让合同协议书6篇
- 建房人生安全合同协议书
- 2025云南咖啡购销合同范本
- 中职导游业务课件
- 园区卫生清洁管理办法
- 秋季养生课件中医
- 申报书范例《毛泽东思想和中国特色社会主义理论体系概论》在线课程申报书课件
- 闵行区2024-2025学年下学期七年级数学期末考试试卷及答案(上海新教材沪教版)
- DB1331∕T 034-2022 建筑与市政工程无障碍设计图集
- 中信集团协同管理制度
- 军事信息技术课件及教案
- 2025至2030年中国重组人促红素行业市场调查分析及投资发展潜力报告
- 2025-2030中国引航船行业市场发展趋势与前景展望战略研究报告
评论
0/150
提交评论