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

Spring的HibernateDaoSupport及用hibernate执行原生SQL

2014-03-03 00:53 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)查询

[java] view
plaincopy

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;

}

});

[java] view
plaincopy

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)插入、更新、删除

[java] view
plaincopy

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>>的二维表格形式
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: