Spring和Hibernate技术的整合
第一步:
--创建工程,引入开发包
(spring开发包,ojdbc.jar,dbcp连接池,hibernate框架开发包)
第二步:
--在src下添加applicationContext.xml
第三步:
--针对数据表添加实体类和映射描述文件
(Cost类,Cost.hbm.xml)
第四步:
--编写CostDAO接口
第五步:
--编写实现类HibernateCostDAO
(继承HibernateDaoSupport,采用HibernateTemplate的方法完成增删改查)
save():添加
update():更新
delete():删除
load(),get():按主键查询
find():执行HQL语句,返回的都是list
第六步:
--在Spring容器配置HibernateCostDAO
需要事先定义DataSource,SessionFactory组件对象,
按DataSource-注入->SessionFactory-注入->HibernateCostDAO顺序建立关联
--------
备注:
1.Spring使用原始的session
//Session的使用
public void useSession(){
//第一种方法
Session session = this.getSession();
//使用Session对象操作
session.close();//注意释放该Session对象
//第二种方法(推荐)
List list = (List)this.getHibernateTemplate().execute(
new HibernateCallback(){
//回调函数
public Object doInHibernate(Session session) throws HibernateException, SQLException {
//使用Session对象操作
Query query = session.createQuery("from Cost");
return query.list();//该值当做template.execute方法结果返回
}
}
);
}
2.HibernateCostDAO例子:
//查询总记录数
public int count() {
String hql = "select count(*) from Cost";
List list = this.getHibernateTemplate().find(hql);
int c = Integer.parseInt(list.get(0).toString());
return c;
}
//删除
public void delete(Cost cost) {
this.getHibernateTemplate().delete(cost);
}
//查询所有记录
public List<Cost> findAll() {
String hql = "from Cost";
List<Cost> list = this.getHibernateTemplate().find(hql);
return list;
}
//通过id查询,两种方式
public Cost findById(int id) {
//Cost cost = (Cost)
//this.getHibernateTemplate().get(Cost.class, id);
//return cost;
String hql = "from Cost where id=?";
Object[] params = {id};
List<Cost> list =
this.getHibernateTemplate().find(hql,params);
if(list.isEmpty()){
return null;
}else{
return list.get(0);
}
}
//增加
public void save(Cost cost) {
this.getHibernateTemplate().save(cost);
}
//更新
public void update(Cost cost) {
this.getHibernateTemplate().update(cost);
}
//Session的使用
public void useSession(){
//第一种方法
Session session = this.getSession();
//使用Session对象操作
session.close();//注意释放该Session对象
//第二种方法(推荐)
List list = (List)this.getHibernateTemplate().execute(
new HibernateCallback(){
//回调函数
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
//使用Session对象操作
Query query = session.createQuery("from Cost");
return query.list();//该值当做template.execute方法结果返回
}
}
);
}
}
3.配置例子:
<!--DataSource-->
<bean id="myDataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="username" value="jsd1303"></property>
<property name="password" value="jsd1303"></property>
<property name="driverClassName"
value="oracle.jdbc.OracleDriver">
</property>
<property name="url"
value="jdbc:oracle:thin:@172.16.9.98:1521:boson1">
</property>
</bean>
<!--SessionFactory-->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<!-- 连接参数信息 -->
<property name="dataSource" ref="myDataSource">
</property>
<!-- hibernate框架参数 -->
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.OracleDialect
</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
</props>
</property>
<!-- 指定hbm.xml映射描述 -->
<property name="mappingResources">
<list>
<value>com/google/entity/Cost.hbm.xml</value>
</list>
</property>
</bean>
<!--HibernateCostDAO-->
<bean id="costDao" scope="singleton"
class="com.google.dao.impl.HibernateCostDAO">
<property name="sessionFactory"
ref="sessionFactory">
</property>
</bean>