Hibernate之Template
来源:互联网 发布:数据库应用课程设计 编辑:程序博客网 时间:2024/05/09 04:58
//获取Spring 上下文
ApplicationContextctx = new FileSystemXmlApplicationContext("bean.xml");
//通过上下文获得SessionFactory
SessionFactory 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.
其依赖关系可通过配置文件来设置
<!--Spring 配置文件的DTD 定义二〉
<!DOCTYPE beans PUBLIC "-!!SPRING!!DTD BEAN!!EN" ''http://www.springframework.org/dtd/spring-beans.dtd''>
<! -- Spring 配置文件的根元素是beans-->
<beans>
<!--定义数据源,该bean 的ID 为dataSource-->
<bean id=" dataSource" class=" org. springframework.jdbc. datasource. DriverManagerDataSource">
<!-- 指定数据库驱动-->
<property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>
<!-- 指定连接数据库的URL-->
<property name="url"><value>jdbc:mysql://wonder:3306/j2ee</ value>
<!property>
<!-- root 为数据库的用户名-->
<property name="username"><value>root</value></property>
<!--pass 为数据库密码-->
<property name= "password" ><value>pass</value></property>
</bean>
<!--定义Hibernate 的SessionFactoy-->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<!--依赖注入数据源,注入正是上文定义的dataSource-->
<property name="dataSource"><ref local="dataSource"/></property>
<!--mappingResouces属性用来列出全部映射文件〉
<property name="mappingResources">
<list>
<!--以下用来列出所有的PO 映射文件-->
<value>lee/Person.hbm.xml</value>
</list>
</property>
<!--定义Hibernate 的SessionFactory的属性-->
<property name="hibernateProperties">
<props>
<!-- 指定Hibernate 的连接方言-->
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<!--不同数据库连接,启动时选择create , update , create-drop-->
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>
<!--配置Person 持久化类的DAO bean-->
<bean id="personDao" class="lee.PersonDaoImpl">
<!--采用依赖注入来传入SessionFactory的引用〉
<property name="sessionFactory"><ref local="sessionFactory"/></property>
</bean>
</beans>
在DAO 实现类中,可采用更简单的方式来取得HibemateTemplate的实例。代码如下:
...{
// 执行持久化操作的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 ");
}
}
这也是为什么有人说直接使用hibernate提供的方法对数据库进行增删改查会使得项目开发变得简单多了的原因,因为hibernate里封装有JDBC对数据库的操作方法。
方法:
让dao层继承HibernateDaoSupport,然后可以用
getHibernateTemplate().delete();删
getHibernateTemplate().load();查
getHibernateTemplate().save();增
getHibernateTemplate().updata();改.
- Hibernate之Template
- hibernate之template find方法使用
- Spring Hibernate Template
- hibernate template 常用方法
- hibernate的template子查询
- 设计模式之Template
- 设计模式之Template
- jsp template之我见
- jsp template之我见
- C++之模板(Template)
- 设计模式之Template
- 设计模式之Template
- 设计模式之Template
- C++之Template
- C++之模板(Template)
- 设计模式之Template
- Grails探索之Template
- Grails探索之Template
- WebView
- chapter11 机器学习之使用Apriori算法进行关联性分析
- Thrift入门及Java实例演示
- iOS第三方开源库的吐槽和备忘
- iOS开发人员必看的精品资料(100个)——下载目录
- Hibernate之Template
- Ajax里的onreadystatechange的作用是什么
- Thrift入门及Java实例演示
- 基站、wifi、GPS定位
- struts2执行原理(执行流程)
- android蓝牙通讯
- Java关键字之enum
- iOS 播放本地文件时以MM:SS形式显示播放进度
- (五) 畸变矫正—让世界不在扭曲 【计算机视觉学习笔记--双目视觉几何框架系列】