ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:22.25KB ,
资源ID:8339274      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/8339274.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(hibernate.docx)为本站上传会员【xrp****65】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

hibernate.docx

1、User.hbm.xml文件的内容如下:                                                                                                                         {call getUserList()}     在该文件中需注意中的这段代码,调用的存储过程在其中定义,并定义了调用存储过程后将记录组装

4、成User对象,同时对记录的字段与对象的属性进行相关映射。 public class ProcTest {     /** *//**      * @param args      */     public static void main(String[] args) throws Exception {         ProcTest proc = new ProcTest();         Session session = HibernateSessionFactory.getSession();         proc.testProcQuery(sess

5、ion);         proc.testProcUpdate(session);         System.out.println("update successfully");                 proc.testProcInsert(session);         System.out.println("insert successfully");                 proc.testProcDelete(session);         System.out.println("delete successfully");   

6、      session.close();     }         /** *//**      * 测试实现查询的存储过程      * @throws Exception      */     private void testProcQuery(Session session) throws Exception {         //查询用户列表         List list = session.getNamedQuery("getUserList").list();         for (int i = 0; i < list.size(); i

7、) {             User user = (User) list.get(i);                System.out.print("序号: " + (i+1));             System.out.print(", userid: " + user.getUserid());             System.out.print(", name: " + user.getName());             System.out.println(", blog: " + user.getBlog());         }  

8、   }         /** *//**      * 测试实现更新的存储过程      * @throws Exception      */     private void testProcUpdate(Session session) throws Exception {         //更新用户信息         Transaction tx = session.beginTransaction();         Connection con = session.connection();         String procedure = "{c

9、all updateUser(?, ?, ?)}";         CallableStatement cstmt = con.prepareCall(procedure);         cstmt.setString(1, "陈xx");         cstmt.setString(2, "         cstmt.setString(3, "sterning");         cstmt.executeUpdate();         mit();     }     /** *//**      * 测试实现插入的存储过程      * @thro

10、ws Exception      */     private void testProcInsert(Session session) throws Exception {         //创建用户信息         session.beginTransaction();         PreparedStatement st = session.connection().prepareStatement("{call createUser(?, ?, ?)}");         st.setString(1, "amigo");         st.setStr

11、ing(2, "阿蜜果");         st.setString(3, "         st.execute();         session.getTransaction().commit();     }         /** *//**      * 测试实现删除的存储过程      * @throws Exception      */     private void testProcDelete(Session session) throws Exception {         //删除用户信息         session.begin

12、Transaction();         PreparedStatement st = session.connection().prepareStatement("{call deleteUser(?)}");         st.setString(1, "amigo");         st.execute();         session.getTransaction().commit();     } }    在本类中,调用查询类存储过程时,调用session.getNamedQuery("…")方法来获得User.hbm.xml中配置的查询存储过程。

13、在其余的存储过程调用的测试中,首先通过hibernate的session获得connection,然后调用connection对象的相应方法来实现存储过程的调用。 该类的执行结果如下: Hibernate: {call getUserList()} 序号: 1, userid: ant, name: 蚂蚁, blog: [url] 序号: 2, userid: beansoft, name: bean, blog: [url] 序号: 3, userid: sterning, name: 似水流年, blog: [url] 序号: 4, userid: tom, name: tom

14、 blog: [url] update successfully insert successfully delete successfully 五.总结    本例提出了在hibernate3中调用mysql的存储过程的实现方案,从本例可以看出,hibernate提供了在*.hbm.xml中配置调用存储过程,并通过向用户提供session.getNamedQuery(“…”)方法来调用配置的调用查询相关的存储过程的方法,另外,hibernate还提供了取得sql的connection的方法,从而能够通过connection中存储过程调用相关的方法来实现存储过程的调用。 DamY

15、ankee 2007-12-13 18:44 [url] DamYankee 2007-12-15 15:48 Hibernate 要点 1. 三W What, Why, When 什么是, 为什么, 什么时候         what:是一个 OR Mappming(O Object 对象 R relative 关系数据库 映射) 框架(framework)         why:         把一个对象的人 分解成一张横的表的几列         Person => id, name, age         根据对象自动生成对应的关系数据库的 SQL, 可以简化

