hibernat基础教程.ppt

上传人:仙人指路1688 文档编号:2973630 上传时间:2023-03-06 格式:PPT 页数:178 大小:2.63MB
返回 下载 相关 举报
hibernat基础教程.ppt_第1页
第1页 / 共178页
hibernat基础教程.ppt_第2页
第2页 / 共178页
hibernat基础教程.ppt_第3页
第3页 / 共178页
hibernat基础教程.ppt_第4页
第4页 / 共178页
hibernat基础教程.ppt_第5页
第5页 / 共178页
点击查看更多>>
资源描述

《hibernat基础教程.ppt》由会员分享,可在线阅读,更多相关《hibernat基础教程.ppt(178页珍藏版)》请在三一办公上搜索。

1、Hibernate-对象/关系映射,第三讲 Hibernate框架,要求:熟悉Java、SQL、JDBC,掌握面向对象的开发方法。课程目标:理解O/R Mapping原理,掌握Hibernate开发的相关知识,并能使用Hibernate进行实际项目开发。,一、要求与目标,模型不匹配(阻抗不匹配)Java面向对象语言,对象模型,其主要概念有:继承、关联、多态等;数据库是关系模型,其主要概念有:表、主键、外键等。解决办法1、使用JDBC手工转换。2、使用ORM(Object Relation Mapping对象关系映射)框架来解决,主流的ORM框架有Hibernate、TopLink、OJB。,二

2、、引入,三、O/R Mapping介绍,ORM的全称是Object/Relation Mapping,即对象/关系映射。ORM也可理解是一种规范,具体的ORM框架可作为应用程序和数据库的桥梁。面向对象程序设计语言与关系数据库发展不同步时,需要一种中间解决方案,ORM框架就是这样的解决方案。ORM并不是一种具体的产品,而是一类框架的总称,它概述了这类框架的基本特征:完成面向对象的程序设计语言到关系数据库的映射。基于ORM框架完成映射后,既可利用面向对象程序设计语言的简单易用性,又可利用关系数据库的技术优势。目前ORM的产品非常多,比如Apache组织下的OJB,Oracle的TopLink,JD

3、O,JPA等等。,对象-关系映射是一门非常实用的工程技术,它实现了Java应用中的对象到关系数据库中的表的自动的(和透明的)持久化,使用元数据(meta data)描述对象与数据库间的映射。,O/R Mapping的优点提高生产效率可维护性更好性能厂商独立性,四、O/R Mapping的优点,五、目前流行的ORM持久层可选方案,六、为什么要选择Hibernate,Hibernate能在众多的ORM框架中脱颖而出,因为Hibernate与其他ORM框架对比具有如下优势:1、开源和免费的License,方便需要时研究源代码、改写源代码、进行功能定制。2、轻量级封装,避免引入过多复杂的问题,调试容易

4、,可减轻程序员负担。3、具有可扩展性,API开放。功能不够用时,可自己编码进行扩展。4、开发者活跃,产品有稳定的发展保障。Hibernate的工作方式 灵巧的设计,出色的性能表现,七、Hibernate概述,Hibernate是一个免费的开源Java包,是目前最流行的ORM框架,它是一个面向Java环境的对象/关系数据库映射工具。也是一个轻量级的O/R Mapping框架,它问世的时间并不长,但已经成为目前最流行的持久层解决方案。它使得程序与数据库的交互变得十分容易,更加符合面向对象的设计思想,像数据库中包含普通Java对象一样,而不必考虑如何把它们从数据库表中取出。使开发者可以专注于应用程序

5、的对象和功能,而不必关心如何保存它们或查找这些对象。甚至在对SQL语句完全不了解的情况下,使用hibernate仍然可以开发出优秀的包含数据库访问的应用程序。,八、持久化层含义,基于B/S的典型三层架构,访问数据库代码(Dao)与业务逻辑(Service)混杂在一起带来了很多问题,这样的程序设计严重限制了程序的可扩展性和适应性,所以有必要要把涉及数据库操作的代码分离出来与业务逻辑分离。就形成了所谓“持久化层”的概念。持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的数据存储在关系型的数据库中,当然也可以存储在磁盘文件

