在比较老的hibernate里面,可以用下面的代码获取connection,还有其他对象。
public class test {
public List method(String sql) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
List ret = new ArrayList();
try {
conn = SessionFactoryUtils.getDataSource(getSessionFactory()).getConnection();
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
while (rs.next()) {
/////
}
ret.add(rs);
} 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对象。所以Hibernate提供了一个能传递返回值得的方法doReturningWork() 。直接上我项目中的代码:
public String CheckLogin(String username, String password) throws SQLException {
String id = null;
final String sql = "select * from Student where Student_Username='" + username + "' and Student_Password='"
+ password + "' and Student_State='入住'";
Session session = HibernateSessionFactory.getSession();
ResultSet rs = session.doReturningWork(new ReturningWork<ResultSet>() {
@Override
public ResultSet execute(Connection connection) throws SQLException {
PreparedStatement preparedStatement = connection.prepareStatement(sql);
ResultSet rs = preparedStatement.executeQuery();
return rs;
}
});
while (rs.next()) {
id = rs.getString("Student_ID");
}
return id;
}
通过内部类,把resultset对象一层一层返回给这个doReturnWork,这样就可以像用jdbc一样使用hibernate了。