16、Java 数据库开发, 代替 JDBC 来实现持久化(Persistence).         when:         1) 必须有明确的对象设计的时候才能用 Hibernate.         2) 数据库是用大量的存储过程实现的 不能用 Hibernate !!!         3) 如果多表查询, 也要慎重 Hibernate, 查询顺序不可预料(createSQLQuery(手写查询语句))         2. 怎么用         1) 全局配置信息被 Configuration 类解析(配置解析器)          a) 怎么连接数据库    

17、     hibernate.cfg.xml         获取数据库连接的参数(URL, username, password)         方言 (Dialect) 为了对不同的数据库生成相应的 SQL          b) 有那些映射文件需要处理 Configuration 类 Configuration类负责管理 Hibernate 的配置信息。Hibernate 运行时需要 获取一些底层实现的基本信息,其中几个关键属性包括: 数据库URL 数据库用户 数据库用户密码 数据库JDBC驱动类 数据库dialect,用于对特定数据库提供支持,其中包含

18、了针对特定数据库特性 的实现,如Hibernate数据类型到特定数据库数据类型的映射等。 使用 Hibernate 必须首先提供这些基础信息以完成初始化工作,为后继操作做好准 备。这些属性在hibernate配置文件(hibernate.cfg.xml )中加以设 定. 调用: Configuration config = new Configuration().configure(); 时,Hibernate会自动在当前的 CLASSPATH 中搜寻 hibernate.cfg.xml文件并将其读 取到内存中作为后继操作的基础配置。Configuration 类一般只有

19、在获取 SessionFactory 时需要涉及,当获取 SessionFactory 之后,由于配置信息已经由 Hibernate 维护并绑定 在返回的SessionFactory之上,因此一般情况下无需再对其进行操作。 示例的配置文件:         

20、e-configuration> true         classiccars                         jdbc:derby://localhost:1527/myeclipse;create=true        

21、ty>         org.hibernate.dialect.DerbyDialect         org.apache.derby.jdbc.ClientDriver         myeclipse                        

22、resource="dao/User.hbm.xml" />         2) 实体类(POJO Plain and Old Java Ojbect) JavaBean 的要求         值对象, 只有 getter, setter, 没有业务方法         什么样的对象需要映射         public class User implements java.io.Serializable {                 private int id;                 private String

23、username;                 getxxx                 setxxx         }                 a) 要有主键字段.                 b) 可序列化(缓存, 有时候在内存, 有时候放硬盘)         3) 实体映射文件 实体名.hbm.xml         告诉 Hibernate 怎么来做对象映射. 向哪个表插入数据, 每个属性的数据类型, 以及对应数据表里的列名.         一个文件配置多个实体类也是可以的, 一般来说是一个实体一个配置文件.

24、0" encoding="utf-8"?>                         

25、                                                                                                                      

27、                                                                 

28、rnate-mapping> 多对多几乎没人用, 一对一常用, 一对多比较常用. 3. SessionFactory 和 Session         SessionFactory ==> 等价于 DriverManager, 只需要一个. SessionFactory 负责创建 Session 实例。可以通过 Configuation 实例构建 SessionFactory: SessionFactory sessionFactory = config.buildSessionFactory(); Configuration实例config会根据当前的配置信息,构造 S

29、essionFactory实例并返回。 SessionFactory 一旦构造完毕,即被赋予特定的配置信息。也就是说,之后 config 的任 何变更将不会影响到已经创建的 SessionFactory 实例(sessionFactory)。如果需要 使用基于改动后的 config 实例的 SessionFactory,需要从 config 重新构建一个 SessionFactory实例。 Session ==> 等价于 JDBC中的 Connection Session实例通过SessionFactory实例构建: Session session = sessionFa

30、ctory.openSession(); 完整示例代码: // 0. 加载配置和驱动等, 生成 Session 工厂(相当于连接池或者 DriverManager) Configuration config = new Configuration().configure(); SessionFactory sessionFactory = config.buildSessionFactory();         // 1. 打开 session         Session session = sessionFactory.openSession();         /