6、中、XML数据文件中等等。,八、持久化层含义,九、ORM工具实现持久化示意图,如何进行对象关系数据库的匹配,public class User private String name;private String password;private String address;create table t_user(name varchar(255)not null,password varchar(255),.primary key(name),如何进行对象关系数据库的匹配?,十、Hibernate入门,Hibernate概述 Hibernate是非常优秀、成熟的O/R Mapping框架。

7、它提供了强大的对象和关系数据库映射以及查询功能。Hibernate优势开源(LGPL)成熟流行自定义API提高开发者工作效率,十一、下载Hibernate,下载地址http:/www.hibernate.org,本教程使用3.2.5。将下载目录/hibernate3.jar和/lib下的hibernate运行时必须的包加入classpath中:antlr.jar,cglib.jar,asm.jar,commons-collections.jar,commons-logging.jar,jta.jar,dom4j.jar,十二、Hibernate工作原理,1.读取并解析配置文件2.读取并解析映射

8、信息,创建SessionFactory3.打开Sesssion4.创建事务Transation5.持久化操作6.提交事务7.关闭Session8.关闭SesstionFactory,启动Hibernate 构建Configuration实例,初始化该实例中的所有变量 Configuration cfg=new Configuration().configure();加载hibernate.cfg.xml文件至该实例内存 通过hibernate.xfg.xml文件中的mapping节点配置,加载hbm.xml文件至该实例内存利用上面创建的Configuration实例构建一个SessionFac

9、tory实例 SessionFactory sf=cfg.buildSessionFactory();由上面得到的SessionFactory实例创建连接 Session s=sf.openSession();由上面得到的Session实例创建事务操作接口Transaction的一个实例tx Transaction tx=s.beginTransaction();通过Session接口提供的各种方法操作数据库的访问 提交数据库的操作结果 mit();关闭Session链接 s.close();,十二、Hibernate工作原理,开始,启动hibernate,构建configuration实例,

10、初始化该实例中的所有变量,加载hibernate.cfg.xml文件至该实例(内存),通过hibernate.cfg.xml文件中的mapping节点配置加载*.hbm.xml至该实例(内存),利用configuration实例创建一个工厂类SessionFactory实例,SessionFactory类创建连接,SessionFactory实例创建事务接口,通过session接口提供的各种方法操纵数据库,提交数据库事务,关闭session,十二、Hibernate工作原理,十三、Hibernate开发步骤,一、持久化类的设计二、持久化类和关系数据库的映射三、应用的开发,十四、持久化Java类

11、必须遵循的原则,1、为类的持久化类字段申明访问方法(get/set)。Hibernate对JavaBeans风格的属性实行持久化。2、实现一个默认的构造方法(constructor)。这样的话Hibernate就可以使用Constructor.newInstance()来实例化它们。3、如果是集合类型的属性,它的类型必须定义为集合的接口。例如:List、Set。4、提供一个标识属性(identifier property)。如果没有该属性,一些功能不起作用,比如:级联更新(Cascaded updates)Session.saveOrUpdate()。,一、建立数据库和表数据库名main表名和

12、结构如下:表名:stuInt id;varchar xm;varchar sex;Date sr;,十五、Hibernate简单实例,二、导入hibernate包 导入数据库包,十五、Hibernate简单实例,十五、Hibernate简单实例,三、建立持久化类,package;import java.util.Date;public class Stu private Integer id;private String xm;private String sex;private Date sr;public Integer getId()return id;public void setId

13、(Integer id)this.id=id;public String getXm()return xm;,public void setXm(String xm)this.xm=xm;public String getSex()return sex;public void setSex(String sex)this.sex=sex;public Date getSr()return sr;public void setSr(Date sr)this.sr=sr;,十五、Hibernate简单实例,四、建立持久化类映射文件*.hbm.xml如 Stu.hbm.xml,五、在SRC目录下配置

14、 hibernate.cfg.xml文件,十五、Hibernate简单实例,org.hibernate.dialect.MySQLDialectjdbc:mysql:/localhost:3306/testrootrootcom.mysql.jdbc.Driversunli,jdbc:mysql:/localhost:3306/main?useUnicode=truecharacterEncoding=gbk,乱码的解决,六、建立操作类 StuDao.java,package;import java.util.List;import org.hibernate.Hibernate;import

15、 org.hibernate.Query;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;public class StuDAO public void add(Stu u)Configuration cfg=new Configuration();cfg.configure();SessionFactory sf=cfg.buildSessionFactory();Se

16、ssion s=sf.openSession();Transaction tx=s.beginTransaction();s.save(u);mit();,十五、Hibernate简单实例,七、调用实例化类操作数据库,%SimpleDateFormat sd=new SimpleDateFormat(yyyy-mm-dd);StuDAO d=new StuDAO();Stu s=new Stu();s.setId(new Integer(1005);s.setSex(t);s.setSr(sd.parse(1981-01-01);s.setXm(sunli);d.add(s);,十五、Hibe

17、rnate简单实例,十六、Hibernate核心接口,十六、Hibernate核心接口,1.Configuration接口Configuration负责管理Hibernate的配置信息。Hibernate运行时需要一些底层实现的基本信息。这些信息包括:数据库URL、数据库用户名、数据库用户密码、数据库JDBC驱动类、数据库dialect。用于对特定数据库提供支持,其中包含了针对特定数据库特性的实现,如Hibernate数据库类型到特定数据库数据类型的映射等。使用Hibernate必须首先提供这些基础信息以完成初始化工作,为后续操作做好准备。这些属性在Hibernate配置文件hibernate

18、.cfg.xml中加以设定,当调用:Configuration config=new Configuration().configure();时,Hibernate会自动在目录下搜索hibernate.cfg.xml文件,并将其读取到内存中作为后续操作的基础配置。,十六、Hibernate核心接口,2.SessionFactory接口SessionFactory负责创建Session实例,可以通过Configuration实例构建SessionFactory。Configuration实例config会根据当前的数据库配置信息,构造SessionFacory实例并返回。SessionFacto

19、ry一旦构造完毕,即被赋予特定的配置信息。也就是说,之后config的任何变更将不会影响到已经创建的SessionFactory实例sessionFactory。如果需要使用基于变更后的config实例的SessionFactory,需要从config重新构建一个SessionFactory实例。SessionFactory保存了对应当前数据库配置的所有映射关系,同时也负责维护当前的二级数据缓存和Statement Pool。由此可见,SessionFactory的创建过程非常复杂、代价高昂。这也意味着,在系统设计中充分考虑到SessionFactory的重用策略。由于SessionFacto

20、ry采用了线程安全的设计,可由多个线程并发调用。,Configuration config=new Configuration().configure();SessionFactory sessionFactory=config.buildSessionFactory();,十六、Hibernate核心接口,3.Session接口Session是Hibernate持久化操作的基础,提供了众多持久化方法,如save、update、delete等。通过这些方法,透明地完成对象的增加、删除、修改、查找等操作。同时,值得注意的是,Hibernate Session的设计是非线程安全的,即一个Sessi

21、on实例同时只可由一个线程使用。同一个Session实例的多线程并发调用将导致难以预知的错误。Session实例由SessionFactory构建:,Configuration config=new Configuration().configure();SessionFactory sessionFactory=config.buldSessionFactory();Session session=sessionFactory.openSession();,十六、Hibernate核心接口,4.Transaction接口Transaction是Hibernate中进行事务操作的接口,Tran

22、saction 接口是对实际事务实现的一个抽象,这些实现包括JDBC的事务、JTA 中的UserTransaction,甚至可以是CORBA 事务。之所以这样设计是可以让开发者能够使用一个统一的操作界面,使得自己的项目可以在不同的环境和容器之间方便地移值。事务对象通过Session创建。例如以下语句:,Transaction ts=session.beginTransaction();mit();,十六、Hibernate核心接口,5.Query接口例如以下语句:在后面设置其值:上面的方法是通过“?”来设置参数,还可以用“:”后跟变量的方法来设置参数,如上例可以改为:或者:Query还有一个l

23、ist()方法,用于取得一个List集合的示例,此示例中包括可能是一个Object集合,也可能是Object数组集合。例如:,Query query=session.createQuery(“from Kcb where kch=100”);,Query query=session.createQuery(from Kcb where kch=?);,query.setString(0,要设置的值);,Query query=session.createQuery(from Kcb where kch=:kchValue);query.setString(kchValue,要设置的课程号值);

24、,query.setParameter(0,要设置的值);,Query query=session.createQuery(from Kcb where kch=198);List list=query.list();,十七、Configuration配置,概述:Configuration 类负责管理Hibernate 的配置信息。它包括如下内容:Hibernate运行的底层信息:数据库的URL、用户名、密码、JDBC驱动类,数据库Dialect,数据库连接池等。Hibernate映射文件(*.cfg.xml)。Hibernate配置的两种方法:属性文件(hibernate.propertie

25、s)。调用代码:Configuration cfg=new Configuration();Xml文件(hibernate.cfg.xml)。调用代码:Configuration cfg=new Configuration().configure();,Configuration接口配置文件hibernate.cfg.xml 常用参数,数据库连接的配置hibernate.dialect org.hibernate.dialect.MySQLDialecthibernate.connection.driver_class com.mysql.jdbc.Driverhibernate.connec

26、tion.url jdbc:mysql:/localhost/hibernatehibernate.connection.username roothibernate.connection.password roothibernate.show_sql truehibernate.jdbc.fetch_size 50设定JDBC的Statement读取数据的时候每次从数据库中取出的记录条数 hibernate.jdbc.batch_size 25是设定对数据库进行批量删除,批量更新和批量插入的时候的批次大小,有点相当于设置Buffer缓冲区大小的意思。Batch Size越大,批量操作的向数据

27、库发送sql的次数越少,速度就越快。我做的一个测试结果是当Batch Size=0的时候,使用Hibernate对Oracle数据库删除1万条记录需要25秒,Batch Size=50的时候,删除仅仅需要5秒!,1默认Hibernate连接池配置 com.mysql.jdbc.Driver jdbc:mysql:/localhost:3306/schoolproject true UTF-8 root true org.hibernate.dialect.MySQLDialect,Hibernate连接池 默认,com.mysql.jdbc.Driver jdbc:mysql:/localho

28、st:3306/schoolproject true UTF-8 root org.hibernate.connection.C3P0ConnectionProvider 20 5 120 100 120 2 true org.hibernate.dialect.MySQLDialect,C3P0的Hibernate连接池配置,在Hibernate3.0中,已经不再支持dbcp,hibernate.cfg.xml,trueorg.hibernate.dialect.MySQLDialectcom.mysql.jdbc.Driverjdbc:mysql:/localhost/hibernater

29、ootroot,十八、SessionFactory,概述:应用程序从SessionFactory(会话工厂)里获得Session(会话)实例。它在多个应用线程间进行共享。通常情况下,整个应用只有唯一的一个会话工厂例如在应用初始化时被创建。然而,如果你使用Hibernate访问多个数据库,你需要对每一个数据库使用一个会话工厂。会话工厂缓存了生成的SQL语句和Hibernate在运行时使用的映射元数据。调用代码:SessionFactory sessionFactory=cfg.buildSessionFactory();,十九、Session(会话),概述:Session不是线程安全的,它代表与

30、数据库之间的一次操作,它的概念介于Connection和Transaction之间。Session也称为持久化管理器,因为它是与持久化有关的操作接口。Session通过SessionFactory打开,在所有的工作完成后,需要关闭。它与Web层的HttpSession没有任何关系。调用代码Session session=sessionFactory.openSession();,保存用户:session.save(Person);查询用户:load(Class theClass,Serializable id)get(Class theClass,Serializable id)修改用户:se

31、ssion.update(Person);保存或修改用户:session.saveOrUpdate(Person);删除用户:session.delete(Person);删除所有用户:session.delete(“from Person”);,二十、Transaction(事务),概述:它将应用代码从底层的事务实现中抽象出来这可能是一个JDBC事务,一个JTA用户事务或者甚至是一个公共对象请求代理结构(CORBA)允许应用通过一组一致的API控制事务边界。这有助于保持Hibernate应用在不同类型的执行环境或容器中的可移植性。调用代码:Transaction tx=session.beg

32、inTransaction();注:使用Hibernate进行操作时(增、删、改)必须显示的调用Transaction(默认:autoCommit=false)。,项目步骤,1、建立web项目2、导入数据库包和hibernate包3、编写持久化类4、编写持久化类的映射文件5、编写 hibernate.cfg.xml数据库配置文件6、编写操作类接口7、编写工具类8、编写实现类实现操作类接口9、页面中调用实现类,二十一、综合举例,6、编写操作类接口StuDAO.java,package;import java.util.List;public interface StuDAO public voi

33、d saveUser(Stu user);public Stu findUserByName(String name);public Stu findUserById(Integer id);public void updateUser(Stu user);public void remove(Stu user);public List findall();,二十一、综合举例,7、编写工具类 HibernateUitl.java,package;import org.hibernate.Session;import org.hibernate.SessionFactory;import org

34、.hibernate.cfg.Configuration;public final class HibernateUitl private static SessionFactory sessionFactory;private HibernateUitl()static/static语句块类加载时仅被执行一次Configuration cfg=new Configuration();cfg.configure();sessionFactory=cfg.buildSessionFactory();public static SessionFactory getSessionFactory()r

35、eturn sessionFactory;public static Session getSession()return sessionFactory.openSession();,二十一、综合举例,8、编写实现类实现操作类接口StuDAOimpl.java,package;import java.util.List;import org.hibernate.Criteria;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.Transaction;import org.hibernate

36、.criterion.Restrictions;,二十一、综合举例,8、编写实现类实现操作类接口StuDAOimpl.java,public class StuDAOimpl implements StuDAO public Stu findUserById(Integer id)Session s=null;try s=HibernateUitl.getSession();Stu user=(Stu)s.get(Stu.class,id);return user;finally if(s!=null)s.close();,二十一、综合举例,8、编写实现类实现操作类接口StuDAOimpl.j

37、ava,public Stu findUserByName(String name)Session s=null;try s=HibernateUitl.getSession();Criteria c=s.createCriteria(Stu.class);c.add(Restrictions.eq(xm,name);Stu user=(Stu)c.uniqueResult();return user;finally if(s!=null)s.close();,二十一、综合举例,8、编写实现类实现操作类接口StuDAOimpl.java,public Stu findUserByName1(S

38、tring name)Session s=null;try s=HibernateUitl.getSession();String hql=from Stu as u where u.xm=:n;Query q=s.createQuery(hql);q.setString(n,name);Stu user=(Stu)q.uniqueResult();return user;finally if(s!=null)s.close();,二十一、综合举例,8、编写实现类实现操作类接口StuDAOimpl.java,public void remove(Stu user)Session s=null;

39、Transaction tx=null;try s=HibernateUitl.getSession();tx=s.beginTransaction();s.delete(user);mit();finally if(s!=null)s.close();,二十一、综合举例,8、编写实现类实现操作类接口StuDAOimpl.java,public void saveUser(Stu user)Session s=null;Transaction tx=null;try s=HibernateUitl.getSession();tx=s.beginTransaction();s.save(user

40、);mit();finally if(s!=null)s.close();,二十一、综合举例,8、编写实现类实现操作类接口StuDAOimpl.java,public void updateUser(Stu user)Session s=null;Transaction tx=null;try s=HibernateUitl.getSession();tx=s.beginTransaction();s.update(user);mit();finally if(s!=null)s.close();,二十一、综合举例,8、编写实现类实现操作类接口StuDAOimpl.java,public Li

41、st findall()Session s=null;Transaction tx=null;try s=HibernateUitl.getSession();String queryString=from Stu;Query query=s.createQuery(queryString);return query.list();finally if(s!=null)s.close();,二十一、综合举例,9、页面中调用实现类 insert.jsp,二十一、综合举例,9、页面中调用实现类 findall.jsp,);%,二十一、综合举例,9、页面中调用实现类 findbyid.htm,请输入

42、你要查找学生的学号,二十一、综合举例,9、页面中调用实现类 findbyid.jsp,二十一、综合举例,9、页面中修改记录update1.jsp(步骤一),修改);out.print();%,二十一、综合举例,9、页面中修改记录update2.jsp(步骤二),二十一、综合举例,学号:readonly/姓名:/性别:/学号:/,9、页面中修改记录update3.jsp(步骤三),二十一、综合举例,二十二、缓存,缓存的作用主要用来提高性能,可以简单的理解成一个Map;使用缓存涉及到三个操作:把数据放入缓存、从缓存中获取数据、删除缓存中的无效数据。一级缓存,Session级共享save,updat

43、e,saveOrUpdate,load,get,list,iterate,lock这些方法都会将对象放在一级缓存中,一级缓存不能控制缓存的数量,所以要注意大批量操作数据时可能造成内存溢出;可以用evict,clear方法清除缓存中的内容。,二级缓存,SessionFactory级共享 实现为可插拔,可以通过实现CacheProvider和Cache接口来加入Hibernate不支持的缓存实现。,二十二、缓存,使用EhCache配置二级缓存 1、加入ehcache-1.2.3.jar(已在hibernate包中)到当前项目的lib下。2、在hibernate.cfg.xml文件中加入EhCach

44、e缓存插件的提供类。3、拷贝Hibernate安装目录的etc下ehcache.xml文件到src目录中。,true*指定二级缓存产品的提供商;org.hibernate.cache.ehcacheprovider,二十三、Hibernate中对象的状态,瞬时对象(Transient Objects)(临时状态):使用new 操作符初始化的对象不是立刻就持久的。它们的状态是瞬时的,也就是说它们没有任何跟数据库表相关联的行为,只要应用不再引用这些对象(不再被任何其它对象所引用),它们的状态将会丢失,并由垃圾回收机制回收。持久对象(Persist Objects):持久实例是任何具有数据库标识的实

45、例。它由持久化管理器Session统一管理,持久实例是在事务中进行操作的它们的状态在事务结束时会和数据库进行同步。当事务提交时,通过执行SQL的INSERT、UPDATE和DELETE语句把内存中的状态同步到数据库中。离线对象(Detached Objects)(脱管状态):Session关闭之后,持久化对象就变为离线对象。离线表示这个对象不能再与数据库保持同步,它们不再受Hibernate管理。,实例的状态,一个持久化类的实例可能处于三种不同状态中的某一种。这三种状态的定义则与所谓的持久化上下文(persistence context)有关。Hibernate的Session对象就是这个所谓

46、的持久化上下文:临时状态:不曾进行持久化,未与任何Session相关联持久化状态:仅与一个Session相关联游离状态:已经进行过持久化,但当前未与任何Session相关联,二十四、Hibernate查询,概述:数据查询与检索是Hibernate中的一个亮点。相对其他ORM实现而言,Hibernate提供了灵活多样的查询机制。1、HQL(Hibernate Query Language)使用session.createQuery(hql)面向对象的查询语言,与SQL不同,HQL中的对象名是区分大小写的(除了JAVA类和属性其他部分不区分大小写);HQL中查的是对象而不是和表,并且支持多态;HQ

47、L主要通过Query来操作,Query的创建方式:Query q=session.createQuery(hql);from Personfrom User user where user.name=:namefrom User user where user.name=:name and user.birthday:birthday 2、Criteria使用session.createCriteria()Criteria是一种比HQL更面向对象的查询方式;Criteria的创建方式:Criteria crit=session.createCriteria(DomainClass.class)

48、;简单属性条件如:criteria.add(Restrictions.eq(propertyName,value),criteria.add(Restrictions.eqProperty(propertyName,otherPropertyName)3、直接使用SQL,HQL是Hibernate Query Language的缩写,HQL的语法很像SQL的语法,但HQL是一种面向对象的查询语言。因此,SQL的操作对象是数据表和列等数据对象,而HQL的操作对象是类、实例、属性等。,24.1、HQL(Hibernate Query Language)使用session.createQuery(h

49、ql),24.1.1 HQL基础,HQL 查询依赖于Query类,每个Query 实例对应一个查询对象。使用HQL 查询可按如下步骤进行:(1)获取HibernateSession对象;(2)编写HQL语句;(3)以HQL语句作为参数,调用Session的createQuery方法创建查询对象;(4)如果HQL语句包含参数,调用Query 的setXxx方法为参数赋值;(5)调用Query对象的list等方法遍历查询结果。,用from子句指定数据表,from子句是最简单的HQL语句,也是最基本的HQL语句。from关键字后紧跟持久化类的类名。例如:from Person表明从Person 持久

50、化类中选出全部的实例。大部分时候,推荐为该Person的每个实例起别名。例如:HQL:from Person as p SQL:Select*from Person as p,24.1.2 HQL查询Query接口,Query(查询)接口允许你在数据库上执行查询并控制查询如何执行。查询语句使用HQL或者本地数据库的SQL方言编写。调用代码:Query query=session.createQuery(“from Person”);查询用户名为“ff”的用户:Query query=session.createQuery(from Person as person where person.n

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号