您的位置:首页 > 编程语言 > Java开发

Spring的HibernateDaoSupport及用hibernate执行原生SQL

2009-12-05 15:23 393 查看
Spring为Hibernate的DAO提供工具类:HibernateDaoSupport。该类主要提供了两个方法:
(1)public final HibernateTemplate getHibernateTemplate()
(2)public final void setSessionFactory(SessionFactory sessionFactory)
其中,

(1)setSessionFactory方法接收来自Spring的applicationContext的依赖注入,接收了在Spring中配置的SessionFactory;

(2)getHibernateTemplate方法用来利用刚才的SessionFactory生成Session,来完成数据库的访问。

执行原生SQL(这个类要继承Spring的HibernateDaoSupport类):

(1)查询

HibernateTemplate tmpl = getHibernateTemplate();
return tmpl.execute(new HibernateCallback<List<String>>() {
@SuppressWarnings("unchecked")
@Override
public List<String> doInHibernate(Session session)
throws HibernateException, SQLException {
SQLQuery query = session.createSQLQuery("select name from userinfo where userid=?");
query.addScalar("name", Hibernate.STRING);   //返回值类型
query.setInteger(0, Integer.parseInt(userId)); //输入参数
List results = query.list();  //因为只有查询一个列,所以返回的List是List<Object>
return (List<String>)results;
}
});

HibernateTemplate tmpl = getHibernateTemplate();
return tmpl.execute(new HibernateCallback<List<Object[]>>() {
@SuppressWarnings("unchecked")
@Override
public List<Object[]> doInHibernate(Session session)
throws HibernateException, SQLException {
SQLQuery query = session.createSQLQuery("select name,desc from userinfo where userid=?);
query.addScalar("name", Hibernate.STRING);
query.addScalar("desc", Hibernate.STRING);
query.setInteger(0, Integer.parseInt(userId));
List results = query.list();  //有多个列,返回的是List<Object[]>
for (int i = 0; i < results.size(); i++) {
Object[] row = (Object[]) results.get(i);
String name = (String) row[0];
String desc = (String) row[1];
System.out.println("name=" + name + ";desc=" + desc);
}
return (List<Object[]>)results;
}
});


(2)插入、更新、删除

HibernateTemplate tmpl = getHibernateTemplate();
tmpl.execute(new HibernateCallback<Object>() {
@Override
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
session.doWork(new Work() {
@Override
public void execute(Connection conn) throws SQLException {
PreparedStatement pstat = conn
.prepareStatement("insert into userinfo(userid,name,desc) values(?,?,?)");
for (int i = 0; i < data.size(); i++) {
List<String> row = data.get(i);
String userid = row.get(0)
String name = row.get(1);
String desc = row.get(2);
pstat.setInt(1, userId);
pstat.setString(2, name);
pstat.setString(3, desc);
pstat.addBatch();
}
pstat.executeBatch();
}
});
return null;
}
});
这里面data是一个List<List<String>>的二维表格形式
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: