Hibernate4获取Connection,ResultSet对象详解编程语言

项目中需要一个json对象,封装的时候,需要数据的列名。

在jdbc里面,可以有个ResultMetaData对象获取列名字。因为我用的是hibernate,这个框架已经封装了很多,一般是难以获得resultset的。

经过不懈的bing和google(作为一个环保的准程序员,拒绝用百度了),发现在hibernate里面,可以获得resultset对象。不过现在是hibernate4,比较新,获取的方式改变了不少。

在之前的hibernate里面,可以用下面的代码获取connection,还有其他对象。

     java.sql.Connection c = null; 
        java.sql.PreparedStatement ps = null; 
        java.sql.ResultSet rs = null; 
 
public List   method(String sql) { 
        List ret = new ArrayList(); 
        try { 
        c =SessionFactoryUtils.getDataSource(getSessionFactory()).getConnection(); 
            ps = c.prepareStatement(sql); 
            rs = ps.executeQuery(); 
            while(rs.next()) { 
                 ..... 
                } 
                ret.add(ro); 
            } 
        } catch (Exception e) { 
             e.printStackTrace(); 
 
       } finally { 
           close(); 
        } 
        return ret; 
    }

这样,可以像jdbc一样,使用resultset等对象。

但是在hibernate4里面,方法已经改了,SessionFactoryUtils.getDataSource(getSessionFactory()).getConnection() 这一句已经不能使用,换的是新的方法。

如下:

 

getSession().doWork(new Work() { 
    @Override 
    public void execute(Connection connection) { 
                 
    } 
});

 

在方法体里面,可以直接使用connection了。

但是这样,返回的是一个void,而我要取用的是获得resultset对象。好在IDE有智能提示,发现里面有一个能传递返回值得的方法,算是上面一种方法的扩展吧。

直接上我项目中的代码:

 @Test 
    public void tests() throws SQLException { 
        Session session=HibernateSessionFactory.getSession(); 
        ResultSet resultSet=session.doReturningWork( 
                new ReturningWork<ResultSet>() { 
                    @Override 
                    public ResultSet execute(Connection connection) throws SQLException { 
                        String sql="select * from t_auth"; 
                        PreparedStatement preparedStatement=connection.prepareStatement(sql); 
                        ResultSet resultSet=preparedStatement.executeQuery(); 
                        return resultSet; 
                    } 
                } 
        ); 
        while (resultSet.next()){ 
            System.out.println("rs:"+resultSet.getString("authid")); 
        } 
    }

就是这个doReturnWork方法,里面通过内部类,把resultset对象一层一层返回给这个doReturnWork,这样就可以像用jdbc一样使用hibernate了。

个人一点心得,希望能给大家一些帮助。

 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/11556.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论