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>>的二维表格形式