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>>的二维表格形式
(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>>的二维表格形式
相关文章推荐
- Spring的HibernateDaoSupport及用hibernate执行原生SQL
- Spring的HibernateDaoSupport及用hibernate执行原生SQL
- 关于No Dialect mapping for JDBC type :-9 hibernate执行原生sql语句问题
- spring的HibernateDaoSupport以及HibernateTemplate和jdbcTemplate的选择问题
- spring中的HibernateDaoSupport的用法
- hibernate 执行原生sql,select返回string,long
- Hibernate执行原生SQL返回List<Map>类型结果集
- Hibernate执行原生sql时,将数据库的char(n)类型转换成了character类型的解决方案
- 使用Spring的HibernateDaoSupport时的getSession()3个方法的区别
- 由openSession、getCurrentSession和HibernateDaoSupport浅谈Spring对事物的支持
- spring中的HibernateDaoSupport的用法
- 由openSession、getCurrentSession和HibernateDaoSupport浅谈Spring对事物的支持
- Spring整合Hibernate,不用HibernateDaoSupport与HibernateTemplate而用Hibernate自己的api分析说明
- Spring + JdbcTemplate + JdbcDaoSupport + HibernateDaoSupport examples
- Hibernate执行原生sql将查询结果直接转为VO
- Spring学习笔记-HibernateTemplate和HibernateDaoSupport
- weblogic hibernate关于No Dialect mapping for JDBC type :-9 hibernate执行原生sql语句问题(www.50xiao.com)
- 使用Hibernate SQLQuery执行原生SQL
- spring : HibernateDaoSupport,其中的sessionFactory并不能自动注入,只能手动
- spring中使用HibernateTemplate或HibernateDaoSupport报类型转换错误