31、/ 2. 打开事务(Transaction)         org.hibernate.Transaction tran = session.beginTransaction();         // 3. 生成实体类         User bean = new User();         // 4. 给 bean 赋值         bean.setUsername("zhangsan");         // 5. 保存或者更新(并没有立即保存到数据)         session.save(bean);         // 6. 提交事务(真正的保存

32、或者更新数据)         mit();         // 7. 做查询, 首先创建查询对象         String queryString = "from User";// HSQL 操作的是实体, 不是数据库表格         Query query = getSession().createQuery(queryString);         // 8. 读取查询结果         java.util.List result = query.list(); 4. Transaction 事务 Hibernate 是 JDBC 的轻量级封装,

33、本身并不具备事务管理能力。在事务管理层, Hibernate将其委托给底层的JDBC或者JTA,以实现事务管理和调度功能。 Hibernate的默认事务处理机制基于JDBC Transaction。我们也可以通过配置文定采用JTA作为事务管理实现:          net.sf.hibernate.transaction.JTATransactionFactory 将事务管理委托给 JDBC 进行处理无疑是最简单的实现方式,Hibernate 对于 JDBC 事务的封装也极为简单。 我们来看下面这段代码:       session = sessionFactory.openSession();       Transaction tx = session.beginTransaction();      ……       mit(); 从JDBC层面而言,上面的代码实际上对应着:         Connection dbconn = getConnection();   

35、    dbconn.setAutoCommit(false);      ……       mit(); 就是这么简单,Hibernate并没有做更多的事情(实际上也没法做更多的事情),只 是将这样的JDBC代码进行了封装而已。 5. 查询对象 Query(Hibernate 参考文档的第11章) 和 HSQL      普通查询如上所示            带参数的查询(相当于 PreparedStatement)            q = session.createQuery("from User u where u.name= :name");

36、     q.setString("name", "张三");      q = session.createQuery("from User u where u.name= ?");      q.setString(0, "张三");           Native SQL 方式(用于特定的数据库的查询)      List cats=session.createSQLQuery( "SELECT {cat.*} FROM CAT {cat} WHERE ROWNUM<10", "cat", Cat.class ).list(); Listcat s=session

37、createSQLQuery( "SELECT {cat}.ID AS {cat.id}, {cat}.SEX AS {cat.sex},"+ "{cat}.MATE AS{cat.mate}, {cat}.SUBCLASSAS {cat.class},..."+ "FROM CAT {cat} WHERE ROWNUM<10", "cat", Cat.class ).list();           过滤重复记录:      select distinct cat.name from Cat cat 6. 一对多, 多对一, 多对多中的懒惰加载 Lazy, Fe

38、tch 新版本的Hibernate在处理Session的时候已经内置了延迟加载机制,只有在真正发生数据库操作的时候,才会从数据库连接池获取数据库连接. 这会带来问题.     例如一对多:     ...             

39、                   class="org.hibernate.sample.TAddress"               />                 示例代码:         Query q = getSession().createQuery("from User"); List userList = q.list();    TUser user =(TUser)userList.get(0); System.out.println("User name => "+user.getName()); Set hset

40、 user.getAddresses(); session.close();//关闭Session   TAddress addr = (TAddress)hset.toArray()[0]; System.out.println(addr.getAddress()); 运行时抛出异常: LazyInitializationException - Failed to lazily initialize a collection - no session or session was closed 如果我们稍做调整,将session.close放在代码末尾,则不会发

41、生这样的问题。但是一般 DAO 执行结束后即关闭了 session. 这意味着,只有我们实际加载user关联的address时,Hibernate才试图通过 session从数据库中加载实际的数据集,而由于我们读取address之前已经关闭了 session,所以报出session已关闭的错误。 解决办法: 1) Hibernate.initialize方法可以通过强制加载关联对象实现这一功能: Hibernate.initialize(user.getAddresses()); session.close(); 2) 用 HQL 里面的 fetch from User

42、 fetch all properties 3) lazy="false" 7. Hibernate 分页 int currentPage = 0;// 当前页 int pageSize = 10;// 显示记录数 String queryString = "from User"; Query queryObject = getSession().createQuery(queryString); // 设置从哪里读 queryObject.setFirstResult((currentPage - 1) * pageSize); // 设置一共读几行 queryObject.setMaxResults(pageSize); return queryObject.list();

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服