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 “); }}

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • MyBatis入门学习(一)

    MyBatis入门学习(一)

    2021年12月10日
  • python中griddata的外插值_利用griddata进行二维插值

    python中griddata的外插值_利用griddata进行二维插值有时候会碰到这种情况:实际问题可以抽象为\(z=f(x,y)\)的形式,而你只知道有限的点\((x_i,y_i,z_i)\),你又需要局部的全数据,这时你就需要插值,一维的插值方法网上很多,不再赘述,这里仅介绍二维的插值法这里主要利用scipy.interpolate包里griddata函数griddata(points,values,xi,method=’linear’…

  • Javac编译过程「建议收藏」

    Javac编译过程「建议收藏」Javac编译过程大致分为4个过程,分别是:词法分析语法分析语义分析代码生成词法分析  词法分析是将源代码的字符流转变为标记(Token)集合,单个字符是程序编写过程的最小元素,而标记则是编译过程的最小元素,关键字、变量名、字面量、运算符都可以成为编辑,如“inta+b=2”这句代码中包含了6个标记,分别是int、a、=、b、+、2,虽然关键字int由三个字符构成,但是

  • 字符串反转的实现方法总结「建议收藏」

    文章目录方法1:对称交换法方法2:函数递归法方法3:列表反转法方法4:循环反向迭代法方法5:倒序切片法方法6:遍历索引法方法7:反向遍历索引法方法8:列表弹出法方法9:反向循环迭代法方法10:累积相加法方法11:匿名函数法方法12:列表倒序法方法13:双向队列排序法方法14:双向队列反转法方法1:对称交换法str=’abcdef’deff(s):s=list(s)…

  • ios屏幕旋转设置_旋转平移和缩放

    ios屏幕旋转设置_旋转平移和缩放目录(?)[-]一如何设置AnchorPoint二如何获得AnchorPoint经常会遇到需求,要求手势的缩放或者旋转操作,要求动作变化围绕某一个特定点,或者是两指的中心点,或者是某一个点。这个问题首先要清晰的知道,iOS各个view的层次关系。特别是,要清楚的知道,当前view的frame与superView的bounds是一个坐标

  • 文件和文件流

    文件和文件流文件和文件流1.File类Java.io.File类可以获取文件以及文件夹的一些基本的属性常用的方法文件名称,路径,大小,判断是否存在,删除,创建//创建一个文件对象(可以是文件,可以是文件夹) Filefile=newFile(“e:/java_text.txt”); //基本属性 booleancanWriter=file.canWrite(); …

    2022年10月24日

发表回复

您的电子邮箱地址不会被公开。

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