在spring+hibernate的架设中,访问数据库有几种步骤,按spring倚赖流入来界别有3种,在这头里先再来懂得一下子spring的依托流入,spring重要的两大核心便是IOC(统制反转)和AOP(面临剖面编程),统制反转乃是统制转移,从往常由Bean去统制要调用的接口或其余资源转移给器皿,由器皿来找寻并范例化要调用的接口,也可以解释成倚赖流入,即在spring配置文件中把要调用的接口、设立、结构子配备给Bean。
这里是以依托流入来界别为sessionFactory、hibernateTemplate、jdbcTemplate,本质上区划唯有hibernateTemplate和jdbcTemplate这两种。
一、流入sessionFactory
在spring配置文件中,对Dao流入sessionFactory,即:
这里sessionFactory委以流入的不是给Dao层中的种,而是给HibernateDaoSupport,见spring源文件org/springframework/orm/hibernate三/support/HibernateDaoSupport.java里边,就有sessionFactory的set、get操作:
public final void setSessionFactory(SessionFactory sessionFactory) {
this.hibernateTemplate = createHibernateTemplate(sessionFactory);//透过sessionFactory下辈子成hibernateTemplate
}
public final SessionFactory getSessionFactory() {
return (this.hibernateTemplate != null ? this.hibernateTemplate.getSessionFactory() : null);
}
所以在Dao层中类承继HibernateDaoSupport,即可通过this.getHibernateTemplate()来对数据库进展操作,
更新数据:this.getHibernateTemplate().update(bo);
查询数据:this.getHibernateTemplate().find(bo);
平添数据:this.getHibernateTemplate().save(bo) ;
剔除数据:this.getHibernateTemplate().delete(bo);
从上头可以看出spring+hibernate的强大威力,存取数据不要像往常jdbc那样,要写一大串try,catch话语,还要连接数据库,用完再封锁数据库联接,而用一条话语就可以搞定。
这边sessionFactory由spring自动自动联接、封闭,当然你也可以手动来联接、封锁,如次面采取的步骤:
Session session=this.getHibernateTemplate().getSessionFactory().openSession();
Transaction tx=session.beginTransaction();
/*--------------查询数据------------------------*/
String str="hql";
Query query=session.createQuery(str);
List list=query.list();
/*--------------剔除数据------------------------*/
session.load(bo,ID);
session.delete(bo);
/*--------------平添数据------------------------*/
session.save(bo);
/*--------------批改数据-----------------------*/
session.load(bo,ID);
session.update(bo);
/*--------------end---------------------------*/
tx.commit();
session.close();
初学Hebernate的人对这些代码应当很熟悉,没spring提供hibernateTemplate,在仅仅的Hibernate中就得用这种方面去访问存取数据了。
二、流入hibernateTemplate
这种步骤性质跟进面流入sessionFactory同样,只不过再开展一层包装,这么最大的好处便是Dao中的种就不要再沿袭HibernateDaoSupport(在java中是单承继的,这独一一次的承继就被HibernateDaoSupport剥夺去就岂不遗憾?)不过在这先期要先要配备美hibernateTemplate,即:
再对要用到hibernateTemplate的Dao开展流入依托,即:
在Dao层的种快要增添hibernateTemplate对象,来对应配置文件中所流入的依托:
private HibernateTemplate hibernateTemplate;
public HibernateTemplate getHibernateTemplate() {
return hibernateTemplate;
}
public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}
hibernateTemplate对数据的增删查给就跟进面的同样,即:
更新数据:hibernateTemplate().update(bo);
查询数据:hibernateTemplate().find(bo);
增添数据:hibernateTemplate().save(bo) ;
剔除数据:hibernateTemplate().delete(bo);
三、流入jdbcTemplate
如若对原先的jdbc的SQL还念兹在兹,又对Hibernate的HQL没好感的话,就可以采取jdbcTemplate来增删查改数据库了。在某些情况下采取jdbcTemplate还比较便利,甚或还能拔高查询效率。在这事先也要像流入hibernateTemplate那样,先配备美jdbcTemplate,
如若jdbcTemplate和hibernateTemplate配备时都指向同一个dataSource,那就可以共用同一个事宜了。
再对要用到jdbcTemplate的Dao开展流入委以,即:
在Dao层的种将要平添jdbctemplate对象,来对应配置文件中所流入的委以:
protected JdbcTemplate jdbctemplate;
public JdbcTemplate getJdbctemplate() {
return jdbctemplate;
}
public void setJdbctemplate(JdbcTemplate jdbctemplate) {
this.jdbctemplate = jdbctemplate;
}
现时就可以经过jdbctemplate存取数据了:
查询数据:
/*------------查询单列-------------------*/
String SQL= "select name from table";
List list= jdbctemplate.queryForList(SQL);
/*------------查询多列------------------*/
Hashtable hash = new Hashtable();
jdbctemplate.query(SQL,
new RowCallbackHandler() {
public void processRow(ResultSet rs) throws SQLException {
hash.put(rs.getString(一),rs.getString(二));
}
});
/*----------查询后填充到vo里边-----------*/
String SQL="select * from table where id=?";
String[] obj = new String[一];
obj[零] = N;
VO vo= new VO(); //这里暂用VO来示意,VO的性质不是这么的
List list = jdbcTemplate.query(SQL,obj,vo);
VO要兑现RowMapper接口中的mapRow步骤,把结果集填充到bo里边:
class VO implements RowMapper{
public Object mapRow(ResultSet rs, int index) throws SQLException {
Bo bo = new Bo();
bo.setProperty(rs.getString(一));
bo.setProperty(rs.getString(二));
bo.setProperty(rs.getString(三));
return bo;
}
}
/*----------------更新数据------------------*/
String SQL="update table set name=?";
String[] obj=new String[一];
obj[一]="new name";
jdbcTemplate.update(SQL,obj);
/*----------------剔除数据------------------*/
String SQL="delete from table where id='"+ID+"'";
jdbcTemplate.execute(SQL);
/*----------------平添数据------------------*/
String SQL="insert into table (property一,property二) values ('"+property一+"','"+property一+"')";
jdbcTemplate.execute(SQL);
这是在spring+hibernate构架中对Dao访问存取数据的步骤做一个小结,因为水准有限,错处和不足之处欢迎大伙批评指正。
本文来源:
我的异常网
Java Exception
Dotnet Exception
Oracle Exception
这里是以依托流入来界别为sessionFactory、hibernateTemplate、jdbcTemplate,本质上区划唯有hibernateTemplate和jdbcTemplate这两种。
一、流入sessionFactory
在spring配置文件中,对Dao流入sessionFactory,即:
这里sessionFactory委以流入的不是给Dao层中的种,而是给HibernateDaoSupport,见spring源文件org/springframework/orm/hibernate三/support/HibernateDaoSupport.java里边,就有sessionFactory的set、get操作:
public final void setSessionFactory(SessionFactory sessionFactory) {
this.hibernateTemplate = createHibernateTemplate(sessionFactory);//透过sessionFactory下辈子成hibernateTemplate
}
public final SessionFactory getSessionFactory() {
return (this.hibernateTemplate != null ? this.hibernateTemplate.getSessionFactory() : null);
}
所以在Dao层中类承继HibernateDaoSupport,即可通过this.getHibernateTemplate()来对数据库进展操作,
更新数据:this.getHibernateTemplate().update(bo);
查询数据:this.getHibernateTemplate().find(bo);
平添数据:this.getHibernateTemplate().save(bo) ;
剔除数据:this.getHibernateTemplate().delete(bo);
从上头可以看出spring+hibernate的强大威力,存取数据不要像往常jdbc那样,要写一大串try,catch话语,还要连接数据库,用完再封锁数据库联接,而用一条话语就可以搞定。
这边sessionFactory由spring自动自动联接、封闭,当然你也可以手动来联接、封锁,如次面采取的步骤:
Session session=this.getHibernateTemplate().getSessionFactory().openSession();
Transaction tx=session.beginTransaction();
/*--------------查询数据------------------------*/
String str="hql";
Query query=session.createQuery(str);
List list=query.list();
/*--------------剔除数据------------------------*/
session.load(bo,ID);
session.delete(bo);
/*--------------平添数据------------------------*/
session.save(bo);
/*--------------批改数据-----------------------*/
session.load(bo,ID);
session.update(bo);
/*--------------end---------------------------*/
tx.commit();
session.close();
初学Hebernate的人对这些代码应当很熟悉,没spring提供hibernateTemplate,在仅仅的Hibernate中就得用这种方面去访问存取数据了。
二、流入hibernateTemplate
这种步骤性质跟进面流入sessionFactory同样,只不过再开展一层包装,这么最大的好处便是Dao中的种就不要再沿袭HibernateDaoSupport(在java中是单承继的,这独一一次的承继就被HibernateDaoSupport剥夺去就岂不遗憾?)不过在这先期要先要配备美hibernateTemplate,即:
再对要用到hibernateTemplate的Dao开展流入依托,即:
在Dao层的种快要增添hibernateTemplate对象,来对应配置文件中所流入的依托:
private HibernateTemplate hibernateTemplate;
public HibernateTemplate getHibernateTemplate() {
return hibernateTemplate;
}
public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}
hibernateTemplate对数据的增删查给就跟进面的同样,即:
更新数据:hibernateTemplate().update(bo);
查询数据:hibernateTemplate().find(bo);
增添数据:hibernateTemplate().save(bo) ;
剔除数据:hibernateTemplate().delete(bo);
三、流入jdbcTemplate
如若对原先的jdbc的SQL还念兹在兹,又对Hibernate的HQL没好感的话,就可以采取jdbcTemplate来增删查改数据库了。在某些情况下采取jdbcTemplate还比较便利,甚或还能拔高查询效率。在这事先也要像流入hibernateTemplate那样,先配备美jdbcTemplate,
如若jdbcTemplate和hibernateTemplate配备时都指向同一个dataSource,那就可以共用同一个事宜了。
再对要用到jdbcTemplate的Dao开展流入委以,即:
在Dao层的种将要平添jdbctemplate对象,来对应配置文件中所流入的委以:
protected JdbcTemplate jdbctemplate;
public JdbcTemplate getJdbctemplate() {
return jdbctemplate;
}
public void setJdbctemplate(JdbcTemplate jdbctemplate) {
this.jdbctemplate = jdbctemplate;
}
现时就可以经过jdbctemplate存取数据了:
查询数据:
/*------------查询单列-------------------*/
String SQL= "select name from table";
List list= jdbctemplate.queryForList(SQL);
/*------------查询多列------------------*/
Hashtable hash = new Hashtable();
jdbctemplate.query(SQL,
new RowCallbackHandler() {
public void processRow(ResultSet rs) throws SQLException {
hash.put(rs.getString(一),rs.getString(二));
}
});
/*----------查询后填充到vo里边-----------*/
String SQL="select * from table where id=?";
String[] obj = new String[一];
obj[零] = N;
VO vo= new VO(); //这里暂用VO来示意,VO的性质不是这么的
List list = jdbcTemplate.query(SQL,obj,vo);
VO要兑现RowMapper接口中的mapRow步骤,把结果集填充到bo里边:
class VO implements RowMapper{
public Object mapRow(ResultSet rs, int index) throws SQLException {
Bo bo = new Bo();
bo.setProperty(rs.getString(一));
bo.setProperty(rs.getString(二));
bo.setProperty(rs.getString(三));
return bo;
}
}
/*----------------更新数据------------------*/
String SQL="update table set name=?";
String[] obj=new String[一];
obj[一]="new name";
jdbcTemplate.update(SQL,obj);
/*----------------剔除数据------------------*/
String SQL="delete from table where id='"+ID+"'";
jdbcTemplate.execute(SQL);
/*----------------平添数据------------------*/
String SQL="insert into table (property一,property二) values ('"+property一+"','"+property一+"')";
jdbcTemplate.execute(SQL);
这是在spring+hibernate构架中对Dao访问存取数据的步骤做一个小结,因为水准有限,错处和不足之处欢迎大伙批评指正。
本文来源:
我的异常网
Java Exception
Dotnet Exception
Oracle Exception
- 3631 - 两个catch子句都能捕捉一个try子句的异常
- 3632 - org.apache.axis2.dataretrieval.DataRetrievalException: Failed to load from file
- 3633 - program will exit
- 3634 - Fatal exception occurred
- 3635 - JavaMail中appendMessages抛出异常
- 3636 - could not execute query
- 3637 - SQLServer 2000 Driver for JDBC
- 3638 - Could not read mappings from resource
- 3639 - org.jaxen.JaxenException
- 3640 - 服务器出现EOFException
- 3641 - javax.servlet.jsp.el.ELException
- 3642 - oracle怎样高效批量更新
- 3643 - ORA-01031: insufficient privileges
- 3644 - 无法在WEB服务器启动调试。WEB服务器配置错误
- 3645 - System.Web.HttpRequestValidationException
- 3646 - stopOnFirstError属性无效
- 3647 - getOutputStream() has already been called for this response
- 3648 - Response.Write