HibernateTemplate详解

HibernateTemplate详解HibernateTemplate提供非常多的常用方法来完成基本的操作,比如通常的增加、删除、修改、查询等操作,Spring2.0更增加对命名SQL查询的支持,也增加对分页的支持。大部分情况下,使用Hibernate的常规用法,就可完成大多数DAO对象的CRUD操作。下面是HibernateTemplate的常用方法简介:qvoiddelete(Objectentity):删除指定持久化实

大家好,又见面了,我是你们的朋友全栈君。HibernateTemplate提供非常多的常用方法来完成基本的操作,比如通常的增加、删除、修改、查询等操作,Spring 2.0更增加对命名SQL查询的支持,也增加对分页的支持。大部分情况下,使用Hibernate的常规用法,就可完成大多数DAO对象的CRUD操作。下面是HibernateTemplate的常用方法简介:q void delete(Object entity):删除指定持久化实例q deleteAll(Collection entities):删除集合内全部持久化类实例q find(String queryString):根据HQL查询字符串来返回实例集合q findByNamedQuery(String queryName):根据命名查询返回实例集合q get(Class entityClass, Serializable id):根据主键加载特定持久化类的实例q save(Object entity):保存新的实例q saveOrUpdate(Object entity):根据实例状态,选择保存或者更新q update(Object entity):更新实例的状态,要求entity是持久状态q setMaxResults(int maxResults):设置分页的大小下面是一个完整DAO类的源代码:public class PersonDAOHibernate implements PersonDAO{ //采用log4j来完成调试时的日志功能private static Log log = LogFactory.getLog(NewsDAOHibernate.class); //以私有的成员变量来保存SessionFactory。private SessionFactory sessionFactory;//以私有变量的方式保存HibernateTemplateprivate HibernateTemplate hibernateTemplate = null; //设值注入SessionFactory必需的setter方法 public void setSessionFactory(SessionFactory sessionFactory){ this.sessionFactory = sessionFactory; } //初始化本DAO所需的HibernateTemplatepublic HIbernateTemplate getHibernateTemplate(){ //首先,检查原来的hibernateTemplate实例是否还存在 if ( hibernateTemplate == null) { //如果不存在,新建一个HibernateTemplate实例 hibernateTemplate = new HibernateTemplate(sessionFactory); } return hibernateTemplate;} //返回全部的人的实例 public List getPersons() { //通过HibernateTemplate的find方法返回Person的全部实例 return getHibernateTemplate().find(“from Person”); } /** * 根据主键返回特定实例 * @ return 特定主键对应的Person实例 * @ param 主键值 public News getNews(int personid) { return (Person)getHibernateTemplate().get(Person.class, new Integer(personid)); } /** * @ person 需要保存的Person实例 */ public void savePerson(Person person) { getHibernateTemplate().saveOrUpdate(person); } /** * @ param personid 需要删除Person实例的主键 * / public void removePerson(int personid) { //先加载特定实例 Object p = getHibernateTemplate().load(Person.class, new Integer(personid)); //删除特定实例 getHibernateTemplate().delete(p); }}使用HibernateTemplateHibernateTemplate 可将Hibernate 的持久层访问模板化,使用HibernateTemplate 非常简单。创建Hi bernateTemplate 实例后,注入一个SessionFactory 的引用,就可执行持久化操作。SessionFactoyr 对象可通过构造参数传入,或通过设值方式传入。例如://获取Spring 上下文ApplicationContext ctx = new FileSystemXmlApplicationContext(“bean.xml”);//通过上下文获得SessionFactorySessionFactory sessionFactory = (SessionFactory) ctx.getBean(“sessionFactory”) ,HibernateTemplate 提供如下三个构造函数:? HibernateTemplateO 。? HibernateTemplate(org.hibernate.SessionFactory sessionFactory)。? HibernateTemplate(org.hibernate.SessionFactory sessionFactory, boolean allowCreate) 。 第一个构造函数:构造一个默认的HibernateTemplate 实例,因此,使用HibernateTemplate实例之前,还必须使用方法setSessionFactory(SessionFactory sessionFactory)来为HibernateTemplate 传入SessionFactory 的引用。第二个构造函数:在构造时已经传入SessionFactory 引用。第三个构造函数:其boolean 型参数表明,如果当前线程己经存在一个非事务性的Session ,是否直接返回此非事务性的Session 。对于在Web 应用中,通常启动时自动加载ApplicationContext , SessionFactory 和DAD对象都处在Spring 上下文管理下。因此无须在代码中显式设置,可采用依赖注入解耦SessionFactory 和DAO. 其依赖关系可通过配置文件来设置 com.mysql.jdbc.Driver jdbc:mysql://wonder:3306/j2ee</ value> <!property> root pass <!–mappingResouces属性用来列出全部映射文件〉 lee/Person.hbm.xml org.hibernate.dialect.MySQLDialect update <!–采用依赖注入来传入SessionFactory的引用〉 在DAO 实现类中,可采用更简单的方式来取得HibemateTemplate的实例。代码如下:public class PersonDaoImpl implements PersonDao{ // 执行持久化操作的HibernateTemplate HibernateTemplate ht; private SessionFactory sessionFactory; //依赖注入Sess工onFactory 的必需的setter 方法 public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } //该方法用于完成HibernateTemplate的初始化 private void setHibernateTemplate() { if (ht ==null){ ht = new HibernateTemplate(sessionFactory); } } /** *加载Person 实例 * @param id 需要加载Person 实例的主键值 * @return 返回加载的Person 实例 */ public Person get(int id){ setHibernateTemplate(); return (Person)ht.get(Person.class , new Integer(id)); } /** *保存Person 实例 * @param person 需要保存的Person 实例 */ public void save(Person person){ setHibernateTemplate() ; ht.save(person) ; } /** *修改Person 实例 * @param person 需要修改的Person 实例 */ public void update(Person person){ setHibernateTemplate(); ht.update(person); } /** *删除Person 实例 * @param id 需要删除的Person id */ public void delete(int id){ setHibernateTemplate(); ht.delete(ht.get(Person.class , new Integer(id))); } /** *删除Person 实例 * @param perso口需要删除的Person 实例 */ public void delete(Person person){ setHibernateTemplate(); ht.delete(person) ; } /** *根据用户名查找Person * @param name 用户名 * @return 用户名对应的全部用户 */ public List findByPerson(String name){ setHibernateTemplate(); return h t. find(“from Person p where p.name like ?” , name); } /** *返回全部的Person 实例 * @return 全部的Person 实例 */ public List findAllPerson(){ setHibernateTemplate(); return ht.find(“from Person “); }}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/150215.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 注意 Laravel 清除缓存 php artisan cache:clear 的一个坑

    注意 Laravel 清除缓存 php artisan cache:clear 的一个坑

    2021年10月26日
  • Android的系统服务一览

    System_Server进程运行在systemserver进程中的服务比较多,这是整个Android框架的基础Native服务SurfaceFlinger这是framebuffer合成的服务,将各

    2021年12月22日
  • 联想笔记本电脑键盘灯怎么开启_联想笔记本电脑的键盘灯怎么开[通俗易懂]

    联想笔记本电脑键盘灯怎么开启_联想笔记本电脑的键盘灯怎么开[通俗易懂]展开全部1、联想笔记本部分型号具备键盘背32313133353236313431303231363533e4b893e5b19e31333431336664光功能,方法通过“FN+空格”打开,支持此功能的机型,键盘上有相应标示。部分早期的Thinkpad笔记本电脑若带有键盘灯,需要通过“Fn+PageUp”组合键开启。发现电脑键盘的“Space(空格键)”按键上有下图所示的标识符号电脑一般带有键…

    2022年9月20日
  • 如何配置pytorch_pytorch如何下载

    如何配置pytorch_pytorch如何下载1.好像不支持python3.8。直接从setting里面安装时不行的,按其它教程(https://blog.csdn.net/lyz21/article/details/104295042)从官网https://pytorch.org/get-started/locally/,拷贝链接用pip下载,一直报找不到版本。后来发现,python3.8的原因,改成python3.7可以了,但会一直连接超时。2.发现要下载的其实是这两个文件:点开下面的两个链接,用下载软件下载了,我下到了e盘,直接pip

    2022年10月31日
  • heap和stack区别Java_Java中Heap与Stack的区别

    heap和stack区别Java_Java中Heap与Stack的区别1)Heap是Stack的一个子集.——扩展—>从内存观点考虑。优化2)Stack存取速度仅次于寄存器,存储效率比heap高,可共享存储数据,可是其中数据的大小和生存期必须在运行前肯定。spa3)Heap是运行时可动态分配的数据区,从速度看比Stack慢,Heap里面的数据不共享,大小和生存期均可以在运行时再肯定。指针4)new关键字是运行时在Heap里面建立对象,每ne…

    2022年10月24日
  • NotePad++ 正则表达式替换 高级用法[通俗易懂]

    NotePad++ 正则表达式替换 高级用法[通俗易懂]在我们处理文件时,很多时候会用到查找与替换。当我们想将文件中某一部分替换替换文件中另一部分时,怎么办呢?下面正则表达式给我提供方法。正则表达式,提供复杂并且弹性的查找与替换注意:不支持多行表达式(involving\n,\r,etc).1基本表达式PatternMeaning.匹配任意字符,除了新一行(\n)。也就是说“.”可以匹配\r,当文件中同时含有\ra

    2022年5月13日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号